Example usage for java.security SignatureException SignatureException

List of usage examples for java.security SignatureException SignatureException

Introduction

In this page you can find the example usage for java.security SignatureException SignatureException.

Prototype

public SignatureException(String message, Throwable cause) 

Source Link

Document

Creates a SignatureException with the specified detail message and cause.

Usage

From source file:utils.GenerateAWSSignature.java

/**
 * Calculate String to Sign for SignatureVersion 2
 * @param parameters request parameters//w w w. j  a  va2  s .c  om
 * @return String to Sign
 * @throws java.security.SignatureException
 */
private String calculateStringToSignV2(Map<String, String> parameters) throws SignatureException {
    StringBuilder data = new StringBuilder();
    data.append("POST");
    data.append("\n");
    URI endpoint = null;
    try {
        //endpoint = new URI(config.getServiceURL().toLowerCase());
        endpoint = new URI(AWS_BASE_URL.toLowerCase());
    } catch (URISyntaxException ex) {
        System.out.println("URI Syntax Exception");
        throw new SignatureException("URI Syntax Exception thrown " + "while constructing string to sign", ex);
    }
    data.append(endpoint.getHost());
    data.append("\n");
    String uri = endpoint.getPath();
    if (uri == null || uri.length() == 0) {
        uri = "/";
    }
    data.append(urlEncode(uri, true));
    data.append("\n");
    Map<String, String> sorted = new TreeMap<String, String>();
    sorted.putAll(parameters);
    Iterator<Map.Entry<String, String>> pairs = sorted.entrySet().iterator();
    while (pairs.hasNext()) {
        Map.Entry<String, String> pair = pairs.next();
        String key = pair.getKey();
        data.append(urlEncode(key, false));
        data.append("=");
        String value = pair.getValue();
        data.append(urlEncode(value, false));
        if (pairs.hasNext()) {
            data.append("&");
        }
    }
    return data.toString();
}

From source file:org.panbox.core.crypto.CryptCore.java

public static byte[] sign(Signable s, PrivateKey key) throws SignatureException {
    try {/*from w w w .j  av a2s.c o m*/
        return SignatureHelper.sign(s, key);
    } catch (Exception e) {
        throw new SignatureException("Could not sign...", e);
    }
}

From source file:org.sinekartads.core.pdf.PDFTools.java

public static FinalizedSignature<SignatureType.SignCategory, SignDisposition.PDF, SecurityLevel.VerifyResult, PDFSignatureInfo> sign(
        SignedSignature<SignatureType.SignCategory, SignDisposition.PDF, SecurityLevel.VerifyResult, PDFSignatureInfo> signedSignature,
        //                                   X509Certificate certificate, 
        InputStream is, OutputStream os) throws SignatureException {
    ////      signAndMark(doc, certificate, is, os, null, null, null, null, null);
    //      signAndMark(signatureInfo, certificate, is, os, null, null, null);
    //   }//from   w w w .j  a  va 2  s  .  c  om
    //
    //   public static void signAndMark(PDFSignatureInfo doc,
    //         X509Certificate certificate, InputStream is, OutputStream os,
    //         String tsaUrl, String tsaUser, String tsaPassword) {
    ////      signAndMark(doc, certificate, is, os, tsaUrl, tsaUser, tsaPassword, null, null);
    ////   }
    ////   
    ////   public static void signAndMark(DigitalSignatureDocument doc,
    ////         X509Certificate certificate, InputStream is, OutputStream os,
    ////         String tsaUrl, String tsaUser, String tsaPassword, Collection<CrlClient> crlList, OcspClient ocspClient) {
    try {
        PDFSignatureInfo signature = (PDFSignatureInfo) signedSignature;
        TSAClient tsaClient = null;

        TsRequestInfo tsRequest = signature.getTsRequest();
        if (tsRequest != null && StringUtils.isNotBlank(tsRequest.getTsUrl())) {
            tsaClient = new TSAClientBouncyCastle(tsRequest.getTsUrl(), tsRequest.getTsUsername(),
                    tsRequest.getTsPassword());
        }
        //         if (tsaUrl!=null) {
        //            tsaClient = new TSAClientBouncyCastle(tsaUrl, tsaUser, tsaPassword);
        //         }

        int estimatedSize = 0;
        CryptoStandard sigtype = CryptoStandard.CMS;

        // creo il reader del pdf
        PdfReader reader = new PdfReader(is);

        // creo lo stamper (se il pdf e' gia' firmato, controfirma,
        // altrimenti firma
        PdfStamper stamper = null;
        if (isPdfSigned(reader)) {
            if (tracer.isDebugEnabled())
                tracer.debug("document already signed, i will apply another sign");
            stamper = PdfStamper.createSignature(reader, os, '\0', null, true);
        } else {
            if (tracer.isDebugEnabled())
                tracer.debug("document never signed before, this is first");
            stamper = PdfStamper.createSignature(reader, os, '\0');
        }

        // questo e' il certificato su cui lavorare
        Certificate[] chain = signature.getRawX509Certificates();
        //         Certificate[] chain = new Certificate[1];
        //         chain[0] = certificate;

        // creo la signature apparence
        PdfSignatureAppearance sap = stamper.getSignatureAppearance();
        ExternalDigest externalDigest = new BouncyCastleDigest();

        // inizio codice copiato da MakeSignature

        //         Collection<byte[]> crlBytes = null;
        //           int i = 0;
        //           while (crlBytes == null && i < chain.length)
        //              crlBytes = MakeSignature.processCrl(chain[i++], crlList);
        if (estimatedSize == 0) {
            estimatedSize = 8192;
            //               if (crlBytes != null) {
            //                   for (byte[] element : crlBytes) {
            //                       estimatedSize += element.length + 10;
            //                   }
            //               }
            //               if (ocspClient != null)
            estimatedSize += 4192;
            //               if (tsaClient != null)
            estimatedSize += 4192;
        }
        sap.setCertificate(chain[0]);
        sap.setReason(signature.getReason());
        sap.setLocation(signature.getLocation());

        Calendar cal = Calendar.getInstance();
        cal.setTime(signature.getSigningTime());
        sap.setSignDate(cal);
        sap.getStamper().setUnicodeModDate(signature.getUnicodeModDate());
        sap.getStamper().setFileId(signature.getFileId());

        PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
        dic.setReason(sap.getReason());
        dic.setLocation(sap.getLocation());
        dic.setContact(sap.getContact());
        dic.setDate(new PdfDate(sap.getSignDate())); // time-stamp will over-rule this
        sap.setCryptoDictionary(dic);

        HashMap<PdfName, Integer> exc = new HashMap<PdfName, Integer>();
        exc.put(PdfName.CONTENTS, new Integer(estimatedSize * 2 + 2));
        sap.preClose(exc);

        String hashAlgorithm = signature.getDigestAlgorithm().getName();
        PdfPKCS7 sgn = new PdfPKCS7(null, chain, hashAlgorithm, BouncyCastleProvider.PROVIDER_NAME,
                externalDigest, false);
        InputStream data = sap.getRangeStream();
        byte hash[] = DigestAlgorithms.digest(data, externalDigest.getMessageDigest(hashAlgorithm));
        //           byte[] ocsp = null;
        //           if (chain.length >= 2 && ocspClient != null) {
        //               ocsp = ocspClient.getEncoded((X509Certificate) chain[0], (X509Certificate) chain[1], null);
        //           }
        sgn.setExternalDigest(signature.getDigitalSignature(), null, "RSA");

        //           byte[] encodedSig = sgn.getEncodedPKCS7(hash, _getSignDate(doc.getSignDate()), tsaClient, ocsp, crlBytes, sigtype);
        byte[] encodedSig = sgn.getEncodedPKCS7(hash, cal, tsaClient, null, null, sigtype);

        if (estimatedSize + 2 < encodedSig.length)
            throw new IOException("Not enough space");

        ASN1EncodableVector extraDataVectorEncoding = new ASN1EncodableVector();
        // 
        extraDataVectorEncoding.add(new DERObjectIdentifier("1.2.840.114283")); // encoding attribute 
        extraDataVectorEncoding.add(new DERGeneralString("115.105.110.101.107.97.114.116.97"));

        // applico la firma al PDF
        byte[] extraDataVectorEncodingBytes = new DERSequence(new DERSequence(extraDataVectorEncoding))
                .getEncoded();

        byte[] paddedSig = new byte[estimatedSize];
        System.arraycopy(encodedSig, 0, paddedSig, 0, encodedSig.length);
        System.arraycopy(extraDataVectorEncodingBytes, 0, paddedSig, encodedSig.length,
                extraDataVectorEncodingBytes.length); // encoding attribute

        PdfDictionary dic2 = new PdfDictionary();
        dic2.put(PdfName.CONTENTS, new PdfString(paddedSig).setHexWriting(true));
        sap.close(dic2);

        // this should be already done, but ...
        // closing streams
        try {
            is.close();
        } catch (IOException e) {
            tracer.error("error on input stream", e);
        }
        try {
            os.flush();
        } catch (IOException e) {
            tracer.error("error on output stream", e);
        }
        try {
            os.close();
        } catch (IOException e) {
            tracer.error("error on output stream", e);
        }
        return signature.finalizeSignature();
        //      } catch (MarkFailedException e) {
        //         throw e;
    } catch (Exception e) {
        tracer.error("Unable to sign PDF.", e);
        throw new SignatureException("Unable to sign PDF.", e);
    }
}

From source file:com.amazonaws.cbui.AmazonFPSCBUIPipeline.java

/**
 * Computes RFC 2104-compliant HMAC signature.
 *///from  w  w  w.  j  a  v  a  2s .  c o  m
private static String sign(String data, String key, String signatureMethod) throws SignatureException {
    String signature = "";
    try {
        Mac mac = Mac.getInstance(signatureMethod);
        mac.init(new SecretKeySpec(key.getBytes(), signatureMethod));
        signature = new String(Base64.encodeBase64(mac.doFinal(data.getBytes(UTF_8_Encoding))));
    } catch (Exception e) {
        throw new SignatureException("Failed to generate signature: " + e.getMessage(), e);
    }
    return signature;
}

From source file:org.sinekartads.core.pdf.PDFTools.java

public static DigestSignature<SignatureType.SignCategory, SignDisposition.PDF, SecurityLevel.VerifyResult, PDFSignatureInfo> calculateFingerPrint(
        ChainSignature<SignatureType.SignCategory, SignDisposition.PDF, SecurityLevel.VerifyResult, PDFSignatureInfo> chainSignature,
        //                                                           X509Certificate certificate, 
        InputStream is) throws SignatureException {
    //      calculateFingerPrint(doc, certificate, is, null, null, null, null, null);
    //   }//from   w  w  w.  j ava  2  s.  co m
    //   
    //   public static void calculateFingerPrint(DigitalSignatureDocument doc,
    //         X509Certificate certificate, InputStream is, Collection<CrlClient> crlList, OcspClient ocspClient, String tsaUrl, String tsaUser, String tsaPassword) {
    try {

        //         TSAClient tsaClient=null;
        //         
        //         if (tsaUrl!=null) {
        //            tsaClient = new SinekartaTSAClient(tsaUrl, tsaUser, tsaPassword);
        //         }
        //
        int estimatedSize = 0;
        CryptoStandard sigtype = CryptoStandard.CMS; // FIXME qui c'era CMS
        PDFSignatureInfo signature = (PDFSignatureInfo) chainSignature;

        // creo il reader del pdf
        PdfReader reader = new PdfReader(is);

        // creo lo stamper (se il pdf e' gia' firmato, controfirma,
        // altrimenti firma
        PdfStamper stamper = null;
        if (isPdfSigned(reader)) {
            if (tracer.isDebugEnabled())
                tracer.debug("calculating finger print for document already signed");
            stamper = PdfStamper.createSignature(reader, null, '\0', null, true);
        } else {
            if (tracer.isDebugEnabled())
                tracer.debug("calculating finger print for document never signed before");
            stamper = PdfStamper.createSignature(reader, null, '\0');
        }

        // questo e' il certificato su cui lavorare
        Certificate[] chain = signature.getRawX509Certificates();
        //         Certificate[] chain = new Certificate[1];
        //         chain[0] = certificate;

        // creo la signature apparence
        PdfSignatureAppearance sap = stamper.getSignatureAppearance();
        ExternalDigest externalDigest = new BouncyCastleDigest();

        // inizio codice copiato da MakeSignature

        //         Collection<byte[]> crlBytes = null;
        //           int i = 0;
        //           while (crlBytes == null && i < chain.length)
        //              crlBytes = MakeSignature.processCrl(chain[i++], crlList);
        if (estimatedSize == 0) {
            estimatedSize = 8192;
            //               if (crlBytes != null) {
            //                   for (byte[] element : crlBytes) {
            //                       estimatedSize += element.length + 10;
            //                   }
            //               }
            //               if (ocspClient != null)
            estimatedSize += 4192;
            //               if (tsaClient != null)
            estimatedSize += 4192;
        }
        Calendar now = Calendar.getInstance();
        PdfDate date = new PdfDate(now);

        sap.setSignDate(now);
        signature.setSigningTime(now.getTime());
        signature.setUnicodeModDate(date.toUnicodeString());

        sap.setCertificate(chain[0]);
        sap.setReason(signature.getReason());
        sap.setLocation(signature.getLocation());

        PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
        dic.setReason(sap.getReason());
        dic.setLocation(sap.getLocation());
        dic.setContact(sap.getContact());
        dic.setDate(date); // time-stamp will over-rule this
        sap.setCryptoDictionary(dic);

        HashMap<PdfName, Integer> exc = new HashMap<PdfName, Integer>();
        exc.put(PdfName.CONTENTS, new Integer(estimatedSize * 2 + 2));
        sap.preClose(exc);

        String hashAlgorithm = signature.getDigestAlgorithm().getName();
        PdfPKCS7 sgn = new PdfPKCS7(null, chain, hashAlgorithm, BouncyCastleProvider.PROVIDER_NAME,
                externalDigest, false);
        //           String hashAlgorithm = Constants.SHA256;
        //           PdfPKCS7 sgn = new PdfPKCS7(null, chain, hashAlgorithm, Constants.BC, externalDigest, false);
        InputStream data = sap.getRangeStream();
        byte hash[] = DigestAlgorithms.digest(data, externalDigest.getMessageDigest(hashAlgorithm));
        //           byte[] ocsp = null;
        //           if (chain.length >= 2 && ocspClient != null) {
        //               ocsp = ocspClient.getEncoded((X509Certificate) chain[0], (X509Certificate) chain[1], null);
        //           }
        //           byte[] authenticatedAttributeBytes = sgn.getAuthenticatedAttributeBytes(hash, now, ocsp, crlBytes, sigtype);
        byte[] authenticatedAttributeBytes = sgn.getAuthenticatedAttributeBytes(hash, now, null, null, sigtype);

        // calcolo dell'impronta
        MessageDigest digester = MessageDigest.getInstance(signature.getDigestAlgorithm().getName());
        byte[] fingerPrint = digester.digest(authenticatedAttributeBytes);

        //           byte[] fingerPrint = Util.digest256(authenticatedAttributeBytes);

        signature.setAuthenticatedAttributeBytes(authenticatedAttributeBytes);
        signature.setFileId(sap.getStamper().getFileId());
        //           signature.setFileIDByteContent(TextUtil.byteToHex(sap.getStamper().getFileID().getBytes()));
        signature.setUnicodeModDate(sap.getStamper().getUnicodeModDate());
        //         signature.setModDateUnicodeString(sap.getStamper().getModDate().toUnicodeString());
        signature.setSigningTime(now.getTime());
        //         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSSZ");
        //         signature.setSignDate(sdf.format(now.getTime()));

        // this should be already done, but ...
        // closing streams
        try {
            is.close();
        } catch (IOException e) {
            tracer.error("error on input stream", e);
        }

        return signature.toDigestSignature(DigestInfo.getInstance(signature.getDigestAlgorithm(), fingerPrint));
    } catch (Exception e) {
        tracer.error("Unable to calculate finger print of PDF.", e);
        //         throw new PDFException("Unable calculate finger print of PDF.", e);
        throw new SignatureException("Unable calculate finger print of PDF.", e);
    }
}

From source file:org.sinekartads.core.pdf.PDFTools.java

/**
 * metodo di utilita' che verifica se il pdf in input e' gia' firmato
 * /*from  w w  w  .  j a  v  a2  s  .  c  om*/
 * @param reader
 * @return
 * @throws SignatureException 
 */
public static boolean isPdfSigned(InputStream is) throws SignatureException {
    if (tracer.isDebugEnabled())
        tracer.debug("chacking if PDF/A is signed");
    try {
        PdfReader reader = new PdfReader(is);
        boolean ret = false;
        if (PDFTools.isPdfSigned(reader)) {
            ret = true;
        }
        reader.close();
        return ret;
    } catch (Exception e) {
        tracer.error("Unable to read PDF. Unable to check if the pdf is signed.", e);
        throw new SignatureException("Unable to read PDF. Unable to check if the pdf is signed.", e);
    } finally {
        try {
            if (is != null)
                is.close();
        } catch (IOException e) {
        }
    }
}

From source file:org.sinekartads.core.pdf.PDFTools.java

/**
 * metodo di utilita' che verifica se il pdf in input e' gia' firmato
 * //www.j ava  2  s.  c o m
 * @param reader
 * @return
 * @throws SignatureException 
 */
public static boolean isPdfSigned(PdfReader reader) throws SignatureException {
    if (tracer.isDebugEnabled())
        tracer.debug("chacking if PDF/A is signed");
    try {
        AcroFields af = reader.getAcroFields();

        // Search of the whole signature
        ArrayList<String> names = af.getSignatureNames();

        // For every signature :
        if (names.size() > 0) {
            if (tracer.isDebugEnabled())
                tracer.debug("yes, it is");
            return true;
        } else {
            if (tracer.isDebugEnabled())
                tracer.debug("no, it isn't");
            return false;
        }
    } catch (Exception e) {
        tracer.error("Unable to read PDF. Unable to check if the pdf is signed.", e);
        throw new SignatureException("Unable to read PDF. Unable to check if the pdf is signed.", e);
    }
}

From source file:com.amazonaws.elasticmapreduce.AmazonElasticMapReduceClient.java

/**
 * Calculate String to Sign for SignatureVersion 2
 * @param parameters request parameters//from   w w  w .  ja v a2 s . c  o  m
 * @return String to Sign
 * @throws java.security.SignatureException
 */
private String calculateStringToSignV2(Map<String, String> parameters) throws SignatureException {
    StringBuilder data = new StringBuilder();
    data.append("POST");
    data.append("\n");
    URI endpoint = null;
    try {
        endpoint = new URI(config.getServiceURL().toLowerCase());
    } catch (URISyntaxException ex) {
        log.debug("URI Syntax Exception", ex);
        throw new SignatureException("URI Syntax Exception thrown " + "while constructing string to sign", ex);
    }
    data.append(endpoint.getHost());
    data.append("\n");
    String uri = endpoint.getPath();
    if (uri == null || uri.length() == 0) {
        uri = "/";
    }
    data.append(urlEncode(uri, true));
    data.append("\n");
    Map<String, String> sorted = new TreeMap<String, String>();
    sorted.putAll(parameters);
    Iterator<Map.Entry<String, String>> pairs = sorted.entrySet().iterator();
    while (pairs.hasNext()) {
        Map.Entry<String, String> pair = pairs.next();
        String key = pair.getKey();
        data.append(urlEncode(key, false));
        data.append("=");
        String value = pair.getValue();
        data.append(urlEncode(value, false));
        if (pairs.hasNext()) {
            data.append("&");
        }
    }
    return data.toString();
}

From source file:com.amazonservices.mws.sellers.MarketplaceWebServiceSellersClient.java

/**
 * Calculate String to Sign for SignatureVersion 2
 * /*w ww  .  ja va2s. c  om*/
 * @param parameters
 *            request parameters
 * @return String to Sign
 * @throws java.security.SignatureException
 */
private String calculateStringToSignV2(Map<String, String> parameters) throws SignatureException {
    StringBuilder data = new StringBuilder();
    data.append("POST");
    data.append("\n");
    URI endpoint = null;
    try {
        endpoint = new URI(config.getServiceURL().toLowerCase());
    } catch (URISyntaxException ex) {
        log.debug("URI Syntax Exception", ex);
        throw new SignatureException("URI Syntax Exception thrown " + "while constructing string to sign", ex);
    }
    data.append(endpoint.getHost());
    if (!usesAStandardPort(config.getServiceURL())) {
        data.append(":");
        data.append(endpoint.getPort());
    }
    data.append("\n");
    String uri = "/Sellers/2011-07-01";
    data.append(urlEncode(uri, true));
    data.append("\n");
    Map<String, String> sorted = new TreeMap<String, String>();
    sorted.putAll(parameters);
    Iterator<Map.Entry<String, String>> pairs = sorted.entrySet().iterator();
    while (pairs.hasNext()) {
        Map.Entry<String, String> pair = pairs.next();
        String key = pair.getKey();
        data.append(urlEncode(key, false));
        data.append("=");
        String value = pair.getValue();
        data.append(urlEncode(value, false));
        if (pairs.hasNext()) {
            data.append("&");
        }
    }
    return data.toString();
}

From source file:API.amazon.mws.orders.MarketplaceWebServiceOrdersClient.java

/**
 * Calculate String to Sign for SignatureVersion 2
 * @param parameters request parameters//from   w  w  w .j a  v  a2 s  . c  o m
 * @return String to Sign
 * @throws java.security.SignatureException
 */
private String calculateStringToSignV2(Map<String, String> parameters) throws SignatureException {
    StringBuilder data = new StringBuilder();
    data.append("POST");
    data.append("\n");
    URI endpoint = null;
    try {
        endpoint = new URI(config.getServiceURL().toLowerCase());
    } catch (URISyntaxException ex) {
        log.debug("URI Syntax Exception", ex);
        throw new SignatureException("URI Syntax Exception thrown " + "while constructing string to sign", ex);
    }
    data.append(endpoint.getHost());
    if (!usesAStandardPort(config.getServiceURL())) {
        data.append(":");
        data.append(endpoint.getPort());
    }
    data.append("\n");
    String uri = "/Orders/2011-01-01";
    data.append(urlEncode(uri, true));
    data.append("\n");
    Map<String, String> sorted = new TreeMap<String, String>();
    sorted.putAll(parameters);
    Iterator<Map.Entry<String, String>> pairs = sorted.entrySet().iterator();
    while (pairs.hasNext()) {
        Map.Entry<String, String> pair = pairs.next();
        String key = pair.getKey();
        data.append(urlEncode(key, false));
        data.append("=");
        String value = pair.getValue();
        data.append(urlEncode(value, false));
        if (pairs.hasNext()) {
            data.append("&");
        }
    }
    return data.toString();
}