может ли crypto ++ использовать [закрытый] объект ключа одновременно? [в нескольких потоках] - PullRequest
0 голосов
/ 04 марта 2020

предполагается, что у нас есть глобальный CryptoPP::ECIES<CryptoPP::ECP>::PrivateKey mykey инициализированный объект и 10 потоков, которые запускают CryptoPP::ECIES<CryptoPP::ECP>::Encryptor myencrypto(mykey) для создания объекта шифратора путем присвоения ключа от объекта mykey

, присваиватель принимает mykey в качестве ссылки

нужен ли мне Mutex, чтобы убедиться, что только один поток использует mykey одновременно, или многопоточность может назначать enryptor из ключевого объекта одновременно без каких-либо проблем (если да, это гарантировано)

(обратите внимание, что потоки только назначают из mykey одновременно, ни один из них не изменяет его (мой код не знает, если это делает назначитель cryptoPP))

1 Ответ

1 голос
/ 06 марта 2020

После получения ответа я выбрал блокировки мьютекса из своего кода и несколько раз тестировал, когда объект PrivateKey одновременно использовался многопоточностью для инициализации шифровщиков mutli

я получал утверждение в intger. cpp (исходный файл cryptoPP lib) в строке 2910

CRYPTOPP_ASSERT(bcLen <= N);

проверено около 10 раз, и go то же самое утверждение снова установило блокировки мьютекса, и утверждение исчезло (в состоянии выпуска я получал 0xc000005 (доступ запрещен) в ntdll.dll, потому что функция HeapFree () вызывается с неверным аргументом

...