diff --git a/crypto/evp/p_dec.c b/crypto/evp/p_dec.c index 81b4b7c1..22075683 100644 --- a/crypto/evp/p_dec.c +++ b/crypto/evp/p_dec.c @@ -86,10 +86,23 @@ int EVP_PKEY_decrypt_old(unsigned char *key, const unsigned char *ek, int ekl, #ifndef OPENSSL_NO_SM2 siz = ekl; if (!(ctx = EVP_PKEY_CTX_new(priv, NULL)) - || !EVP_PKEY_decrypt_init(ctx) - || !EVP_PKEY_CTX_set_ec_scheme(ctx, NID_sm_scheme) - || !EVP_PKEY_CTX_set_ec_encrypt_param(ctx, NID_sm3) - || !EVP_PKEY_decrypt(ctx, key, &siz, ek, ekl)) { + || !EVP_PKEY_decrypt_init(ctx)) { + EVPerr(EVP_F_EVP_PKEY_DECRYPT_OLD, ERR_R_EVP_LIB); + goto end; + } + + if (EVP_PKEY_id(pkey) == EVP_PKEY_EC && EC_GROUP_get_curve_name( + EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) { +# ifdef SM2_DEBUG + fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", __FUNCTION__); +# endif + if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0 + || EVP_PKEY_CTX_set_ec_encrypt_param(pkctx, NID_sm3) <= 0) { + goto end; + } + } + + if (!EVP_PKEY_decrypt(ctx, key, &siz, ek, ekl)) { EVPerr(EVP_F_EVP_PKEY_DECRYPT_OLD, ERR_R_EVP_LIB); goto end; } diff --git a/crypto/evp/p_enc.c b/crypto/evp/p_enc.c index 6dde8d03..65a6badb 100644 --- a/crypto/evp/p_enc.c +++ b/crypto/evp/p_enc.c @@ -89,10 +89,23 @@ int EVP_PKEY_encrypt_old(unsigned char *out, const unsigned char *in, /* hope the caller has prepared enough buffer for `out` * because this function has no idea of the out length */ if (!(ctx = EVP_PKEY_CTX_new(pkey, NULL)) - || !EVP_PKEY_encrypt_init(ctx) - || !EVP_PKEY_CTX_set_ec_scheme(ctx, NID_sm_scheme) - || !EVP_PKEY_CTX_set_ec_encrypt_param(ctx, NID_sm3) - || !EVP_PKEY_encrypt(ctx, NULL, &size, in, inlen) + || !EVP_PKEY_encrypt_init(ctx)) { + EVPerr(EVP_F_EVP_PKEY_ENCRYPT_OLD, ERR_R_EVP_LIB); + goto end; + } + + if (EVP_PKEY_id(pkey) == EVP_PKEY_EC && EC_GROUP_get_curve_name( + EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) { +# ifdef SM2_DEBUG + fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", __FUNCTION__); +# endif + if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0 + || EVP_PKEY_CTX_set_ec_encrypt_param(pkctx, NID_sm3) <= 0) { + goto end; + } + } + + if (!EVP_PKEY_encrypt(ctx, NULL, &size, in, inlen) || !EVP_PKEY_encrypt(ctx, out, &size, in, inlen)) { EVPerr(EVP_F_EVP_PKEY_ENCRYPT_OLD, ERR_R_EVP_LIB); goto end; @@ -105,4 +118,3 @@ end: EVP_PKEY_CTX_free(ctx); return ret; } - diff --git a/crypto/evp/p_sign.c b/crypto/evp/p_sign.c index d576ea86..b5f761fc 100644 --- a/crypto/evp/p_sign.c +++ b/crypto/evp/p_sign.c @@ -55,16 +55,13 @@ int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, if (EVP_PKEY_CTX_set_signature_md(pkctx, EVP_MD_CTX_md(ctx)) <= 0) goto err; #ifndef OPENSSL_NO_SM2 - if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) { - if (EC_GROUP_get_curve_name(EC_KEY_get0_group( - EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) { + if (EVP_PKEY_id(pkey) == EVP_PKEY_EC && EC_GROUP_get_curve_name( + EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) { # ifdef SM2_DEBUG - fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", - __FUNCTION__); + fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", __FUNCTION__); # endif - if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) { - goto err; - } + if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) { + goto err; } } #endif diff --git a/crypto/evp/p_verify.c b/crypto/evp/p_verify.c index 8eb44e43..ce33e217 100644 --- a/crypto/evp/p_verify.c +++ b/crypto/evp/p_verify.c @@ -52,16 +52,13 @@ int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, if (EVP_PKEY_CTX_set_signature_md(pkctx, EVP_MD_CTX_md(ctx)) <= 0) goto err; #ifndef OPENSSL_NO_SM2 - if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) { - if (EC_GROUP_get_curve_name(EC_KEY_get0_group( - EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) { + if (EVP_PKEY_id(pkey) == EVP_PKEY_EC && EC_GROUP_get_curve_name( + EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) { # ifdef SM2_DEBUG - fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", - __FUNCTION__); + fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", __FUNCTION__); # endif - if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) { - goto err; - } + if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) { + goto err; } } #endif