package es.uji.security.crypto.jxades;
import es.uji.security.crypto.ISignFormatProvider;
import es.uji.security.crypto.SignatureResult;
import es.uji.security.crypto.VerificationResult;
import es.uji.security.crypto.config.OS;
import es.uji.security.crypto.test.BaseCryptoAppletTest;
import org.junit.Before;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
public class JXAdESTest extends BaseCryptoAppletTest
{
@Before
public void init() throws FileNotFoundException
{
signatureOptions.setDataToSign(new ByteArrayInputStream(data));
}
@Test
public void jxadesEnvelopedWithoutCosign() throws Exception
{
// Sign
ISignFormatProvider signFormatProvider = new JXAdESSignatureFactory();
SignatureResult signatureResult = signFormatProvider.formatSignature(signatureOptions);
showErrors(signatureResult, "target/out-jxades-enveloped.xml");
// Verify
byte[] signedData = OS.inputStreamToByteArray(new FileInputStream("target/out-jxades-enveloped.xml"));
JXAdESSignatureVerifier signatureVerifier = new JXAdESSignatureVerifier();
VerificationResult verificationResult = signatureVerifier.verify(signedData);
showErrors(verificationResult);
}
@Test
public void jxadesEnvelopedCosign() throws Exception
{
// Sign
signatureOptions.setCoSignEnabled(true);
ISignFormatProvider signFormatProvider = new JXAdESSignatureFactory();
SignatureResult signatureResult = signFormatProvider.formatSignature(signatureOptions);
showErrors(signatureResult, "target/out-jxades-enveloped-cosign.xml");
// Verify
byte[] signedData = OS.inputStreamToByteArray(new FileInputStream("target/out-jxades-enveloped-cosign.xml"));
JXAdESSignatureVerifier signatureVerifier = new JXAdESSignatureVerifier();
VerificationResult verificationResult = signatureVerifier.verify(signedData);
showErrors(verificationResult);
}
@Test
public void jxadesDetachedCosign() throws Exception
{
// CoSign
byte[] data = "<?xml version=\"1.0\"?><root><d Id=\"D0\">a</d><d Id=\"D1\">b</d></root>"
.getBytes();
signatureOptions.setEnveloped(false);
signatureOptions.setCoSignEnabled(true);
signatureOptions.setReferences(Arrays.asList(new String[]{"D0", "D1"}));
for (int i = 0; i < 3; i++)
{
signatureOptions.setDataToSign(new ByteArrayInputStream(data));
ISignFormatProvider signFormatProvider = new JXAdESSignatureFactory();
SignatureResult signatureResult = signFormatProvider.formatSignature(signatureOptions);
showErrors(signatureResult, "target/out-jxades-detached-cosign.xml");
data = OS.inputStreamToByteArray(new FileInputStream("target/out-jxades-detached-cosign.xml"));
}
// Verify
data = OS.inputStreamToByteArray(new FileInputStream("target/out-jxades-detached-cosign.xml"));
JXAdESSignatureVerifier signatureVerifier = new JXAdESSignatureVerifier();
VerificationResult verificationResult = signatureVerifier.verify(data);
showErrors(verificationResult);
}
}