Return (move) CBC_Mode<AES>::Encryption object from a function
Anton Schmidt <[email protected]> Wed, 31 Aug 2022 08:24:46 -0700 (PDT)
| Newsgroups | gmane.comp.encryption.cryptopp |
|---|---|
| Message-ID | <[email protected]> |
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()
modes.h:259
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
https://wandbox.org/permlink/OeWKeOs9ERWYZKpr
This is a stack trace when address access violation happened
> CryptoPP::BlockOrientedCipherModeBase::IsForwardTransformation()
modes.h:259
>
CryptoPP::StreamTransformationFilter::LastBlockSize(CryptoPP::StreamTransformation
&, BlockPaddingScheme) filters.cpp:630
>
CryptoPP::StreamTransformationFilter::InitializeDerivedAndReturnNewSizes(const
CryptoPP::NameValuePairs &, unsigned int &, unsigned int &, unsigned int &)
filters.cpp:658
> CryptoPP::FilterWithBufferedInput::IsolatedInitialize(const
CryptoPP::NameValuePairs &) filters.cpp:332
>
CryptoPP::StreamTransformationFilter::StreamTransformationFilter(CryptoPP::StreamTransformation
&, 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 [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/2b12271a-be6b-4d9c-86b7-645bddcebfe7n%40googlegroups.com.