Qual é a diferença entre o objeto no modo de modelo e o objeto de cifra externa?

Como no título, estou procurando odiferença na biblioteca cryptopp entreesta declaração:

CBC_Mode<AES>::Decryption 
cbcDecryption.SetKeyWithIV(key, AES::DEFAULT_KEYLENGTH, iv);

eeste:

AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );

Além disso, não consigo entender o porquê disso:

AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );

StreamTransformationFilter stfDecryptor(
    cbcDecryption,
    new StringSink( recoveredtext )
);

stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
stfDecryptor.MessageEnd();

tudo funciona bem enquanto estiver usando o modo de modelo, tenho esse erro durantetempo de execução:

AES128CBC: /usr/local/include/cryptopp/misc.h:304: void CryptoPP::memcpy_s(void*, size_t, const void*, size_t): Assertion `dest != __null' failed.
Aborted (core dumped)

Não deveria ser o mesmo?

Eu olheiesta mas não entendi bem a diferença e, pesquisando pela rede, não consegui encontrar uma resposta para o meu problema.

questionAnswers(1)

yourAnswerToTheQuestion