Не удается передать AutoSeededRandomPool в качестве параметра при использовании CryptoPP::RSA, ошибка C2729
Я работаю с реализацией RSA с использованием Crypto++. Я пытаюсь сгенерировать пару ключей RSA (открытый и закрытый) для файла, подобного этому.
Код может работать идеально, когда я положил все в main
, Когда я пытаюсь разделить его на функцию и передать AutoSeededRandomPool
объект как параметр, подобный этому:
int generateKeyToFile(
AutoSeededRandomPool rnd,
string publicKeyFileName, string privateKeyFileName){
try
{
RSA::PrivateKey rsaPrivate;
rsaPrivate.GenerateRandomWithKeySize(rnd, 3072);
RSA::PublicKey rsaPublic(rsaPrivate);
EncodePrivateKey(privateKeyFileName, rsaPrivate);
EncodePublicKey(publicKeyFileName, rsaPublic);
cout << "Successfully generated and saved RSA keys" << endl;
return 1;
}
catch (CryptoPP::Exception& e)
{
cerr << e.what() << endl;
return -1;
}
}
При сборке проекта я получил ошибку:
ошибка C2719: 'rnd': формальный параметр с __declspec(align('8')) не будет выровнен
Я не могу найти точный результат, связанный с Crypto ++, для этой ошибки от Google, но я нашел некоторый результат для кода ошибки C2719. Его содержание:
'параметр': формальный параметр с __declspec(align('#')) не будет выровнен
Модификатор align __declspec недопустим для параметров функции. Выравнивание параметров функции определяется используемым соглашением о вызовах. Для получения дополнительной информации см. Соглашение о вызовах.
В следующем примере создается C2719 и показано, как его исправить:
// C2719.cpp void func(int __declspec(align(32)) i); // C2719 // try the following line instead void func(int i);
Я еще не понял, применил ли это "решение" к моему делу.
Кажется AutoSeededRandomPool
не может быть передан в качестве параметра. Есть ли способ обойти это?
1 ответ
int generateKeyToFile(
AutoSeededRandomPool rnd,
string publicKeyFileName, string privateKeyFileName){
...
}
Используйте ссылку:
int GenerateKeyToFile(
RandomNumberGenerator& rnd,
const string& publicKeyFileName,
const string& privateKeyFileName)
{
...
}
Я не уверен AutoSeededRandomPool
является копируемым Я думаю, что все работает, как и ожидалось, потому что вы, вероятно, не должны копировать один. Просто передайте его по ссылке или по указателю.