diff options
Diffstat (limited to 'libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/ByteArrayHandler.java')
-rw-r--r-- | libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/ByteArrayHandler.java | 206 |
1 files changed, 0 insertions, 206 deletions
diff --git a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/ByteArrayHandler.java b/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/ByteArrayHandler.java deleted file mode 100644 index 948af4028..000000000 --- a/libraries/spongycastle/pg/src/main/java/org/spongycastle/openpgp/examples/ByteArrayHandler.java +++ /dev/null @@ -1,206 +0,0 @@ -package org.spongycastle.openpgp.examples; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.security.NoSuchProviderException; -import java.security.SecureRandom; -import java.security.Security; -import java.util.Date; - -import org.spongycastle.bcpg.ArmoredOutputStream; -import org.spongycastle.bcpg.CompressionAlgorithmTags; -import org.spongycastle.jce.provider.BouncyCastleProvider; -import org.spongycastle.openpgp.PGPCompressedData; -import org.spongycastle.openpgp.PGPCompressedDataGenerator; -import org.spongycastle.openpgp.PGPEncryptedDataGenerator; -import org.spongycastle.openpgp.PGPEncryptedDataList; -import org.spongycastle.openpgp.PGPException; -import org.spongycastle.openpgp.PGPLiteralData; -import org.spongycastle.openpgp.PGPLiteralDataGenerator; -import org.spongycastle.openpgp.PGPObjectFactory; -import org.spongycastle.openpgp.PGPPBEEncryptedData; -import org.spongycastle.openpgp.PGPUtil; -import org.spongycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder; -import org.spongycastle.openpgp.operator.jcajce.JcePBEDataDecryptorFactoryBuilder; -import org.spongycastle.openpgp.operator.jcajce.JcePBEKeyEncryptionMethodGenerator; -import org.spongycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder; -import org.spongycastle.util.io.Streams; - -/** - * Simple routine to encrypt and decrypt using a passphrase. - * This service routine provides the basic PGP services between - * byte arrays. - * - * Note: this code plays no attention to -CONSOLE in the file name - * the specification of "_CONSOLE" in the filename. - * It also expects that a single pass phrase will have been used. - * - */ -public class ByteArrayHandler -{ - /** - * decrypt the passed in message stream - * - * @param encrypted The message to be decrypted. - * @param passPhrase Pass phrase (key) - * - * @return Clear text as a byte array. I18N considerations are - * not handled by this routine - * @exception IOException - * @exception PGPException - * @exception NoSuchProviderException - */ - public static byte[] decrypt( - byte[] encrypted, - char[] passPhrase) - throws IOException, PGPException, NoSuchProviderException - { - InputStream in = new ByteArrayInputStream(encrypted); - - in = PGPUtil.getDecoderStream(in); - - PGPObjectFactory pgpF = new PGPObjectFactory(in); - PGPEncryptedDataList enc; - Object o = pgpF.nextObject(); - - // - // the first object might be a PGP marker packet. - // - if (o instanceof PGPEncryptedDataList) - { - enc = (PGPEncryptedDataList)o; - } - else - { - enc = (PGPEncryptedDataList)pgpF.nextObject(); - } - - PGPPBEEncryptedData pbe = (PGPPBEEncryptedData)enc.get(0); - - InputStream clear = pbe.getDataStream(new JcePBEDataDecryptorFactoryBuilder(new JcaPGPDigestCalculatorProviderBuilder().setProvider("SC").build()).setProvider("SC").build(passPhrase)); - - PGPObjectFactory pgpFact = new PGPObjectFactory(clear); - - PGPCompressedData cData = (PGPCompressedData)pgpFact.nextObject(); - - pgpFact = new PGPObjectFactory(cData.getDataStream()); - - PGPLiteralData ld = (PGPLiteralData)pgpFact.nextObject(); - - return Streams.readAll(ld.getInputStream()); - } - - /** - * Simple PGP encryptor between byte[]. - * - * @param clearData The test to be encrypted - * @param passPhrase The pass phrase (key). This method assumes that the - * key is a simple pass phrase, and does not yet support - * RSA or more sophisiticated keying. - * @param fileName File name. This is used in the Literal Data Packet (tag 11) - * which is really inly important if the data is to be - * related to a file to be recovered later. Because this - * routine does not know the source of the information, the - * caller can set something here for file name use that - * will be carried. If this routine is being used to - * encrypt SOAP MIME bodies, for example, use the file name from the - * MIME type, if applicable. Or anything else appropriate. - * - * @param armor - * - * @return encrypted data. - * @exception IOException - * @exception PGPException - * @exception NoSuchProviderException - */ - public static byte[] encrypt( - byte[] clearData, - char[] passPhrase, - String fileName, - int algorithm, - boolean armor) - throws IOException, PGPException, NoSuchProviderException - { - if (fileName == null) - { - fileName= PGPLiteralData.CONSOLE; - } - - byte[] compressedData = compress(clearData, fileName, CompressionAlgorithmTags.ZIP); - - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - - OutputStream out = bOut; - if (armor) - { - out = new ArmoredOutputStream(out); - } - - PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(new JcePGPDataEncryptorBuilder(algorithm).setSecureRandom(new SecureRandom()).setProvider("SC")); - encGen.addMethod(new JcePBEKeyEncryptionMethodGenerator(passPhrase).setProvider("SC")); - - OutputStream encOut = encGen.open(out, compressedData.length); - - encOut.write(compressedData); - encOut.close(); - - if (armor) - { - out.close(); - } - - return bOut.toByteArray(); - } - - private static byte[] compress(byte[] clearData, String fileName, int algorithm) throws IOException - { - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator(algorithm); - OutputStream cos = comData.open(bOut); // open it with the final destination - - PGPLiteralDataGenerator lData = new PGPLiteralDataGenerator(); - - // we want to generate compressed data. This might be a user option later, - // in which case we would pass in bOut. - OutputStream pOut = lData.open(cos, // the compressed output stream - PGPLiteralData.BINARY, - fileName, // "filename" to store - clearData.length, // length of clear data - new Date() // current time - ); - - pOut.write(clearData); - pOut.close(); - - comData.close(); - - return bOut.toByteArray(); - } - - public static void main(String[] args) throws Exception - { - Security.addProvider(new BouncyCastleProvider()); - - String passPhrase = "Dick Beck"; - char[] passArray = passPhrase.toCharArray(); - - byte[] original = "Hello world".getBytes(); - System.out.println("Starting PGP test"); - byte[] encrypted = encrypt(original, passArray, "iway", PGPEncryptedDataGenerator.CAST5, true); - - System.out.println("\nencrypted data = '"+new String(encrypted)+"'"); - byte[] decrypted= decrypt(encrypted,passArray); - - System.out.println("\ndecrypted data = '"+new String(decrypted)+"'"); - - encrypted = encrypt(original, passArray, "iway", PGPEncryptedDataGenerator.AES_256, false); - - System.out.println("\nencrypted data = '"+new String(org.spongycastle.util.encoders.Hex.encode(encrypted))+"'"); - decrypted= decrypt(encrypted, passArray); - - System.out.println("\ndecrypted data = '"+new String(decrypted)+"'"); - } -} |