]> wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_ameth.c
Correct initializing the context
[openssl-gost/engine.git] / gost_ameth.c
index feec5544a3dfe986f279ea68d9b210aa215ffe44..8a9cd286823d6aedc4eb6206d9d88ea0b9ecced4 100644 (file)
@@ -34,22 +34,6 @@ int store_bignum(BIGNUM *bn, unsigned char *buf, int len)
     return 1;
 }
 
-/* Convert byte buffer to bignum, skipping leading zeros*/
-BIGNUM *getbnfrombuf(const unsigned char *buf, size_t len)
-{
-    BIGNUM *b;
-
-    while (*buf == 0 && len > 0) {
-        buf++;
-        len--;
-    }
-    if (len)
-        return BN_bin2bn(buf, len, NULL);
-    b = BN_new();
-    BN_zero(b);
-    return b;
-}
-
 static int pkey_bits_gost(const EVP_PKEY *pk)
 {
     if (!pk)
@@ -594,7 +578,6 @@ static int param_missing_gost_ec(const EVP_PKEY *pk)
     return 0;
 }
 
-
 static int param_copy_gost_ec(EVP_PKEY *to, const EVP_PKEY *from)
 {
     EC_KEY *eto = EVP_PKEY_get0(to);
@@ -685,8 +668,8 @@ static int pub_decode_gost_ec(EVP_PKEY *pk, X509_PUBKEY *pub)
     len = octet->length / 2;
     ASN1_OCTET_STRING_free(octet);
 
-    Y = getbnfrombuf(databuf, len);
-    X = getbnfrombuf(databuf + len, len);
+    Y = BN_bin2bn(databuf, len, NULL);
+    X = BN_bin2bn(databuf + len, len, NULL);
     OPENSSL_free(databuf);
     pub_key = EC_POINT_new(group);
     if (!EC_POINT_set_affine_coordinates_GFp(group, pub_key, X, Y, NULL)) {
@@ -772,7 +755,7 @@ 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:
+ err:
     if (X)
         BN_free(X);
     if (Y)
@@ -894,6 +877,9 @@ int register_ameth_gost(int nid, EVP_PKEY_ASN1_METHOD **ameth,
                                  pkey_size_gost, pkey_bits_gost);
 
         EVP_PKEY_asn1_set_ctrl(*ameth, pkey_ctrl_gost);
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+        EVP_PKEY_asn1_set_security_bits(*ameth, pkey_bits_gost);
+#endif
         break;
     case NID_id_GostR3410_2012_256:
     case NID_id_GostR3410_2012_512:
@@ -914,7 +900,7 @@ int register_ameth_gost(int nid, EVP_PKEY_ASN1_METHOD **ameth,
 
         EVP_PKEY_asn1_set_ctrl(*ameth, pkey_ctrl_gost);
 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
-        EVP_PKEY_asn1_set_security_bits(*ameth,ce_pkey_bits_gost);
+        EVP_PKEY_asn1_set_security_bits(*ameth, pkey_bits_gost);
 #endif
         break;
     case NID_id_Gost28147_89_MAC: