Forgot my IV_SIZE const: const IV_SIZE = Blowfish::BLOCKSIZE; -- gl
----- Original Message ----- From: "gl" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Sunday, February 02, 2003 6:32 AM Subject: Streamcipher Seek() bugged? > > I've just updated my working 4.2 code to use 5.0 (downloaded from the > website, not from CVS). Under 4.2, Seek()'ing worked correctly for me, but > it no longer seems to work under 5. > > Here's some test code that demonstrates the failure: > > AutoSeededRandomPool rnd; > > SecByteBlock pass; > const char* passphrase = "test passphrase-"; > pass.Assign((unsigned char*)passphrase, strlen(passphrase)); > > unsigned char plain[100], buffer[100]; > rnd.GenerateBlock(plain, 100); > memcpy(buffer, plain, 100); > > SecByteBlock IV; > IV .New(IV_SIZE); > rnd.GenerateBlock(IV, IV_SIZE); > > CTR_Mode<Blowfish>::Encryption Enc(pass, pass.size(), IV); > CTR_Mode<Blowfish>::Decryption Dec(pass, pass.size(), IV); > > // encode, then decode the buffer > Enc.ProcessString(buffer, 100); > _ASSERT(memcmp(plain, buffer, 100) != 0); // passes > Dec.ProcessString(buffer, 100); > // does it match the plaintext? > _ASSERT(memcmp(plain, buffer, 100) == 0); // passes > > // encrypt the buffer again > Enc.Seek(0); > Enc.ProcessString(buffer, 100); > // copy the first plain byte into the first encrypted byte, > // seek the streamcipher and process it. > buffer[0] = plain[0]; > Enc.Seek(0); > Enc.ProcessString(buffer, 1); > // now try to decode the buffer again > Dec.Seek(0); > Dec.ProcessString(buffer, 100); > // do they still match? > _ASSERTE(memcmp(plain, buffer, 100) == 0); // FAILS! > > Does anyone see anything wrong with this? If no, Wei, any idea what's > happening here? > -- > gl >
