Создайте два ключа RSA в одном коде в C - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь сгенерировать несколько ключей RSA в C, но я сталкиваюсь с ошибкой сегментации со следующим кодом:

#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
#include <openssl/bn.h>

int main () {
    RSA* keys = RSA_new();
    BIGNUM* e = malloc(sizeof(BIGNUM));
    BN_generate_prime_ex(e, 16, 1, NULL, NULL, NULL);
    int r = RSA_generate_key_ex(keys, 2048, e, NULL);

    RSA* keys2 = RSA_new();
    BIGNUM* e2 = malloc(sizeof(BIGNUM));
    BN_generate_prime_ex(e2, 16, 1, NULL, NULL, NULL);
    int r2 = RSA_generate_key_ex(keys2, 2048, e2, NULL);

    return 0;

}

Однако следующий код, похоже, работает хорошо:

#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
#include <openssl/bn.h>

int main () {
    RSA* keys = RSA_new();
    RSA* keys2 = RSA_new();
    BIGNUM* e = malloc(sizeof(BIGNUM));
    BIGNUM* e2 = malloc(sizeof(BIGNUM));
    BN_generate_prime_ex(e, 16, 1, NULL, NULL, NULL);
    BN_generate_prime_ex(e2, 16, 1, NULL, NULL, NULL);
    int r = RSA_generate_key_ex(keys, 2048, e, NULL);
    int r2 = RSA_generate_key_ex(keys2, 2048, e2, NULL);

    return 0;

}

Может кто-нибудь помочь мне выяснить, почему?

Я действительно хочу реализовать первое решение, потому что мое поколение RSA находится в функции.

1 Ответ

0 голосов
/ 05 апреля 2020

Проблема в том, что этот оператор неправильно инициализирует BIGNUM:

BIGNUM* e = malloc(sizeof(BIGNUM));

Вместо этого следует сделать следующее:

BIGNUM* e = BN_New();

Можете ли вы объяснить разница между выделением памяти с помощью mallo c и с BN_new?

Источник для BN_New показывает, что он работает немного больше malloc - он обнуляет память и устанавливает флаг.

PS При использовании недавнего OpenSSL исходная программа не компилируется (даже после добавления отсутствующего #include <openssl/bn.h>). Разработчики скрыли определение BIGNUM, поэтому эта ошибка больше не возможна.

...