A fix to the file en/decryption code:

Symptom: An exception, the cipher text is not a multiple of block size
is thrown when decrypting data.
Fix: Open the encrypted file in binary mode

...
ifstream inf;
inf.open(inputFileName, ifstream::binary);        //open the encrypted
file in binary mode
inf.read(iv_garbage, 16);                                // absorb
random prefix
...

_PINUX_


On Nov 2, 8:28 pm, Mouse <[EMAIL PROTECTED]> wrote:
> > Hi Mouse I tested your code in VS2005. I have got a couple
> > of questions and appreciate that you can help me on any of
> > them.
>
> Sure.
>
> > Take the encryption code for example. You allocate memory
> > for 'encryptor' but I never see you delete them in your code.
>
> In the example I gave I did not bother deleting the encryptor object,
> letting the memory be reclaimed after the program completes.
>
> > I ran the code in a debug mode and found out after the FileSource
> > is called the memory of 'encryptor' object is freed magically.
>
> That I cannot explain as I don't know.
>
> > Is this a smart pointer design in CryptoPP?
>
> Wei Dai would be the best one to answer this question. I don't know if
> Crypto++ does or does not use Smart Pointers.
>
> > Does CryptoPP AES implementation support 32-byte block size?
> > Seems not.
>
> Since 32-byte-block AES does not exist, the answer is obvious. Rijndael
> design did support 32-byte blocks, but standardized AES does not.
>
> > As you know, we need to consider the padding when using CBC
> > mode so that we can process data in multiple of block size.
>
> Which is why it usually makes sense to wrap the encryptor in the
> StreamTransformationFilter().
>
>   std::string ciphertext;
>         StreamTransformationFilter cfbEncryptor(cfbEncryption, new
>   StringSink(ciphertext));
>         cfbEncryptor.Put(plaintext, 100);
>         // input more plaintext here if needed
>         cfbEncryptor.MessageEnd(); "
>
> > Your decryption code throws an exception saying the data
> > is not a multiple of block size. Is this because padding
> > should be added in the encryption code and how?
>
> Sorry, but *my* decryptor did not throw any exceptions - I've tested it
> before posting. I don't know the code that *you* wrapped around the
> decryptor, so cannot comment.
>
> > I can't get help from the sample code because it uses MessageEnd()
> > at the end of the encryption.
>
> Oh so you removed the MessageEnd() at the end of the encryption, so there's
> nothing to tell the encryptor "Now there's no more input - therefore pad
> whatever data is sitting in the buffer, encrypt it and push it out". And now
> you're surprised that your code does not work?
>
> > I can't use encryptor->MessageEnd() in your code because the
> > encryptor object is destroyed after the FileSource(...).
>
> That object should NOT just get destroyed all by itself. Something in your
> code must be doing something wrong with it. Again, take a look at the
> example I posted earlier - it has been tested and works properly.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [EMAIL PROTECTED]
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---

Reply via email to