2016-02-22 2 views
1

У меня есть вопрос о ECDH в библиотеке OpenSSL.ECDH в OpenSSL

В файле «ecdhtest.c» на 159 линии, мы можем подтвердить значение секретного ключа следующим образом:

BN_print(out, a->priv_key);

Но ошибка происходит, когда я построил с помощью Makefile.

ecdsatest.c:221:22: error: incomplete definition of type 'struct ec_key_st' 
    BN_print(out, key->priv_key); 
        ~~~^ 
../include/openssl/evp.h:147:16: note: forward declaration of 'struct ec_key_st' 
     struct ec_key_st *ec; /* ECC */ 
      ^
1 error generated. 

Я думаю, что тип key->priv_key является BIGNUM.

Я хотел бы подтвердить значение закрытого ключа.

Если у вас есть идея, пожалуйста, помогите мне.

+0

переместите полное определение 'ec_key_st' в заголовочный файл, где бы он ни находился прямо сейчас, поэтому поля будут видны для всех. Не забудьте вернуть свои изменения после этого ... –

ответ

1

Определение struct ec_key_st непрозрачно по намерениям. Он определяется в ec_lcl.h из дистрибутива openssl, который не является частью открытого интерфейса. В версии 1.0.1k это выглядит так:

struct ec_key_st { 
    int version; 
    EC_GROUP *group; 
    EC_POINT *pub_key; 
    BIGNUM *priv_key; 
    unsigned int enc_flag; 
    point_conversion_form_t conv_form; 
    int  references; 
    int  flags; 
    EC_EXTRA_DATA *method_data; 
} /* EC_KEY */; 

, но он не может быть стабильным от версии к версии.

Однако, вы можете получить секретный ключ, используя функцию доступа

const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); 

, который был бы чистый способ сделать это.

+0

Спасибо, что ответили на мой вопрос. Я применил закрытый ключ, используя «EC_KEY_get0_private_key». –

Смежные вопросы