Example usage for org.bouncycastle.asn1 DEROutputStream flush

List of usage examples for org.bouncycastle.asn1 DEROutputStream flush

Introduction

In this page you can find the example usage for org.bouncycastle.asn1 DEROutputStream flush.

Prototype

public void flush() throws IOException 

Source Link

Usage

From source file:com.android.builder.signing.SignedJarApkCreator.java

License:Apache License

/** Write the certificate file with a digital signature. */
private void writeSignatureBlock(CMSTypedData data, X509Certificate publicKey)
        throws IOException, CertificateEncodingException, OperatorCreationException, CMSException {

    ArrayList<X509Certificate> certList = new ArrayList<X509Certificate>();
    certList.add(publicKey);/*from   ww w .  j  a  v  a 2  s .  c  o m*/
    JcaCertStore certs = new JcaCertStore(certList);

    CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
    ContentSigner sha1Signer = new JcaContentSignerBuilder(
            mSignatureAlgorithm.signatureAlgorithmName(mDigestAlgorithm)).build(mKey);
    gen.addSignerInfoGenerator(
            new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
                    .setDirectSignature(true).build(sha1Signer, publicKey));
    gen.addCertificates(certs);
    CMSSignedData sigData = gen.generate(data, false);

    try (ASN1InputStream asn1 = new ASN1InputStream(sigData.getEncoded())) {
        DEROutputStream dos = new DEROutputStream(mOutputJar);
        try {
            dos.writeObject(asn1.readObject());
        } finally {
            dos.flush();
            dos.close();
        }
    }
}

From source file:com.android.builder.signing.SignedJarBuilder.java

License:Apache License

/** Write the certificate file with a digital signature. */
private void writeSignatureBlock(CMSTypedData data, X509Certificate publicKey, PrivateKey privateKey)
        throws IOException, CertificateEncodingException, OperatorCreationException, CMSException {

    ArrayList<X509Certificate> certList = new ArrayList<X509Certificate>();
    certList.add(publicKey);/*from   www  .  j  a v a  2 s .  c o m*/
    JcaCertStore certs = new JcaCertStore(certList);

    CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
    ContentSigner sha1Signer = new JcaContentSignerBuilder("SHA1with" + privateKey.getAlgorithm())
            .build(privateKey);
    gen.addSignerInfoGenerator(
            new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
                    .setDirectSignature(true).build(sha1Signer, publicKey));
    gen.addCertificates(certs);
    CMSSignedData sigData = gen.generate(data, false);

    ASN1InputStream asn1 = new ASN1InputStream(sigData.getEncoded());
    DEROutputStream dos = new DEROutputStream(mOutputJar);
    dos.writeObject(asn1.readObject());

    dos.flush();
    dos.close();
    asn1.close();
}

From source file:com.orange.atk.sign.apk.SignedJarBuilder.java

License:Apache License

/** Write the certificate file with a digital signature. */
private void writeSignatureBlock(CMSTypedData data, X509Certificate publicKey, PrivateKey privateKey)
        throws IOException, CertificateEncodingException, OperatorCreationException, CMSException {

    ArrayList<X509Certificate> certList = new ArrayList<X509Certificate>();
    certList.add(publicKey);//  www . j a va  2  s  .c om
    JcaCertStore certs = new JcaCertStore(certList);

    CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
    ContentSigner sha1Signer = new JcaContentSignerBuilder("SHA1with" + privateKey.getAlgorithm())
            .build(privateKey);
    gen.addSignerInfoGenerator(
            new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
                    .setDirectSignature(true).build(sha1Signer, publicKey));
    gen.addCertificates(certs);
    CMSSignedData sigData = gen.generate(data, false);

    ASN1InputStream asn1 = new ASN1InputStream(sigData.getEncoded());
    DEROutputStream dos = new DEROutputStream(mOutputJar);
    dos.writeObject(asn1.readObject());
    dos.flush();
    dos.close();
    asn1.close();
}

From source file:org.eclipse.andmore.android.certmanager.packaging.sign.SignatureBlockFile.java

License:Apache License

/**
 * Writes this file to an output stream/*from w w  w  .j a  v  a 2s.com*/
 * 
 * @param outputStream
 *            the output stream to write the file
 * @throws IOException
 *             if an I/O error occurs during the signing process
 * @throws SignException
 *             if a processing error occurs during the signing process
 * @throws KeyStoreManagerException
 * @throws KeyStoreException
 * @throws UnrecoverableKeyException
 * @throws NoSuchAlgorithmException
 * @throws InvalidKeyException 
 * @throws CertificateEncodingException 
 * @throws OperatorCreationException 
 * @throws CMSException 
 */
public void write(OutputStream outputStream) throws IOException, SignException, UnrecoverableKeyException,
        KeyStoreException, KeyStoreManagerException, NoSuchAlgorithmException, InvalidKeyException,
        CertificateEncodingException, OperatorCreationException, CMSException {
    // get certificate from entry
    X509Certificate[] certChain = { keystoreEntry.getX509Certificate() };
    if (certChain.length > 0) {
        X509Certificate publicKey = certChain[0];
        PrivateKey privateKey = keystoreEntry.getPrivateKey(keyEntryPassword);
        String blockalgorithm = getBlockAlgorithm();
        if (!blockalgorithm.equalsIgnoreCase(ISignConstants.DSA)
                && !blockalgorithm.equalsIgnoreCase(ISignConstants.RSA)) {
            AndmoreLogger.error(SignatureBlockFile.class,
                    "Signing block algorithm not supported. Key algorithm must be DSA or RSA");
            throw new SignException("Signing block algorithm not supported");
        }

        String signatureAlgorithm = ISignConstants.SHA1 + ISignConstants.ALGORITHM_CONNECTOR + blockalgorithm;

        Security.addProvider(new BouncyCastleProvider());

        ArrayList<X509Certificate> certList = new ArrayList<X509Certificate>();
        certList.add(publicKey);
        JcaCertStore certs = new JcaCertStore(certList);

        ContentSigner signer = new JcaContentSignerBuilder(signatureAlgorithm).build(privateKey);

        CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
        generator.addSignerInfoGenerator(
                new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().build())
                        .setDirectSignature(true).build(signer, publicKey));
        generator.addCertificates(certs);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        signatureFile.write(baos);

        CMSTypedData cmsdata = new CMSProcessableByteArray(baos.toByteArray());
        CMSSignedData signeddata = generator.generate(cmsdata, false);

        ASN1InputStream asn1 = new ASN1InputStream(signeddata.getEncoded());
        DEROutputStream dos = new DEROutputStream(outputStream);
        dos.writeObject(asn1.readObject());
        dos.flush();
        dos.close();
        asn1.close();
    }
    AndmoreLogger.info(SignatureBlockFile.class, "Created signature block file");
}