I have a problem reading the decrypted messages and the decryptStream.read()
doesn't return me any bytes. See the code below that I used to encrypt data. I
am writing data to file using the encryptStream returned by the following
method.
On the other hand when I write the content to the file with in the following
method and later close all streams I can successfully decrypt the files. Has
anyone used streaming with gpg using RSA successfully. If so, can any one share
the information on how to do it.
I created a key using RSA with 1024 bytes using gpg --gen-key and used addkey
to add the sub key. I am using Bouncy Castle DataGenerators, Input and
outputStreams to stream the output from program and writing the encrypted
content to files. However the only way I could successfully decrypt files was
when I open, write and close compression, encryption and literal streams in the
same method. But for my needs I would like to return a encrypted stream and let
that stream be used for writing various data to files.
protected OutputStream encryptStream (String pPlainFilePath, boolean pAppend)
throws IOException
{
//PGP Encryption Data Generator
PGPEncryptedDataGenerator encryptedDataGen = null;
//PGP Literal Data Generator
PGPLiteralDataGenerator literalDataGen = null;
//PGP Compressed Data Generator
PGPCompressedDataGenerator compressedDataGen = null;
//The outputstream associates with different data generator for encryption,
compression and writing literal data.
OutputStream encryptStream = null;
OutputStream compressStream = null;
OutputStream literalStream = null;
//EncryptionDataGenerator opens this stream to create the encrypt stream.
OutputStream outputStream = null;
try
{
//PGPEncryption using SymmetricKey Algorithm CAST5 (128 bit key, as per
RFC 2144), Configred Message IntegrityCheck, Random Number Genarator Algorithm
SHA1PRNG with Bouncy Castle provider
encryptedDataGen = new
PGPEncryptedDataGenerator(getEncryptionAlgorithm(), isMessageIntegrityCheck(),
SecureRandom.getInstance(getRNGAlgorithm()), PROVIDER_NAME);
//Add a public key encrypted session key to the encrypted object
encryptedDataGen.addMethod(getPublicKey());
String pEncFilePath = null;
if ( isAsciiOutput() )
{
pEncFilePath = pPlainFilePath + ".asc";
}
else
{
pEncFilePath = pPlainFilePath + ".bpg";
}
//Create a FileOutputStream for the file
outputStream = new FileOutputStream(pEncFilePath, pAppend);
//Use ArmoredOutputStream with base64 encoding if it is Ascii
if ( isAsciiOutput() )
{
outputStream = new ArmoredOutputStream(outputStream);
}
//Use EncryptiedDataGenerator to open an output stream to write the
encrypted byes.
encryptStream = encryptedDataGen.open(outputStream, new byte[
BYTE_ARRAY_SIZE ] );
compressedDataGen = new
PGPCompressedDataGenerator(PGPCompressedData.BZIP2);
compressStream = compressedDataGen.open(encryptStream, new byte[
BYTE_ARRAY_SIZE ]);
literalDataGen = new PGPLiteralDataGenerator(true);
literalStream = literalDataGen.open(compressStream,
PGPLiteralData.BINARY, pEncFilePath, DateTools.getInstance().getSystemDate(),
new byte[BYTE_ARRAY_SIZE]);
}
catch (PGPException e)
{
sLOGGER.error(e.getMessage(), e);
if (e.getUnderlyingException() != null)
{
sLOGGER.error(e.getUnderlyingException());
}
}
catch (NoSuchProviderException e)
{
sLOGGER.error("No Such Provider named BC [BouncyCastle]" +
e.getMessage(), e);
}
catch (NoSuchAlgorithmException e)
{
sLOGGER.error("No Such Algorithm [" + getRNGAlgorithm() + "]" +
e.getMessage(), e);
}
finally
{
/*literalDataGen.close();
literalStream.close(); */
compressedDataGen.close();
compressStream.close();
encryptedDataGen.close();
encryptStream.close();
}
return literalStream;
//Encrypted and compressed outputstream
}
-----------------------------------------
This transmission may contain information that is privileged,
confidential, legally privileged, and/or exempt from disclosure
under applicable law. If you are not the intended recipient, you
are hereby notified that any disclosure, copying, distribution, or
use of the information contained herein (including any reliance
thereon) is STRICTLY PROHIBITED. Although this transmission and
any attachments are believed to be free of any virus or other
defect that might affect any computer system into which it is
received and opened, it is the responsibility of the recipient to
ensure that it is virus free and no responsibility is accepted by
JPMorgan Chase & Co., its subsidiaries and affiliates, as
applicable, for any loss or damage arising in any way from its use.
If you received this transmission in error, please immediately
contact the sender and destroy the material in its entirety,
whether in electronic or hard copy format. Thank you.
_______________________________________________
Gnupg-users mailing list
[email protected]
http://lists.gnupg.org/mailman/listinfo/gnupg-users