Another comment on the code, just for C++ style/safety: source = new FileSource(inputFileName, false);
might throw an exception. At which point the value of source would still be undefined, and it would be dangerout to call delete source; in the catch exception block. On Aug 28, 12:12 am, "Jeffrey Walton" <[EMAIL PROTECTED]> wrote: > Hi Rash, > > There's lots of sample code out there. Have you looked at any of it? > Seehttp://www.cryptopp.com/fom-serve/cache/1.htmlandhttp://www.cryptopp.com/wiki/. > > > delete new FileSource(inputFileName, true, encryptor); > > This is interesting to me. What is your motivation for creating this > on the Heap, rather than the Stack? > > Jeff > > On 8/27/07, Rash <[EMAIL PROTECTED]> wrote: > > > > > Hello All, > > I encrypt a file using AES::CBC mode with a random IV. Something > > like this > > > void encryptFile(const char* password, const char* inputFileName, > > const char* outputFileName) > > { > > byte pass[ AES::BLOCKSIZE ]; // digest of password > > byte iv[ AES::BLOCKSIZE ]; // Initial Vector (IV) > > > AutoSeededRandomPool *rng; > > rng = new AutoSeededRandomPool; // random number generator > > > // digest password > > delete new StringSource( password, true, > > new HashFilter(*(new SHA256), new ArraySink(pass, > > AES::BLOCKSIZE)) ); > > > // random Initial Vector > > rng->GenerateBlock(iv, AES::BLOCKSIZE); > > > // create object for encrypting > > AES::Encryption aesEncryption(pass, > > CryptoPP::AES::DEFAULT_KEYLENGTH); > > CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, > > iv); > > > StreamTransformationFilter *encryptor; > > encryptor = new StreamTransformationFilter(cbcEncryption, new > > FileSink(outputFileName) ); > > > // "bind" a file and encrypt one > > delete new FileSource(inputFileName, true, encryptor); > > } > > > Now how do I get the same Initialization Vector (IV) to decrypt the > > encrypted file or how do I write the decryptFile function: > > > void decryptFile(const char* password, const char*inputFileName,const > > char* outputFileName) > > { > > //how to get the IV that was used for encrypting the file. > > byte pass[ AES::BLOCKSIZE ]; > > byte iv[ AES::BLOCKSIZE ]; > > > FileSource *source; > > try > > { > > source = new FileSource(inputFileName, false); > > > delete new StringSource( password, true, > > new HashFilter(*(new SHA256), new > > ArraySink(pass,AES::BLOCKSIZE)) ); > > > CryptoPP::AES::Decryption aesDecryption(pass, > > CryptoPP::AES::DEFAULT_KEYLENGTH); > > CryptoPP::CBC_Mode_ExternalCipher::Decryption > > cbcDecryption( aesDecryption, iv ); > > > // "bind" decryptor to output file > > source->Attach( new StreamTransformationFilter(cbcDecryption, > > new FileSink((outputFileName) ) )); > > > // push the rest data > > source->PumpAll(); > > } > > catch(CryptoPP::Exception &e) > > { > > delete source ; > > throw; > > } > > delete source ; > > } > > > The above decryptFile function doesnt decrypt the first block. I dont > > know why? > > Please help. > > > Please help as this is really important to me. > > Thanks --~--~---------~--~----~------------~-------~--~----~ 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. -~----------~----~----~----~------~----~------~--~---
