Example usage for org.bouncycastle.bcpg CompressionAlgorithmTags ZLIB

List of usage examples for org.bouncycastle.bcpg CompressionAlgorithmTags ZLIB

Introduction

In this page you can find the example usage for org.bouncycastle.bcpg CompressionAlgorithmTags ZLIB.

Prototype

int ZLIB

To view the source code for org.bouncycastle.bcpg CompressionAlgorithmTags ZLIB.

Click Source Link

Document

ZLIB (RFC 1950) compression.

Usage

From source file:alpha.offsync.security.OpenPGPSecurityUtility.java

License:Apache License

@Override
public void sign(final OutputStream outputStream, final InputStream inputStream, final String keyInfo) {
    try {/*w  w  w  .j a  v a  2s .co  m*/
        final File keyFile = this.secretKeyRing;
        final char[] pass = this.secretKeyRingPassword;

        final ArmoredOutputStream out = new ArmoredOutputStream(outputStream);

        final PGPSecretKey pgpSec = this.getSignKey(keyInfo); // readSecretKey(new
        // FileInputStream(keyFile));
        final PGPPrivateKey pgpPrivKey = pgpSec.extractPrivateKey(
                new BcPBESecretKeyDecryptorBuilder(new BcPGPDigestCalculatorProvider()).build(pass));
        final PGPSignatureGenerator sGen = new PGPSignatureGenerator(
                new BcPGPContentSignerBuilder(pgpSec.getPublicKey().getAlgorithm(), HashAlgorithmTags.SHA1));

        sGen.init(PGPSignature.BINARY_DOCUMENT, pgpPrivKey);

        final Iterator it = pgpSec.getPublicKey().getUserIDs();
        if (it.hasNext()) {
            final PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator();

            spGen.setSignerUserID(false, (String) it.next());
            sGen.setHashedSubpackets(spGen.generate());
        }

        final PGPCompressedDataGenerator cGen = new PGPCompressedDataGenerator(CompressionAlgorithmTags.ZLIB);

        final BCPGOutputStream bOut = new BCPGOutputStream(cGen.open(out));

        sGen.generateOnePassVersion(false).encode(bOut);

        final PGPLiteralDataGenerator lGen = new PGPLiteralDataGenerator();
        final byte[] buffer = new byte[1 << 16];
        final OutputStream lOut = lGen.open(bOut, PGPLiteralData.BINARY, "", new Date(), buffer);
        int ch = 0;

        while ((ch = inputStream.read()) >= 0) {
            lOut.write(ch);
            sGen.update((byte) ch);
        }

        lGen.close();

        sGen.generate().encode(bOut);
        cGen.close();

        out.close();
    } catch (final FileNotFoundException e) {
        e.printStackTrace();
    } catch (final IOException e) {
        e.printStackTrace();
    } catch (final PGPException e) {
        e.printStackTrace();
    } catch (final SignatureException e) {
        e.printStackTrace();
    }
}

From source file:com.lyndir.lhunath.opal.crypto.gpg.GPG.java

License:Apache License

/**
 * PGP Encrypt a stream./*from   www. j  av  a  2s .  c om*/
 *
 * @param plainTextStream The stream that contains the plain-text data.
 * @param publicKey       The public key to use for encryption.
 * @param armoured        {@code true}: ASCII armor the encrypted data.
 *
 * @return The encrypted data stream.
 *
 * @throws NoSuchProviderException
 * @throws IOException
 * @throws PGPException
 */
public static InputStream encrypt(final InputStream plainTextStream, final PGPPublicKey publicKey,
        final boolean armoured) throws IOException, NoSuchProviderException, PGPException {

    /* Compress and extract literal data packets that can be encrypted. */
    PGPEncryptedDataGenerator encryptedDataGenerator = null;
    try (ByteArrayOutputStream decryptedStream = new ByteArrayOutputStream();
            ByteArrayOutputStream encryptedByteStream = new ByteArrayOutputStream()) {
        PGPLiteralDataGenerator literalDataGenerator = new PGPLiteralDataGenerator();
        PGPCompressedDataGenerator compressor = new PGPCompressedDataGenerator(CompressionAlgorithmTags.ZLIB);
        OutputStream literalStream = literalDataGenerator.open(compressor.open(decryptedStream),
                PGPLiteralData.BINARY, "", new Date(), new byte[4096]);
        ByteStreams.copy(plainTextStream, literalStream);
        compressor.close();

        /* Encrypt compressed data. */
        encryptedDataGenerator = new PGPEncryptedDataGenerator(SymmetricKeyAlgorithmTags.CAST5,
                new SecureRandom(), BouncyCastleProvider.PROVIDER_NAME);
        encryptedDataGenerator.addMethod(publicKey);

        /* Create the encrypted output stream, armour if necessary. */
        OutputStream encryptedStream = encryptedByteStream;
        if (armoured)
            encryptedStream = new ArmoredOutputStream(encryptedStream);

        /* Create and write out the encrypted file. */
        OutputStream encryptionStream = encryptedDataGenerator.open(encryptedStream, new byte[4096]);
        ByteStreams.copy(new ByteArrayInputStream(decryptedStream.toByteArray()), encryptionStream);

        return new ByteArrayInputStream(encryptedByteStream.toByteArray());
    } finally {
        if (encryptedDataGenerator != null)
            encryptedDataGenerator.close();
    }
}

From source file:org.apache.camel.converter.crypto.PGPDataFormatDynamicTest.java

License:Apache License

protected Map<String, Object> getHeaders() {
    Map<String, Object> headers = new HashMap<String, Object>();
    headers.put(PGPDataFormat.KEY_USERID, "sdude@nowhere.net");
    headers.put(PGPDataFormat.KEY_USERIDS, Collections.singletonList("second"));
    headers.put(PGPDataFormat.SIGNATURE_KEY_USERID, "sdude@nowhere.net");
    headers.put(PGPDataFormat.KEY_PASSWORD, "sdude");
    headers.put(PGPDataFormat.SIGNATURE_KEY_PASSWORD, "sdude");
    headers.put(PGPDataFormat.ENCRYPTION_ALGORITHM, SymmetricKeyAlgorithmTags.AES_128);
    headers.put(PGPDataFormat.SIGNATURE_HASH_ALGORITHM, HashAlgorithmTags.SHA512);
    headers.put(PGPDataFormat.COMPRESSION_ALGORITHM, CompressionAlgorithmTags.ZLIB);
    return headers;
}

From source file:org.apache.camel.converter.crypto.PGPDataFormatTest.java

License:Apache License

protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        public void configure() throws Exception {
            // START SNIPPET: pgp-format
            // Public Key FileName
            String keyFileName = getKeyFileName();
            // Private Key FileName
            String keyFileNameSec = getKeyFileNameSec();
            // Keyring Userid Used to Encrypt
            String keyUserid = getKeyUserId();
            // Private key password
            String keyPassword = getKeyPassword();

            from("direct:inline").marshal().pgp(keyFileName, keyUserid).to("mock:encrypted").unmarshal()
                    .pgp(keyFileNameSec, null, keyPassword).to("mock:unencrypted");
            // END SNIPPET: pgp-format

            // START SNIPPET: pgp-format-header
            PGPDataFormat pgpEncrypt = new PGPDataFormat();
            pgpEncrypt.setKeyFileName(keyFileName);
            pgpEncrypt.setKeyUserid(keyUserid);
            pgpEncrypt.setProvider(getProvider());
            pgpEncrypt.setAlgorithm(getAlgorithm());
            pgpEncrypt.setCompressionAlgorithm(getCompressionAlgorithm());

            PGPDataFormat pgpDecrypt = new PGPDataFormat();
            pgpDecrypt.setKeyFileName(keyFileNameSec);
            pgpDecrypt.setPassword(keyPassword);
            pgpDecrypt.setProvider(getProvider());

            from("direct:inline2").marshal(pgpEncrypt).to("mock:encrypted").unmarshal(pgpDecrypt)
                    .to("mock:unencrypted");

            from("direct:inline-armor").marshal().pgp(keyFileName, keyUserid, null, true, true)
                    .to("mock:encrypted").unmarshal().pgp(keyFileNameSec, null, keyPassword, true, true)
                    .to("mock:unencrypted");
            // END SNIPPET: pgp-format-header

            // START SNIPPET: pgp-format-signature
            PGPDataFormat pgpSignAndEncrypt = new PGPDataFormat();
            pgpSignAndEncrypt.setKeyFileName(keyFileName);
            pgpSignAndEncrypt.setKeyUserid(keyUserid);
            pgpSignAndEncrypt.setSignatureKeyFileName(keyFileNameSec);
            PGPPassphraseAccessor passphraseAccessor = getPassphraseAccessor();
            pgpSignAndEncrypt.setSignatureKeyUserid(keyUserid);
            pgpSignAndEncrypt.setPassphraseAccessor(passphraseAccessor);
            pgpSignAndEncrypt.setProvider(getProvider());
            pgpSignAndEncrypt.setAlgorithm(getAlgorithm());
            pgpSignAndEncrypt.setHashAlgorithm(getHashAlgorithm());
            pgpSignAndEncrypt.setCompressionAlgorithm(getCompressionAlgorithm());

            PGPDataFormat pgpVerifyAndDecrypt = new PGPDataFormat();
            pgpVerifyAndDecrypt.setKeyFileName(keyFileNameSec);
            pgpVerifyAndDecrypt.setPassword(keyPassword);
            pgpVerifyAndDecrypt.setSignatureKeyFileName(keyFileName);
            pgpVerifyAndDecrypt.setProvider(getProvider());

            from("direct:inline-sign").marshal(pgpSignAndEncrypt).to("mock:encrypted")
                    .unmarshal(pgpVerifyAndDecrypt).to("mock:unencrypted");
            // END SNIPPET: pgp-format-signature
            /* ---- key ring as byte array -- */
            // START SNIPPET: pgp-format-key-ring-byte-array
            PGPDataFormat pgpEncryptByteArray = new PGPDataFormat();
            pgpEncryptByteArray.setEncryptionKeyRing(getPublicKeyRing());
            pgpEncryptByteArray.setKeyUserids(getKeyUserIds());
            pgpEncryptByteArray.setProvider(getProvider());
            pgpEncryptByteArray.setAlgorithm(SymmetricKeyAlgorithmTags.DES);
            pgpEncryptByteArray.setCompressionAlgorithm(CompressionAlgorithmTags.UNCOMPRESSED);

            PGPDataFormat pgpDecryptByteArray = new PGPDataFormat();
            pgpDecryptByteArray.setEncryptionKeyRing(getSecKeyRing());
            pgpDecryptByteArray.setPassphraseAccessor(passphraseAccessor);
            pgpDecryptByteArray.setProvider(getProvider());

            from("direct:key-ring-byte-array").streamCaching().marshal(pgpEncryptByteArray).to("mock:encrypted")
                    .unmarshal(pgpDecryptByteArray).to("mock:unencrypted");
            // END SNIPPET: pgp-format-key-ring-byte-array

            // START SNIPPET: pgp-format-signature-key-ring-byte-array
            PGPDataFormat pgpSignAndEncryptByteArray = new PGPDataFormat();
            pgpSignAndEncryptByteArray.setKeyUserid(keyUserid);
            pgpSignAndEncryptByteArray.setSignatureKeyRing(getSecKeyRing());
            pgpSignAndEncryptByteArray.setSignatureKeyUserid(keyUserid);
            pgpSignAndEncryptByteArray.setSignaturePassword(keyPassword);
            pgpSignAndEncryptByteArray.setProvider(getProvider());
            pgpSignAndEncryptByteArray.setAlgorithm(SymmetricKeyAlgorithmTags.BLOWFISH);
            pgpSignAndEncryptByteArray.setHashAlgorithm(HashAlgorithmTags.RIPEMD160);
            pgpSignAndEncryptByteArray.setCompressionAlgorithm(CompressionAlgorithmTags.ZLIB);

            PGPDataFormat pgpVerifyAndDecryptByteArray = new PGPDataFormat();
            pgpVerifyAndDecryptByteArray.setPassphraseAccessor(passphraseAccessor);
            pgpVerifyAndDecryptByteArray.setEncryptionKeyRing(getSecKeyRing());
            pgpVerifyAndDecryptByteArray.setProvider(getProvider());

            from("direct:sign-key-ring-byte-array").streamCaching()
                    // encryption key ring can also be set as header
                    .setHeader(PGPDataFormat.ENCRYPTION_KEY_RING).constant(getPublicKeyRing())
                    .marshal(pgpSignAndEncryptByteArray)
                    // it is recommended to remove the header immediately when it is no longer needed
                    .removeHeader(PGPDataFormat.ENCRYPTION_KEY_RING).to("mock:encrypted")
                    // signature key ring can also be set as header
                    .setHeader(PGPDataFormat.SIGNATURE_KEY_RING).constant(getPublicKeyRing())
                    .unmarshal(pgpVerifyAndDecryptByteArray)
                    // it is recommended to remove the header immediately when it is no longer needed
                    .removeHeader(PGPDataFormat.SIGNATURE_KEY_RING).to("mock:unencrypted");
            // END SNIPPET: pgp-format-signature-key-ring-byte-array
        }//from w  w w .ja  va 2 s  .co  m
    };
}

From source file:org.sufficientlysecure.keychain.provider.ApiDataAccessObject.java

License:Open Source License

private ContentValues contentValueForApiAccounts(AccountSettings accSettings) {
    ContentValues values = new ContentValues();
    values.put(KeychainContract.ApiAccounts.ACCOUNT_NAME, accSettings.getAccountName());
    values.put(KeychainContract.ApiAccounts.KEY_ID, accSettings.getKeyId());

    // DEPRECATED and thus hardcoded
    values.put(KeychainContract.ApiAccounts.COMPRESSION, CompressionAlgorithmTags.ZLIB);
    values.put(KeychainContract.ApiAccounts.ENCRYPTION_ALGORITHM,
            PgpSecurityConstants.OpenKeychainSymmetricKeyAlgorithmTags.USE_DEFAULT);
    values.put(KeychainContract.ApiAccounts.HASH_ALORITHM,
            PgpSecurityConstants.OpenKeychainHashAlgorithmTags.USE_DEFAULT);
    return values;
}

From source file:org.sufficientlysecure.keychain.support.KeyringBuilder.java

License:Open Source License

private static SignaturePacket createSignaturePacket(BigInteger signature) {
    MPInteger[] signatureArray = new MPInteger[] { new MPInteger(signature) };

    int signatureType = PGPSignature.POSITIVE_CERTIFICATION;
    int keyAlgorithm = SignaturePacket.RSA_GENERAL;
    int hashAlgorithm = HashAlgorithmTags.SHA1;

    SignatureSubpacket[] hashedData = new SignatureSubpacket[] {
            new SignatureCreationTime(false, SIGNATURE_DATE),
            new KeyFlags(false, KeyFlags.CERTIFY_OTHER + KeyFlags.SIGN_DATA),
            new KeyExpirationTime(false, TimeUnit.DAYS.toSeconds(2)),
            new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_SYM_ALGS, false,
                    new int[] { SymmetricKeyAlgorithmTags.AES_256, SymmetricKeyAlgorithmTags.AES_192,
                            SymmetricKeyAlgorithmTags.AES_128, SymmetricKeyAlgorithmTags.CAST5,
                            SymmetricKeyAlgorithmTags.TRIPLE_DES }),
            new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_HASH_ALGS, false,
                    new int[] { HashAlgorithmTags.SHA256, HashAlgorithmTags.SHA1, HashAlgorithmTags.SHA384,
                            HashAlgorithmTags.SHA512, HashAlgorithmTags.SHA224 }),
            new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_COMP_ALGS, false,
                    new int[] { CompressionAlgorithmTags.ZLIB, CompressionAlgorithmTags.BZIP2,
                            CompressionAlgorithmTags.ZIP }),
            new Features(false, Features.FEATURE_MODIFICATION_DETECTION),
            createPreferencesSignatureSubpacket() };
    SignatureSubpacket[] unhashedData = new SignatureSubpacket[] {
            new IssuerKeyID(false, false, KEY_ID.toByteArray()) };
    byte[] fingerPrint = new BigInteger("522c", 16).toByteArray();

    return new SignaturePacket(signatureType, KEY_ID.longValue(), keyAlgorithm, hashAlgorithm, hashedData,
            unhashedData, fingerPrint, signatureArray);
}