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
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users

Reply via email to