/* DigiDoc4J library * * This software is released under either the GNU Library General Public * License (see LICENSE.LGPL). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2.1, February 1999 */ package org.digidoc4j.signers; import java.security.cert.X509Certificate; import org.digidoc4j.SignatureToken; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.europa.esig.dss.DigestAlgorithm; import eu.europa.esig.dss.SignatureValue; import eu.europa.esig.dss.ToBeSigned; import eu.europa.esig.dss.token.AbstractSignatureTokenConnection; import eu.europa.esig.dss.token.DSSPrivateKeyEntry; import eu.europa.esig.dss.token.Pkcs12SignatureToken; /** * Implements PKCS12 signer. */ public class PKCS12SignatureToken implements SignatureToken { private static final Logger logger = LoggerFactory.getLogger(PKCS12SignatureToken.class); protected AbstractSignatureTokenConnection signatureTokenConnection = null; protected DSSPrivateKeyEntry keyEntry = null; /** * Constructs PKCS12 signer object. If more than one key is provided only first is used * * @param fileName .p12 file name and path * @param password keystore password */ public PKCS12SignatureToken(String fileName, char[] password) { logger.info("Using PKCS#12 signature token from file: " + fileName); signatureTokenConnection = new Pkcs12SignatureToken(password, fileName); keyEntry = signatureTokenConnection.getKeys().get(0); } @Override public X509Certificate getCertificate() { logger.debug(""); return keyEntry.getCertificate().getCertificate(); } @Override public byte[] sign(org.digidoc4j.DigestAlgorithm digestAlgorithm, byte[] dataToSign) { logger.info("Signing with PKCS#12 signature token, using digest algorithm: " + digestAlgorithm.name()); ToBeSigned toBeSigned = new ToBeSigned(dataToSign); DigestAlgorithm dssDigestAlgorithm = DigestAlgorithm.forXML(digestAlgorithm.toString()); SignatureValue signature = signatureTokenConnection.sign(toBeSigned, dssDigestAlgorithm, keyEntry); return signature.getValue(); } }