Я работаю с реализацией 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
не может быть передан в качестве параметра. Есть ли способ обойти это?
int generateKeyToFile(
AutoSeededRandomPool rnd,
string publicKeyFileName, string privateKeyFileName){
...
}
Используйте ссылку:
int GenerateKeyToFile(
RandomNumberGenerator& rnd,
const string& publicKeyFileName,
const string& privateKeyFileName)
{
...
}
Я не уверен AutoSeededRandomPool
является копируемым Я думаю, что все работает, как и ожидалось, потому что вы, вероятно, не должны копировать один. Просто передайте его по ссылке или по указателю.
Других решений пока нет …