]> www.wagner.pp.ru Git - openssl-gost/engine.git/commitdiff
Merge branch 'master' of https://github.com/gost-engine/engine
authorDmitry Belyavskiy <beldmit@gmail.com>
Mon, 14 Oct 2019 14:29:29 +0000 (17:29 +0300)
committerDmitry Belyavskiy <beldmit@gmail.com>
Mon, 14 Oct 2019 14:29:29 +0000 (17:29 +0300)
gost12sum.c
gost_ameth.c
gost_ctl.c
gost_ec_keyx.c
gost_params.c
gost_pmeth.c
gostsum.c
test_grasshopper.c

index 33482a490772a510c338fd5fc1f7323480796158..b44fe3bdb601da32551796e72f7486a26a77d94c 100644 (file)
@@ -209,6 +209,7 @@ int hash_file(gost_hash_ctx * ctx, char *filename, char *sum, int mode,
     }
     if (!hash_stream(ctx, fd, sum, hashsize)) {
         perror(filename);
+        close(fd);
         return 0;
     }
     close(fd);
index 199aef271207bc2eb55ad8d6b4a54ab8e62fce48..b73f9189dd0ce2bbfab343f41b0e8198058c2270 100644 (file)
@@ -348,7 +348,7 @@ static int priv_decode_gost(EVP_PKEY *pk,
     const X509_ALGOR *palg = NULL;
     const ASN1_OBJECT *palg_obj = NULL;
     ASN1_INTEGER *priv_key = NULL;
-    int expected_key_len = 32;
+    int expected_key_len;
 
     if (!PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf))
         return 0;
@@ -719,14 +719,13 @@ static int pub_encode_gost_ec(X509_PUBKEY *pub, const EVP_PKEY *pk)
     const EC_POINT *pub_key;
     BIGNUM *X = NULL, *Y = NULL, *order = NULL;
     const EC_KEY *ec = EVP_PKEY_get0((EVP_PKEY *)pk);
-    int ptype = V_ASN1_UNDEF;
+    int ptype = V_ASN1_SEQUENCE;
     ASN1_STRING *params;
 
     algobj = OBJ_nid2obj(EVP_PKEY_base_id(pk));
 
     params = encode_gost_algor_params(pk);
     pval = params;
-    ptype = V_ASN1_SEQUENCE;
 
     order = BN_new();
     if (!order) {
index 889df6d25882b488bd84acad9078a47b8ea9b59d..64b76ad66e802a5896547f53465f679622a93cf3 100644 (file)
@@ -59,7 +59,7 @@ int gost_control_func(ENGINE *e, int cmd, long i, void *p, void (*f) (void))
 const char *get_gost_engine_param(int param)
 {
     char *tmp;
-    if (param < 0 || param > GOST_PARAM_MAX)
+    if (param < 0 || param >= GOST_PARAM_MAX)
         return NULL;
     if (gost_params[param] != NULL) {
         return gost_params[param];
@@ -76,7 +76,7 @@ const char *get_gost_engine_param(int param)
 int gost_set_default_param(int param, const char *value)
 {
     const char *tmp;
-    if (param < 0 || param > GOST_PARAM_MAX)
+    if (param < 0 || param >= GOST_PARAM_MAX)
         return 0;
     tmp = getenv(gost_envnames[param]);
 
index b82c6f1859e5fe5bf249565e96282c563a9f26a3..fa068aec45c0fcacaf37bc8415d4d954481bc3f1 100644 (file)
@@ -59,8 +59,11 @@ 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;
index b73d5a9160fd72f01c20533275c037fb11876cd9..b5684b6bad465045029d2810a41383d994179246 100644 (file)
@@ -90,6 +90,26 @@ R3410_ec_params R3410_2001_paramset[] = {
 R3410_ec_params *R3410_2012_256_paramset = R3410_2001_paramset;
 
 R3410_ec_params R3410_2012_512_paramset[] = {
+    {NID_id_tc26_gost_3410_2012_512_paramSetTest,
+     /* a */
+     "7",
+     /* b */
+     "1CFF0806A31116DA29D8CFA54E57EB748BC5F377E49400FDD788B649ECA1AC43"
+     "61834013B2AD7322480A89CA58E0CF74BC9E540C2ADD6897FAD0A3084F302ADC",
+     /* p */
+     "4531ACD1FE0023C7550D267B6B2FEE80922B14B2FFB90F04D4EB7C09B5D2D15D"
+     "F1D852741AF4704A0458047E80E4546D35B8336FAC224DD81664BBF528BE6373",
+     /* q */
+     "4531ACD1FE0023C7550D267B6B2FEE80922B14B2FFB90F04D4EB7C09B5D2D15D"
+     "A82F2D7ECB1DBAC719905C5EECC423F1D86E25EDBE23C595D644AAF187E6E6DF",
+     /* x */
+     "24D19CC64572EE30F396BF6EBBFD7A6C5213B3B3D7057CC825F91093A68CD762"
+     "FD60611262CD838DC6B60AA7EEE804E28BC849977FAC33B4B530F1B120248A9A",
+     /* y */
+     "2BB312A43BD2CE6E0D020613C857ACDDCFBF061E91E5F2C3F32447C259F39B2C"
+     "83AB156D77F1496BF7EB3351E1EE4E43DC1A18B91B24640B6DBB92CB1ADD371E",
+     "1"}
+    ,
     {NID_id_tc26_gost_3410_2012_512_paramSetA,
      /* a */
      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
index 41e53b67e2da2794977868dda2b20b7f81cc83fd..b6f45436975d56783ec4f36e8fa70620d332b2f5 100644 (file)
@@ -351,6 +351,7 @@ static int pkey_gost2012_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
     case NID_id_tc26_gost_3410_2012_512_paramSetA:
     case NID_id_tc26_gost_3410_2012_512_paramSetB:
     case NID_id_tc26_gost_3410_2012_512_paramSetC:
+    case NID_id_tc26_gost_3410_2012_512_paramSetTest:
         result =
             (EVP_PKEY_assign(pkey, NID_id_GostR3410_2012_512, ec)) ? 1 : 0;
         break;
index d9860e4b61581888f799485554f13a2b66c7d334..b61215c9f08cb8ab05feb7ff9e57d653967a5c1e 100644 (file)
--- a/gostsum.c
+++ b/gostsum.c
@@ -163,6 +163,7 @@ int hash_file(gost_hash_ctx * ctx, char *filename, char *sum, int mode)
     }
     if (!hash_stream(ctx, fd, sum)) {
         perror(filename);
+        close(fd);
         return 0;
     }
     close(fd);
index 3fb8e356d40b3028572c225640ce15a0464a4747..f11f04943ba27f19fb7a15e3090204e381e17c55 100644 (file)
@@ -299,8 +299,8 @@ static int test_stream(const EVP_CIPHER *type, const char *name,
        int i;
 
        EVP_CIPHER_CTX_init(ctx);
-       EVP_CipherInit_ex(ctx, type, NULL, K, iv, 1);
-       EVP_CIPHER_CTX_set_padding(ctx, 0);
+       T(EVP_CipherInit_ex(ctx, type, NULL, K, iv, 1));
+       T(EVP_CIPHER_CTX_set_padding(ctx, 0));
        memset(c, 0xff, sizeof(c));
        if (acpkm)
            T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL));
@@ -309,11 +309,11 @@ static int test_stream(const EVP_CIPHER *type, const char *name,
                sz = size - i;
            else
                sz = z;
-           EVP_CipherUpdate(ctx, c + i, &outlen, pt + i, sz);
+           T(EVP_CipherUpdate(ctx, c + i, &outlen, pt + i, sz));
            OPENSSL_assert(outlen == sz);
        }
        outlen = i - z + sz;
-       EVP_CipherFinal_ex(ctx, c + outlen, &tmplen);
+       T(EVP_CipherFinal_ex(ctx, c + outlen, &tmplen));
        EVP_CIPHER_CTX_cleanup(ctx);
 
        test = outlen != size || memcmp(c, exp, size);