Мне нужна помощь с алгоритмом Диффи Хеллмана в openssl. У меня есть простое число (p), генератор (g), закрытый ключ пользователя A и открытый ключ пользователя B. Мне нужно вычислить общий ключ. Я написал этот код, но код выполняется до этой строки
int dhSize = DH_size(dh->priv_key);
Вот полный код:
#include <stdio.h>
#include <openssl/dh.h>
const char* userA_PrivateKey = "90ff0";
const char* userB_PublicKey = "9d1a59";
const char* p = "66c2fa";
const char* g = "2";
int main(void)
{
DH *dh = DH_new();
BN_dec2bn(&dh->g, g);
BN_hex2bn(&dh->p, p);
BN_hex2bn(&dh->priv_key, userA_PrivateKey);
BIGNUM *pubKeyUserB = NULL;
BN_dec2bn(&pubKeyUserB, userB_PublicKey);
//Compute the shared secret
int secret_size;
unsigned char *secret;
printf(" Compute DH_size \n");
int dhSize = DH_size(dh->priv_key);
printf(" dhSize = %d \n"); //NOT EXECUTED
secret = OPENSSL_malloc(sizeof(unsigned char) * dhSize);
if(0 > (secret_size = DH_compute_key(secret, pubKeyUserB, dh->priv_key)))
{
printf("error \n");
}
return 0;
}
У меня две проблемы:
1) printf, выводящий dhSize, вообще не выполняется
2) Я не уверен, правильно ли я установил значения g, p, priv key? Будет ли функция DH_compute_key использовать мои g и p?
printf(" dhSize = %d \n");
не имеет аргумента для описателя формата%d
. Включите предупреждения компилятора. - person Weather Vane   schedule 08.11.2017