X-Git-Url: https://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_ec_keyx.c;h=860315d6e27996f2b319a3f9e2717fe7277c14fd;hb=7122f09ce78127173c6a0136a7bf9389ea91072f;hp=6762d4cc1ea092b799da89566d7a7fbd4761e5cd;hpb=486cd1d88be05434966105074afedf1b1e32314c;p=openssl-gost%2Fengine.git diff --git a/gost_ec_keyx.c b/gost_ec_keyx.c index 6762d4c..860315d 100644 --- a/gost_ec_keyx.c +++ b/gost_ec_keyx.c @@ -30,7 +30,7 @@ int VKO_compute_key(unsigned char *shared_key, const int vko_dgst_nid) { unsigned char *databuf = NULL; - BIGNUM *scalar = NULL, *X = NULL, *Y = NULL; + BIGNUM *scalar = NULL, *X = NULL, *Y = NULL, *order = NULL; const EC_GROUP *grp = NULL; EC_POINT *pnt = NULL; BN_CTX *ctx = NULL; @@ -51,9 +51,11 @@ int VKO_compute_key(unsigned char *shared_key, goto err; } + order = BN_CTX_get(ctx); grp = EC_KEY_get0_group(priv_key); scalar = BN_CTX_get(ctx); X = BN_CTX_get(ctx); + EC_GROUP_get_order(grp, order, ctx); if ((Y = BN_CTX_get(ctx)) == NULL || (pnt = EC_POINT_new(grp)) == NULL @@ -80,7 +82,7 @@ int VKO_compute_key(unsigned char *shared_key, goto err; } - half_len = BN_num_bytes(EC_GROUP_get0_field(grp)); + half_len = BN_num_bytes(order); buf_len = 2 * half_len; if ((databuf = OPENSSL_malloc(buf_len)) == NULL) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); @@ -276,7 +278,7 @@ static int pkey_GOST_ECcp_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, EVP_PKEY *pubk = EVP_PKEY_CTX_get0_pkey(pctx); struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(pctx); int pkey_nid = EVP_PKEY_base_id(pubk); - ASN1_OBJECT *crypt_params_obj = (pkey_nid == NID_id_GostR3410_2001) ? + ASN1_OBJECT *crypt_params_obj = (pkey_nid == NID_id_GostR3410_2001 || pkey_nid == NID_id_GostR3410_2001DH) ? OBJ_nid2obj(NID_id_Gost28147_89_CryptoPro_A_ParamSet) : OBJ_nid2obj(NID_id_tc26_gost_28147_param_Z); const struct gost_cipher_info *param =