package es.gob.jmulticard;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.Security;
import java.security.Signature;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import es.gob.jmulticard.jse.provider.ceres.CeresProvider;
import es.gob.jmulticard.jse.smartcardio.SmartcardIoConnection;
/** Pruebas del proveedor JSE para tarjeta CERES.
* @author Tomás García-Merás */
public final class TestJseProviderCeres {
private static final char[] PASSWORD = "1234".toCharArray(); //$NON-NLS-1$
/** Main.
* @param args No se usa.
* @throws Exception En cualquier error. */
public static void main(final String[] args) throws Exception {
//TestJseProviderCeres.testProviderWithCustomConnection();
//TestJseProviderCeres.testProviderWithDefaultConnection();
final Provider p = new CeresProvider();
Security.addProvider(p);
final KeyStore ks = KeyStore.getInstance("CERES"); //$NON-NLS-1$
final char[] pin = new UIPasswordCallback(
"PIN de la tarjeta CERES", //$NON-NLS-1$
null,
"Introduzca el PIN de la tarjeta CERES", //$NON-NLS-1$
"PIN FNMT-RCM-CERES" //$NON-NLS-1$
).getPassword();
ks.load(null, pin);
final Enumeration<String> aliases = ks.aliases();
String alias = null;
System.out.println("Encontrados los siguientes certificados:"); //$NON-NLS-1$
while (aliases.hasMoreElements()) {
alias = aliases.nextElement();
System.out.println(
AOUtil.getCN((X509Certificate) ks.getCertificate(alias))
);
}
System.out.println();
System.out.println("Se hara una firma de prueba con '" + AOUtil.getCN((X509Certificate) ks.getCertificate(alias)) + "'"); //$NON-NLS-1$ //$NON-NLS-2$
final Signature signature = Signature.getInstance("SHA1withRSA"); //$NON-NLS-1$
signature.initSign((PrivateKey) ks.getKey(alias, pin));
signature.update("Hola Mundo!!".getBytes()); //$NON-NLS-1$
final byte[] sign = signature.sign();
System.out.println("Firma generada correctamente:"); //$NON-NLS-1$
System.out.println(HexUtils.hexify(sign, true));
}
static void testProviderWithCustomConnection() throws Exception {
final Provider p = new CeresProvider(new SmartcardIoConnection());
Security.addProvider(p);
final KeyStore ks = KeyStore.getInstance("CERES"); //$NON-NLS-1$
ks.load(null, PASSWORD);
final Enumeration<String> aliases = ks.aliases();
String alias = null;
while (aliases.hasMoreElements()) {
alias = aliases.nextElement();
System.out.println(alias);
}
final Signature signature = Signature.getInstance("SHA1withRSA"); //$NON-NLS-1$
signature.initSign((PrivateKey) ks.getKey(alias, PASSWORD));
signature.update("Hola Mundo!!".getBytes()); //$NON-NLS-1$
signature.sign();
System.out.println("Firma generada correctamente"); //$NON-NLS-1$
}
static void testProviderWithDefaultConnection() throws Exception {
final Provider p = new CeresProvider();
Security.addProvider(p);
final KeyStore ks = KeyStore.getInstance("CERES"); //$NON-NLS-1$
ks.load(null, PASSWORD);
final Enumeration<String> aliases = ks.aliases();
String alias = null;
while (aliases.hasMoreElements()) {
alias = aliases.nextElement();
System.out.println(alias);
}
final Signature signature = Signature.getInstance("SHA1withRSA"); //$NON-NLS-1$
signature.initSign((PrivateKey) ks.getKey(alias, PASSWORD));
signature.update("Hola Mundo!!".getBytes()); //$NON-NLS-1$
signature.sign();
System.out.println("Firma generada correctamente"); //$NON-NLS-1$
System.out.println(
((X509Certificate)ks.getCertificate(alias)).getIssuerX500Principal().toString()
);
}
}