/*
* ##############################################################################
* This is a unlicensed code
* you could find a beautiful piece of code or a disaster that will make you
* wish a hippocampus dysfunction, no guarantees, use it at your discretion.
* ns616dc@gmail.com
* ##############################################################################
*/
package com.iofesac.notsel.desktop.dsignaturebasicsigner.signer;
import com.dsignature.config.ConfigManager;
import com.dsignature.crypto.SignatureOptions;
import com.dsignature.generation.RCSignatureProvider;
import com.dsignature.license.DSignatureLicenseManager;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author dorian <ns616dc(at)gmail.com>
*/
public class SignerTest {
public static final String HTTPTTSA = "http://tss.accv.es:8318/tsa";
public static final String POLITICA_FIRMAS = "http://ks.kprtech.com/policies/politica_firmas_xades_t_offline_v0.2.pdf";
public SignerTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of signFile method, of class Signer.
*/
@Test
public void testSignFile() {
try {
final InputStream licAsResource = this.getClass().getResourceAsStream("/iofe.lic");
DSignatureLicenseManager.getDSignatureLicenseManager().installLicense(
IOUtils.toByteArray(licAsResource));
DSignatureLicenseManager.getDSignatureLicenseManager().verifyLicense();
ConfigManager.init();
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(this.getClass().getResourceAsStream("./leonardnimoy.jks"), "123456".toCharArray());
final PrivateKey privateKey = (PrivateKey) keyStore.getKey("leonardnimoy", "123456".toCharArray());
// Build signature provider
RCSignatureProvider signatureProvider = new RCSignatureProvider.Builder()
.setSignerCertificate((X509Certificate) keyStore.getCertificate("leonardnimoy"))
.setPrivateKey(privateKey)
.setSignaturePolicy(POLITICA_FIRMAS)
.setTSAUrl(HTTPTTSA)
.build();
String digidocFileName = "pdf.pdf";
InputStream unsignedData = this.getClass().getResourceAsStream("./pdf.pdf");
SignatureOptions signatureOptions = new SignatureOptions();
signatureOptions.setLocationCity("Lima");
signatureOptions.setLocationCountry("Peru");
signatureOptions.setDataToSign(unsignedData);
signatureOptions.setCommitmentOID("1.2.840.113549.1.9.16.6.2");
signatureOptions.setDigidocFilename(digidocFileName);
ByteArrayOutputStream resolvedOutBuffer = new ByteArrayOutputStream();
signatureOptions.setSignatureFormat("PAdES");
signatureOptions.setOutputStream(resolvedOutBuffer);
signatureProvider.generateSignature(signatureOptions);
resolvedOutBuffer.flush();
Assert.assertNotNull(resolvedOutBuffer.toByteArray());
Assert.assertTrue(resolvedOutBuffer.toByteArray().length > 0);
} catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | UnrecoverableKeyException ex) {
Logger.getLogger(SignerTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}