Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Непонятно, как быть с "no object identifier" для инициализированной структуры EVP_CIPHER cipher в случае использования алгоритма provider #422

Open
MaximKostyshin opened this issue Nov 4, 2022 · 5 comments

Comments

@MaximKostyshin
Copy link

Использование команды:
openssl genpkey -gost89-cbc -algorithm rsa
приводит к ошибке

Error writing key
642F0000:error:0680006C:asn1 encoding routines:PKCS5_pbe2_set_iv_ex:cipher has no object identifier:..\crypto\asn1\p5_pbev2.c:55:
642F0000:error:1188000D:PKCS12 routines:PKCS8_encrypt_ex:ASN1 lib:..\crypto\pkcs12\p12_p8e.c:48:

Это связано с тем, что в передаваемой структуре EVP_CIPHER, проинициализированной для алгоритма gost89-cbc, значение nid установлено в 0 (нормально не проинициализировано). Вместе с тем видим, что в obj_mac.h необходимые данные для инициализации присутствуют:

#define SN_gost89_cbc           "gost89-cbc"
#define NID_gost89_cbc          1009

Как быть с этой ситуацией?

@MaximKostyshin MaximKostyshin changed the title Непонятно как быть с "no object identifier" для инициализированной структуры EVP_CIPHER cipher в случае использования алгоритма provider Непонятно, как быть с "no object identifier" для инициализированной структуры EVP_CIPHER cipher в случае использования алгоритма provider Nov 4, 2022
@beldmit
Copy link
Contributor

beldmit commented Nov 4, 2022

NID как раз проинициализирован. Не проинициализирован OID. Потому что ГОСТ (организация) его для этих целей не установил.

@MaximKostyshin
Copy link
Author

MaximKostyshin commented Nov 4, 2022

Ok. Предположим, что в этом дело.
Тогда как реагировать на вариант с той же ошибкой:
openssl genpkey -gost89 -provider gostprov -algorithm rsa
Имеем:

#define SN_id_Gost28147_89              "gost89"
#define LN_id_Gost28147_89              "GOST 28147-89"
#define NID_id_Gost28147_89             813
#define OBJ_id_Gost28147_89             OBJ_cryptopro,21L

@beldmit
Copy link
Contributor

beldmit commented Nov 4, 2022

Смотреть в ту таблицу, на которую она ругается. Какой-то из вариантов ГОСТа там был, насколько я помню. Если нет - добавлять.

@MaximKostyshin
Copy link
Author

MaximKostyshin commented Nov 4, 2022

Код функции предполагает, что nid в структуре EVP_CIPHER *cipher должен был иметь "правильное" значение (alg_nid = EVP_CIPHER_get_type(cipher);)

X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter,
                                 unsigned char *salt, int saltlen,
                                 unsigned char *aiv, int prf_nid,
                                 OSSL_LIB_CTX *libctx)
{
    X509_ALGOR *scheme = NULL, *ret = NULL;
    int alg_nid, keylen, ivlen;
    EVP_CIPHER_CTX *ctx = NULL;
    unsigned char iv[EVP_MAX_IV_LENGTH];
    PBE2PARAM *pbe2 = NULL;

    alg_nid = EVP_CIPHER_get_type(cipher);
    if (alg_nid == NID_undef) {
        ERR_raise(ERR_LIB_ASN1, ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER);
        goto err;
    }

a для EVP_CIPHER_get_type(cipher) имеем

int EVP_CIPHER_get_type(const EVP_CIPHER *cipher)
{
    int nid;
    nid = EVP_CIPHER_get_nid(cipher);
...

int EVP_CIPHER_get_nid(const EVP_CIPHER *cipher)
{
    return cipher->nid;
}

@beldmit
Copy link
Contributor

beldmit commented Nov 4, 2022

Да, похоже, этот сценарий не реализован, только PKCS#12

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants