package es.uji.security.crypto.raw; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.security.Key; import java.security.KeyStore; import java.security.PrivateKey; import java.security.Security; import java.security.cert.X509Certificate; import org.bouncycastle.jce.provider.BouncyCastleProvider; import es.uji.security.crypto.ISignFormatProvider; import es.uji.security.crypto.SignatureOptions; import es.uji.security.crypto.SignatureResult; import es.uji.security.crypto.VerificationResult; import es.uji.security.crypto.config.OS; import es.uji.security.crypto.raw.RawSignatureFactory; import es.uji.security.crypto.raw.RawSignatureVerifier; public class RawSignatureTest { public static void main(String[] args) throws Exception { BouncyCastleProvider bcp = new BouncyCastleProvider(); Security.addProvider(bcp); // Cargando certificado de aplicacion KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); keystore.load(new FileInputStream("../uji.keystore"), "cryptoapplet".toCharArray()); // Recuperando clave privada para firmar X509Certificate certificate = (X509Certificate) keystore.getCertificate(keystore.aliases() .nextElement()); Key key = keystore.getKey("uji", "cryptoapplet".toCharArray()); byte[] data = "data to sign".getBytes(); // Firmando documento ISignFormatProvider signFormatProvider = new RawSignatureFactory(); SignatureOptions signatureOptions = new SignatureOptions(); signatureOptions.setDataToSign(new ByteArrayInputStream(data)); signatureOptions.setCertificate(certificate); signatureOptions.setPrivateKey((PrivateKey) key); signatureOptions.setProvider(bcp); SignatureResult signatureResult = signFormatProvider.formatSignature(signatureOptions); byte[] signedData = OS.inputStreamToByteArray(signatureResult.getSignatureData()); RawSignatureVerifier rawSignatureVerifier = new RawSignatureVerifier(); VerificationResult verificationDetails = rawSignatureVerifier.verify(data, signedData, certificate, new BouncyCastleProvider()); if (verificationDetails.isValid()) { System.out.println("OK"); } else { System.out.println("BAD SIGNATURE"); } } }