package br.com.caelum.stella.nfe.security;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.Security;
import java.security.cert.X509Certificate;
public class TokenKeyStoreForWindows {
private final String configFileName;
private final TokenAlgorithm algorithm;
private final String senhaDoCertificado;
private KeyStore ks;
public TokenKeyStoreForWindows(String configFileName, TokenAlgorithm algorithm, String senhaDoCertificado) {
this.configFileName = configFileName;
this.algorithm = algorithm;
this.senhaDoCertificado = senhaDoCertificado;
createKeyStore();
}
private void createKeyStore() {
InputStream configFileStream = this.getClass().getResourceAsStream("/"+configFileName);
Provider p = new sun.security.pkcs11.SunPKCS11(configFileStream);
Security.addProvider(p);
char[] pin = senhaDoCertificado.toCharArray();
try {
this.ks = KeyStore.getInstance(algorithm.toString(), p);
this.ks.load(null, pin);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public CertificateAndPrivateKey getCertificateFor(String alias) {
try {
X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);
PrivateKey privateKey = (PrivateKey) ks.getKey(alias, senhaDoCertificado.toCharArray());
return new CertificateAndPrivateKey(certificate,privateKey);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}