Я пытаюсь создать ключ RSA (имеет тип BIGNUM), а затем превратить его в символ *, чтобы отправить его по каналу клиент-сервер, а затем снова превратить его в BIGNUM. Проблема в том, что когда я выполняю двойное приведение, я не получаю первоначальный результат. Я пытался смоделировать проблему с другим созданным мной BIGNUM, но, похоже, проблема только с ключом RSA. Вот код, который я использовал для тестов
RSA *rsa;
rsa = RSA_generate_key(2048, 65535, NULL, NULL);
if (RSA_check_key(rsa) != 1)
{
printf("error");
}
const BIGNUM *rsa_n = BN_new(), // modulul
*rsa_e = BN_new(), // exponentul public
*rsa_d = BN_new(); // exponentul privat
RSA_get0_key(rsa, &rsa_n, &rsa_e, &rsa_d);
//TEST 1
unsigned char* rsa_n_char = (unsigned char*)malloc(BN_num_bytes(rsa_n));
BN_bn2bin(rsa_n, rsa_n_char);
BIGNUM *rsa_n2=BN_new();
BN_bin2bn(rsa_n_char, strlen((char*)rsa_n_char) + 1, rsa_n2);
printf("%d\n", BN_cmp(rsa_n2, rsa_n)); // output -1 -> not equal
//TEST 2
unsigned char*test1_char = (unsigned char*)malloc(6);
test1_char = (unsigned char*)"apple";
BIGNUM *test1 = BN_new(), *test2 = BN_new();
BN_bin2bn(test1_char, strlen((char*)test1_char)+1, test1);
unsigned char*test2_char = (unsigned char*)malloc(BN_num_bytes(test1));
BN_bn2bin(test1, test2_char);
BN_bin2bn(test2_char, strlen((char*)test2_char)+1, test2);
printf("%d\n", BN_cmp(test1, test2)); // output 0 -> equal