EVP_PKEY_sign 和 EVP_DigestSignInit 的区别?
Difference between EVP_PKEY_sign and EVP_DigestSignInit?
到目前为止,我已经看到两种使用 OpenSSL 进行 RSA 签名的不同方法:
随着EVP_PKEY_sign
ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */);
if (!ctx)
/* Error occurred */
if (EVP_PKEY_sign_init(ctx) <= 0)
/* Error */
if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
/* Error */
if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
/* Error */
/* Determine buffer length */
if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0)
与EVP_DigestSignInit:
if(1 != EVP_DigestSignInit(mdctx, NULL, EVP_sha256(), NULL, key))
goto err;
if(1 != EVP_DigestSignUpdate(mdctx, msg, strlen(msg)))
goto err;
if(1 != EVP_DigestSignFinal(mdctx, NULL, slen))
goto err;
if(!(*sig = OPENSSL_malloc(sizeof(unsigned char) * (*slen))))
goto err;
if(1 != EVP_DigestSignFinal(mdctx, *sig, slen))
goto err;
这只是做同一件事的两种不同方式吗?
哦。有相当大的区别。
EVP_PKEY_sign() does not hash the data to be signed, and therefore is normally used to sign digests. For signing arbitrary messages, see the EVP_DigestSignInit(3)
每https://wiki.openssl.org/index.php/Manual:EVP_PKEY_sign(3)
所以 EVP_PKEY_sign 很可能在 EVP_Digest SignInit 中使用,并且适用于调用者将手动格式化要签名的块的应用程序。
到目前为止,我已经看到两种使用 OpenSSL 进行 RSA 签名的不同方法:
随着EVP_PKEY_sign
ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */);
if (!ctx)
/* Error occurred */
if (EVP_PKEY_sign_init(ctx) <= 0)
/* Error */
if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
/* Error */
if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
/* Error */
/* Determine buffer length */
if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0)
与EVP_DigestSignInit:
if(1 != EVP_DigestSignInit(mdctx, NULL, EVP_sha256(), NULL, key))
goto err;
if(1 != EVP_DigestSignUpdate(mdctx, msg, strlen(msg)))
goto err;
if(1 != EVP_DigestSignFinal(mdctx, NULL, slen))
goto err;
if(!(*sig = OPENSSL_malloc(sizeof(unsigned char) * (*slen))))
goto err;
if(1 != EVP_DigestSignFinal(mdctx, *sig, slen))
goto err;
这只是做同一件事的两种不同方式吗?
哦。有相当大的区别。
EVP_PKEY_sign() does not hash the data to be signed, and therefore is normally used to sign digests. For signing arbitrary messages, see the EVP_DigestSignInit(3)
每https://wiki.openssl.org/index.php/Manual:EVP_PKEY_sign(3)
所以 EVP_PKEY_sign 很可能在 EVP_Digest SignInit 中使用,并且适用于调用者将手动格式化要签名的块的应用程序。