Как вычислить общий секрет для 2 пользователей в алгоритме Диффи Хеллмана с использованием языка openssl lib c?

Мне нужна помощь с алгоритмом Диффи Хеллмана в 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?


person VFcdxcv    schedule 08.11.2017    source источник
comment
printf(" dhSize = %d \n"); не имеет аргумента для описателя формата %d. Включите предупреждения компилятора.   -  person Weather Vane    schedule 08.11.2017
comment
Я добавил, но в консоли ничего не отображается. Даже если я не использую printf, мой код не выполняется после вычисления dhSize. Это основная проблема.   -  person VFcdxcv    schedule 08.11.2017
comment
Тогда используйте отладчик, я просто упомянул одну ошибку, которую заметил. Когда вы говорите, что не выполняется, вы имеете в виду, что программа потерпела крах до этого, или строка игнорируется, а последующий код выполняется.   -  person Weather Vane    schedule 08.11.2017


Ответы (1)


Вы делаете глупые ошибки:

  1. dhSize следует вводить как DH_size (~ строка 24), а функция DH_size вычисляет размер struct DH с учетом const struct DH *, которое вы передаете dh->priv_key вместо передачи dh (~ строка 28)

  2. Аналогичная ошибка при использовании третьего аргумента DH_compute_key (~ строка 28) должна быть dh, а не dh->priv_key.

Пожалуйста, исправьте это и повторите попытку.

person Ahmed Masud    schedule 08.11.2017