]> www.wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_ameth.c
Fix compilation with Microsoft Visual C.
[openssl-gost/engine.git] / gost_ameth.c
index df595207fadc43d5f7e5a53aa7ac7bb639383a34..199aef271207bc2eb55ad8d6b4a54ab8e62fce48 100644 (file)
@@ -67,11 +67,18 @@ static ASN1_STRING *encode_gost_algor_params(const EVP_PKEY *key)
     switch (EVP_PKEY_base_id(key)) {
     case NID_id_GostR3410_2012_256:
         pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(key_ptr));
-        gkp->hash_params = OBJ_nid2obj(NID_id_GostR3411_2012_256);
+       switch (pkey_param_nid) {
+           case NID_id_GostR3410_2001_TestParamSet:
+           case NID_id_GostR3410_2001_CryptoPro_A_ParamSet:
+           case NID_id_GostR3410_2001_CryptoPro_B_ParamSet:
+           case NID_id_GostR3410_2001_CryptoPro_C_ParamSet:
+           case NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet:
+           case NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet:
+               gkp->hash_params = OBJ_nid2obj(NID_id_GostR3411_2012_256);
+       }
         break;
     case NID_id_GostR3410_2012_512:
         pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(key_ptr));
-        gkp->hash_params = OBJ_nid2obj(NID_id_GostR3411_2012_512);
         break;
     case NID_id_GostR3410_2001:
         pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(key_ptr));
@@ -713,10 +720,11 @@ static int pub_encode_gost_ec(X509_PUBKEY *pub, const EVP_PKEY *pk)
     BIGNUM *X = NULL, *Y = NULL, *order = NULL;
     const EC_KEY *ec = EVP_PKEY_get0((EVP_PKEY *)pk);
     int ptype = V_ASN1_UNDEF;
+    ASN1_STRING *params;
 
     algobj = OBJ_nid2obj(EVP_PKEY_base_id(pk));
 
-    ASN1_STRING *params = encode_gost_algor_params(pk);
+    params = encode_gost_algor_params(pk);
     pval = params;
     ptype = V_ASN1_SEQUENCE;
 
@@ -766,8 +774,8 @@ static int pub_encode_gost_ec(X509_PUBKEY *pub, const EVP_PKEY *pk)
     }
 
     ret = i2d_ASN1_OCTET_STRING(octet, &buf);
-    ASN1_BIT_STRING_free(octet);
  err:
+    ASN1_BIT_STRING_free(octet);
     if (X)
         BN_free(X);
     if (Y)