I wanted to write a factory method to initialize CBC_Mode<AES>::Encryption 
object like that

> CBC_Mode<AES>::Encryption GetEncryption(const SecByteBlock &key) {
>   CBC_Mode<AES>::Encryption encryption;
>   auto iv = GetIV();  // this is constant IV for entire application
>   encryption.SetKeyWithIV(key.data(), key.size(), iv.data(), iv.size());
>   return encryption;
> }

But when I use returned object in StreamTransformationFilter I get an 
address access violation in CryptoPP code
> CryptoPP::BlockOrientedCipherModeBase::IsForwardTransformation() 

Is it a CryptoPP bug (move-ctors are not implemented correctly) or 
Encryption objects cannot be moved for some security reasons? Or that is 
kind of impossible to implement move-ctor for a template class?

Seems that I should rather implement 
> template <class T>
> vector<byte> Encrypt(const T& text, const SecByteBlock& key) { ... }

but still curious about that 'move' issue.

CryptoPP library version 8.7.0
Test code is here 

This is a stack trace when address access violation happened
> CryptoPP::BlockOrientedCipherModeBase::IsForwardTransformation() 
&, BlockPaddingScheme) filters.cpp:630
CryptoPP::NameValuePairs &, unsigned int &, unsigned int &, unsigned int &) 
> CryptoPP::FilterWithBufferedInput::IsolatedInitialize(const 
CryptoPP::NameValuePairs &) filters.cpp:332
&, CryptoPP::BufferedTransformation *, BlockPaddingScheme) filters.cpp:598
> Test2() main.cpp:67
> main() main.cpp:81
> invoke_main() 0x00000000007b3873
> __scrt_common_main_seh() 0x00000000007b36f7
> __scrt_common_main() 0x00000000007b358d
> mainCRTStartup(void *) 0x00000000007b38f8
> <unknown> 0x00000000774cfa29
> <unknown> 0x0000000077817a9e
> <unknown> 0x0000000077817a6e

You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 

Reply via email to