]> wagner.pp.ru Git - openssl-gost/engine.git/commitdiff
Updated decrypt selection logic
authorDmitry Belyavskiy <beldmit@gmail.com>
Sun, 3 May 2020 11:42:34 +0000 (14:42 +0300)
committerDmitry Belyavskiy <beldmit@gmail.com>
Mon, 4 May 2020 12:50:12 +0000 (15:50 +0300)
gost_ec_keyx.c

index de52dec2c2a703ebb4dfa50535e8b5c83cf1e154..deca4f599896bf79c61cc7fb588fe99a150ba36a 100644 (file)
@@ -642,7 +642,8 @@ static int pkey_gost2018_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key,
 int pkey_gost_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key,
                       size_t *key_len, const unsigned char *in, size_t in_len)
 {
-    struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(pctx);
+    struct gost_pmeth_data *gctx = EVP_PKEY_CTX_get_data(pctx);
+#if 0
     if (data->shared_ukm == NULL || data->shared_ukm_size == 8)
         return pkey_GOST_ECcp_decrypt(pctx, key, key_len, in, in_len);
     else if (data->shared_ukm_size == 32)
@@ -651,4 +652,18 @@ int pkey_gost_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key,
         GOSTerr(GOST_F_PKEY_GOST_DECRYPT, ERR_R_INTERNAL_ERROR);
         return -1;
     }
+#else
+       switch (gctx->cipher_nid)
+       {
+               case NID_id_Gost28147_89:
+               case NID_undef: /* FIXME */
+                       return pkey_GOST_ECcp_decrypt(pctx, key, key_len, in, in_len);
+               case NID_kuznyechik_ctr:
+               case NID_magma_ctr:
+                       return pkey_gost2018_decrypt(pctx, key, key_len, in, in_len);
+               default:
+      GOSTerr(GOST_F_PKEY_GOST_DECRYPT, ERR_R_INTERNAL_ERROR);
+      return -1;
+       }
+#endif
 }