mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-07 21:53:41 +08:00
Fix bugs of evp/sm2
This commit is contained in:
@@ -86,10 +86,23 @@ int EVP_PKEY_decrypt_old(unsigned char *key, const unsigned char *ek, int ekl,
|
|||||||
#ifndef OPENSSL_NO_SM2
|
#ifndef OPENSSL_NO_SM2
|
||||||
siz = ekl;
|
siz = ekl;
|
||||||
if (!(ctx = EVP_PKEY_CTX_new(priv, NULL))
|
if (!(ctx = EVP_PKEY_CTX_new(priv, NULL))
|
||||||
|| !EVP_PKEY_decrypt_init(ctx)
|
|| !EVP_PKEY_decrypt_init(ctx)) {
|
||||||
|| !EVP_PKEY_CTX_set_ec_scheme(ctx, NID_sm_scheme)
|
EVPerr(EVP_F_EVP_PKEY_DECRYPT_OLD, ERR_R_EVP_LIB);
|
||||||
|| !EVP_PKEY_CTX_set_ec_encrypt_param(ctx, NID_sm3)
|
goto end;
|
||||||
|| !EVP_PKEY_decrypt(ctx, key, &siz, ek, ekl)) {
|
}
|
||||||
|
|
||||||
|
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);
|
EVPerr(EVP_F_EVP_PKEY_DECRYPT_OLD, ERR_R_EVP_LIB);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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`
|
/* hope the caller has prepared enough buffer for `out`
|
||||||
* because this function has no idea of the out length */
|
* because this function has no idea of the out length */
|
||||||
if (!(ctx = EVP_PKEY_CTX_new(pkey, NULL))
|
if (!(ctx = EVP_PKEY_CTX_new(pkey, NULL))
|
||||||
|| !EVP_PKEY_encrypt_init(ctx)
|
|| !EVP_PKEY_encrypt_init(ctx)) {
|
||||||
|| !EVP_PKEY_CTX_set_ec_scheme(ctx, NID_sm_scheme)
|
EVPerr(EVP_F_EVP_PKEY_ENCRYPT_OLD, ERR_R_EVP_LIB);
|
||||||
|| !EVP_PKEY_CTX_set_ec_encrypt_param(ctx, NID_sm3)
|
goto end;
|
||||||
|| !EVP_PKEY_encrypt(ctx, NULL, &size, in, inlen)
|
}
|
||||||
|
|
||||||
|
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)) {
|
|| !EVP_PKEY_encrypt(ctx, out, &size, in, inlen)) {
|
||||||
EVPerr(EVP_F_EVP_PKEY_ENCRYPT_OLD, ERR_R_EVP_LIB);
|
EVPerr(EVP_F_EVP_PKEY_ENCRYPT_OLD, ERR_R_EVP_LIB);
|
||||||
goto end;
|
goto end;
|
||||||
@@ -105,4 +118,3 @@ end:
|
|||||||
EVP_PKEY_CTX_free(ctx);
|
EVP_PKEY_CTX_free(ctx);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,18 +55,15 @@ int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
|
|||||||
if (EVP_PKEY_CTX_set_signature_md(pkctx, EVP_MD_CTX_md(ctx)) <= 0)
|
if (EVP_PKEY_CTX_set_signature_md(pkctx, EVP_MD_CTX_md(ctx)) <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
#ifndef OPENSSL_NO_SM2
|
#ifndef OPENSSL_NO_SM2
|
||||||
if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) {
|
if (EVP_PKEY_id(pkey) == EVP_PKEY_EC && EC_GROUP_get_curve_name(
|
||||||
if (EC_GROUP_get_curve_name(EC_KEY_get0_group(
|
EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) {
|
||||||
EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) {
|
|
||||||
# ifdef SM2_DEBUG
|
# ifdef SM2_DEBUG
|
||||||
fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n",
|
fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", __FUNCTION__);
|
||||||
__FUNCTION__);
|
|
||||||
# endif
|
# endif
|
||||||
if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) {
|
if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) {
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
if (EVP_PKEY_sign(pkctx, sigret, &sltmp, m, m_len) <= 0)
|
if (EVP_PKEY_sign(pkctx, sigret, &sltmp, m, m_len) <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|||||||
@@ -52,18 +52,15 @@ 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)
|
if (EVP_PKEY_CTX_set_signature_md(pkctx, EVP_MD_CTX_md(ctx)) <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
#ifndef OPENSSL_NO_SM2
|
#ifndef OPENSSL_NO_SM2
|
||||||
if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) {
|
if (EVP_PKEY_id(pkey) == EVP_PKEY_EC && EC_GROUP_get_curve_name(
|
||||||
if (EC_GROUP_get_curve_name(EC_KEY_get0_group(
|
EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) {
|
||||||
EVP_PKEY_get0_EC_KEY(pkey))) == NID_sm2p256v1) {
|
|
||||||
# ifdef SM2_DEBUG
|
# ifdef SM2_DEBUG
|
||||||
fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n",
|
fprintf(stderr, "[SM2_DEBUG] %s->EVP_PKEY_CTX_set_ec_scheme\n", __FUNCTION__);
|
||||||
__FUNCTION__);
|
|
||||||
# endif
|
# endif
|
||||||
if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) {
|
if (EVP_PKEY_CTX_set_ec_scheme(pkctx, NID_sm_scheme) <= 0) {
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
i = EVP_PKEY_verify(pkctx, sigbuf, siglen, m, m_len);
|
i = EVP_PKEY_verify(pkctx, sigbuf, siglen, m, m_len);
|
||||||
err:
|
err:
|
||||||
|
|||||||
Reference in New Issue
Block a user