All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.aholbrook.paseto.util.Pkcs12 Maven / Gradle / Ivy

package net.aholbrook.paseto.util;

import net.aholbrook.paseto.crypto.KeyPair;
import net.aholbrook.paseto.exception.Pkcs12LoadException;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;

public class Pkcs12 {
	private Pkcs12() {
	}

	public static KeyPair load(String keystoreFile, String keystorePass, String alias) {
		return load(keystoreFile, keystorePass, alias, keystorePass);
	}

	public static KeyPair load(String keystoreFile, String keystorePass, String alias, String keyPass) {
		try {
			KeyStore p12 = KeyStore.getInstance("PKCS12");
			p12.load(new FileInputStream(keystoreFile), keystorePass.toCharArray());

			PrivateKey privateKey = (PrivateKey) p12.getKey(alias, keyPass.toCharArray());
			if (privateKey == null) { throw new Pkcs12LoadException(Pkcs12LoadException.Reason.PRIVATE_KEY_NOT_FOUND); }
			Certificate cert = p12.getCertificate(alias);
			if (cert == null) { throw new Pkcs12LoadException(Pkcs12LoadException.Reason.PUBLIC_KEY_NOT_FOUND); }
			PublicKey publicKey = cert.getPublicKey();

			return new KeyPair(privateKey.getEncoded(), publicKey.getEncoded());
		} catch (FileNotFoundException e) {
			throw new Pkcs12LoadException(e);
		} catch (CertificateException e) {
			throw new Pkcs12LoadException(e); // Unlikely to ever throw.
		} catch (NoSuchAlgorithmException e) {
			throw new Pkcs12LoadException(e); // Unlikely to occur on any modern jvm.
		} catch (UnrecoverableKeyException e) {
			throw new Pkcs12LoadException(e);
		} catch (IOException e) {
			throw new Pkcs12LoadException(e);
		} catch (KeyStoreException e) {
			throw new RuntimeException(e); // This can only occur if you forget to call load, thus this will never throw.
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy