Не удается передать 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 является копируемым Я думаю, что все работает, как и ожидалось, потому что вы, вероятно, не должны копировать один. Просто передайте его по ссылке или по указателю.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector