Ошибка генерации ключа RSA при вызове функции RSA_generate_key_ex
Я пытаюсь сгенерировать ключи RSA с помощью openssl. У меня ошибка наRSA_generate_key_ex
и понятия не имею, почему возникает ошибка.
Я совмещаю ERR_get_error()
а также ERR_error_string()
и я получил следующее сообщение: error:2506906C:lib(37):func(105):reason(108)
. Также я обнаружил, что код ошибки 108 означает RSA_R_DATA_GREATER_THAN_MOD_LEN
Я пытаюсь сгенерировать ключи RSA, используя приведенный ниже код C. Для краткости сокращаю бесплатные звонки и вывод ошибок
RSA* generateRSA()
{
BIGNUM *bne = BN_new();
if (bne == NULL)
{
return NULL;
}
if (BN_set_word(bne, RSA_F4) != 1)
{
return NULL;
}
RSA *r = RSA_new();
if (r == NULL)
{
return NULL;
}
// THERE I'VE GOT ERROR
if (RSA_generate_key_ex(r, 2048, bne, NULL)!= 1)
{
// ERR_get_error() returns 2506906C
// ERR_error_string() gives me RSA_R_DATA_GREATER_THAN_MOD_LEN
return NULL;
}
return r;
}
Вопрос в том, что означает ошибка и как ее исправить?
Изменить: я использую OpenSSL 1.1.0e 16 февраля 2017 г. Я использую его как часть проекта EDK II
1 ответ
Я понял, что необходимо засеять случайный генератор (генераторы случайных чисел openssl версий 1.0.2 и 1.1.0 должны быть явно засеяны).
я проверяю RAND_status()
. Он вернул 0. Итак, решение просто добавитьRAND_seed()
перед генерацией ключа:
const void* getSeedBuffer(int num);
RSA* generateRSA()
{
RAND_seed(getSeedBuffer(1000), 1000); // don't forget to free memory
BIGNUM *bne = BN_new();
if (bne == NULL)
{
return NULL;
}
if (BN_set_word(bne, RSA_F4) != 1)
{
return NULL;
}
RSA *r = RSA_new();
if (r == NULL)
{
return NULL;
}
if (RSA_generate_key_ex(r, 2048, bne, NULL)!= 1)
{
return NULL;
}
return r;
}