package es.uji.security.crypto.xmldsign;
import java.io.File;
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.SignatureOptions;
import es.uji.security.crypto.SignatureResult;
import es.uji.security.crypto.config.OS;
import es.uji.security.crypto.xmldsign.XMLDsigSignatureFactory;
public class TestXMLDsigSignatureFactory
{
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());
SignatureOptions signatureOptions = new SignatureOptions();
signatureOptions.setDataToSign(new FileInputStream("src/main/resources/in.xml"));
signatureOptions.setCertificate(certificate);
signatureOptions.setPrivateKey((PrivateKey) key);
signatureOptions.setProvider(bcp);
XMLDsigSignatureFactory xmlSignatureFactory = new XMLDsigSignatureFactory();
SignatureResult signatureResult = xmlSignatureFactory.formatSignature(signatureOptions);
if (signatureResult.isValid())
{
OS.dumpToFile(new File("src/main/resources/out1.xml"), signatureResult
.getSignatureData());
signatureOptions = new SignatureOptions();
signatureOptions.setDataToSign(new FileInputStream("src/main/resources/out1.xml"));
signatureOptions.setCertificate(certificate);
signatureOptions.setPrivateKey((PrivateKey) key);
signatureOptions.setProvider(bcp);
xmlSignatureFactory = new XMLDsigSignatureFactory();
signatureResult = xmlSignatureFactory.formatSignature(signatureOptions);
if (signatureResult.isValid())
{
OS.dumpToFile(new File("src/main/resources/out2.xml"), signatureResult
.getSignatureData());
}
else
{
for (String error : signatureResult.getErrors())
{
System.out.println(error);
}
}
}
else
{
for (String error : signatureResult.getErrors())
{
System.out.println(error);
}
}
}
}