]> wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - gost_ec_keyx.c
License matching the openssl one
[openssl-gost/engine.git] / gost_ec_keyx.c
index cc94d677ed37b5bb9aa5acc4284270824bed86db..fa068aec45c0fcacaf37bc8415d4d954481bc3f1 100644 (file)
 #include "gost_lcl.h"
 
 /* Implementation of CryptoPro VKO 34.10-2001/2012 algorithm */
-static int VKO_compute_key(unsigned char *shared_key,
-                           const EC_POINT *pub_key, const EC_KEY *priv_key,
-                           const unsigned char *ukm, const size_t ukm_size,
-                           const int vko_dgst_nid)
+int VKO_compute_key(unsigned char *shared_key,
+                    const EC_POINT *pub_key, const EC_KEY *priv_key,
+                    const unsigned char *ukm, const size_t ukm_size,
+                    const int vko_dgst_nid)
 {
     unsigned char *databuf = NULL;
     BIGNUM *UKM = NULL, *p = NULL, *order = NULL, *X = NULL, *Y = NULL, *cofactor = NULL;
@@ -59,8 +59,11 @@ static int VKO_compute_key(unsigned char *shared_key,
         GOSTerr(GOST_F_VKO_COMPUTE_KEY, GOST_R_ERROR_POINT_MUL);
         goto err;
     }
-    EC_POINT_get_affine_coordinates(EC_KEY_get0_group(priv_key),
-                                        pnt, X, Y, ctx);
+    if (!EC_POINT_get_affine_coordinates(EC_KEY_get0_group(priv_key),
+                                        pnt, X, Y, ctx)) {
+       GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_EC_LIB);
+       goto err;
+    }
 
     half_len = BN_num_bytes(order);
     buf_len = 2 * half_len;