forked from wolfSSL/wolfssl
Review changes
This commit is contained in:
@@ -13728,3 +13728,27 @@ WOLFSSL_API int wolfSSL_CTX_set_ephemeral_key(WOLFSSL_CTX* ctx, int keyAlgo, con
|
|||||||
\param format WOLFSSL_FILETYPE_ASN1 or WOLFSSL_FILETYPE_PEM
|
\param format WOLFSSL_FILETYPE_ASN1 or WOLFSSL_FILETYPE_PEM
|
||||||
*/
|
*/
|
||||||
WOLFSSL_API int wolfSSL_set_ephemeral_key(WOLFSSL* ssl, int keyAlgo, const char* key, unsigned int keySz, int format);
|
WOLFSSL_API int wolfSSL_set_ephemeral_key(WOLFSSL* ssl, int keyAlgo, const char* key, unsigned int keySz, int format);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\ingroup SSL
|
||||||
|
\brief Sign a message with the chosen message digest, padding, and RSA key
|
||||||
|
\return WOLFSSL_SUCCESS on success and WOLFSSL_FAILURE on error
|
||||||
|
\param type Hash NID
|
||||||
|
\param m Message to sign. Most likely this will be the digest of
|
||||||
|
the message to sign
|
||||||
|
\param mLen Length of message to sign
|
||||||
|
\param sigRet Output buffer
|
||||||
|
\param sigLen On Input: length of sigRet buffer
|
||||||
|
On Output: length of data written to sigRet
|
||||||
|
\param rsa RSA key used to sign the input
|
||||||
|
\param flag 1: Output the signature
|
||||||
|
0: Output the value that the unpadded signature should be
|
||||||
|
compared to. Note: for RSA_PKCS1_PSS_PADDING the
|
||||||
|
wc_RsaPSS_CheckPadding_ex function should be used to check
|
||||||
|
the output of a *Verify* function.
|
||||||
|
\param padding Padding to use. Only RSA_PKCS1_PSS_PADDING and
|
||||||
|
RSA_PKCS1_PADDING are currently supported for signing.
|
||||||
|
*/
|
||||||
|
WOLFSSL_API int wolfSSL_RSA_sign_generic_padding(int type, const unsigned char* m,
|
||||||
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
|
unsigned int* sigLen, WOLFSSL_RSA*, int, int);
|
||||||
|
107
src/ssl.c
107
src/ssl.c
@@ -30849,8 +30849,15 @@ int wolfSSL_RSA_sign(int type, const unsigned char* m,
|
|||||||
unsigned int mLen, unsigned char* sigRet,
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
unsigned int* sigLen, WOLFSSL_RSA* rsa)
|
unsigned int* sigLen, WOLFSSL_RSA* rsa)
|
||||||
{
|
{
|
||||||
return wolfSSL_RSA_sign_ex(type, m, mLen, sigRet, sigLen, rsa, 1,
|
return wolfSSL_RSA_sign_ex(type, m, mLen, sigRet, sigLen, rsa, 1);
|
||||||
RSA_PKCS1_PADDING);
|
}
|
||||||
|
|
||||||
|
int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
||||||
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
|
unsigned int* sigLen, WOLFSSL_RSA* rsa, int flag)
|
||||||
|
{
|
||||||
|
return wolfSSL_RSA_sign_generic_padding(type, m, mLen, sigRet, sigLen,
|
||||||
|
rsa, flag, RSA_PKCS1_PADDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30872,7 +30879,7 @@ int wolfSSL_RSA_sign(int type, const unsigned char* m,
|
|||||||
* RSA_PKCS1_PADDING are currently supported for signing.
|
* RSA_PKCS1_PADDING are currently supported for signing.
|
||||||
* @return WOLFSSL_SUCCESS on success and WOLFSSL_FAILURE on error
|
* @return WOLFSSL_SUCCESS on success and WOLFSSL_FAILURE on error
|
||||||
*/
|
*/
|
||||||
int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
int wolfSSL_RSA_sign_generic_padding(int type, const unsigned char* m,
|
||||||
unsigned int mLen, unsigned char* sigRet,
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
unsigned int* sigLen, WOLFSSL_RSA* rsa, int flag,
|
unsigned int* sigLen, WOLFSSL_RSA* rsa, int flag,
|
||||||
int padding)
|
int padding)
|
||||||
@@ -30890,21 +30897,20 @@ int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
|||||||
byte encodedSig[MAX_ENCODED_SIG_SZ];
|
byte encodedSig[MAX_ENCODED_SIG_SZ];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_RSA_sign");
|
WOLFSSL_ENTER("wolfSSL_RSA_sign_generic_padding");
|
||||||
|
|
||||||
if (m == NULL || sigRet == NULL || sigLen == NULL || rsa == NULL) {
|
if (m == NULL || sigRet == NULL || sigLen == NULL || rsa == NULL) {
|
||||||
WOLFSSL_MSG("Bad function arguments");
|
WOLFSSL_MSG("Bad function arguments");
|
||||||
return 0;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
DEBUG_SIGN_msg("Message to Sign", m, mLen);
|
DEBUG_SIGN_msg("Message to Sign", m, mLen);
|
||||||
|
|
||||||
if (rsa->inSet == 0)
|
if (rsa->inSet == 0) {
|
||||||
{
|
|
||||||
WOLFSSL_MSG("No RSA internal set, do it");
|
WOLFSSL_MSG("No RSA internal set, do it");
|
||||||
|
|
||||||
if (SetRsaInternal(rsa) != WOLFSSL_SUCCESS) {
|
if (SetRsaInternal(rsa) != WOLFSSL_SUCCESS) {
|
||||||
WOLFSSL_MSG("SetRsaInternal failed");
|
WOLFSSL_MSG("SetRsaInternal failed");
|
||||||
return 0;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30915,18 +30921,19 @@ int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
|||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_RNG);
|
tmpRNG = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_RNG);
|
||||||
if (tmpRNG == NULL)
|
if (tmpRNG == NULL)
|
||||||
return 0;
|
return WOLFSSL_FAILURE;
|
||||||
|
|
||||||
encodedSig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, NULL,
|
encodedSig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, NULL,
|
||||||
DYNAMIC_TYPE_SIGNATURE);
|
DYNAMIC_TYPE_SIGNATURE);
|
||||||
if (encodedSig == NULL) {
|
if (encodedSig == NULL) {
|
||||||
XFREE(tmpRNG, NULL, DYNAMIC_TYPE_RNG);
|
XFREE(tmpRNG, NULL, DYNAMIC_TYPE_RNG);
|
||||||
return 0;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (outLen == 0)
|
if (outLen == 0) {
|
||||||
WOLFSSL_MSG("Bad RSA size");
|
WOLFSSL_MSG("Bad RSA size");
|
||||||
|
}
|
||||||
else if (wc_InitRng(tmpRNG) == 0) {
|
else if (wc_InitRng(tmpRNG) == 0) {
|
||||||
rng = tmpRNG;
|
rng = tmpRNG;
|
||||||
initTmpRng = 1;
|
initTmpRng = 1;
|
||||||
@@ -30958,7 +30965,7 @@ int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
|||||||
"OpenSSL uses max length by default.");
|
"OpenSSL uses max length by default.");
|
||||||
#endif
|
#endif
|
||||||
ret = wc_RsaPSS_Sign_ex(m, mLen, sigRet, outLen,
|
ret = wc_RsaPSS_Sign_ex(m, mLen, sigRet, outLen,
|
||||||
hType, hash2mgf(hType),
|
hType, wc_hash2mgf(hType),
|
||||||
#ifndef WOLFSSL_PSS_SALT_LEN_DISCOVER
|
#ifndef WOLFSSL_PSS_SALT_LEN_DISCOVER
|
||||||
RSA_PSS_SALT_LEN_DEFAULT,
|
RSA_PSS_SALT_LEN_DEFAULT,
|
||||||
#else
|
#else
|
||||||
@@ -31030,10 +31037,14 @@ int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
|||||||
XFREE(encodedSig, NULL, DYNAMIC_TYPE_SIGNATURE);
|
XFREE(encodedSig, NULL, DYNAMIC_TYPE_SIGNATURE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ret == WOLFSSL_SUCCESS)
|
if (ret == WOLFSSL_SUCCESS) {
|
||||||
WOLFSSL_MSG("wolfSSL_RSA_sign success");
|
WOLFSSL_MSG("wolfSSL_RSA_sign_generic_padding success");
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
WOLFSSL_MSG("wolfSSL_RSA_sign failed");
|
WOLFSSL_LEAVE("wolfSSL_RSA_sign_generic_padding", ret);
|
||||||
|
WOLFSSL_MSG("wolfSSL_RSA_sign_generic_padding failed. "
|
||||||
|
"Returning WOLFSSL_FAILURE.");
|
||||||
|
ret = WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -31078,8 +31089,8 @@ int wolfSSL_RSA_verify_ex(int type, const unsigned char* m,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
/* get non-encrypted signature to be compared with decrypted signature */
|
/* get non-encrypted signature to be compared with decrypted signature */
|
||||||
if (wolfSSL_RSA_sign_ex(type, m, mLen, sigRet, &len, rsa, 0, padding)
|
if (wolfSSL_RSA_sign_generic_padding(type, m, mLen, sigRet, &len, rsa,
|
||||||
<= 0) {
|
0, padding) <= 0) {
|
||||||
WOLFSSL_MSG("Message Digest Error");
|
WOLFSSL_MSG("Message Digest Error");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@@ -31091,7 +31102,7 @@ int wolfSSL_RSA_verify_ex(int type, const unsigned char* m,
|
|||||||
/* decrypt signature */
|
/* decrypt signature */
|
||||||
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
#if !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST)
|
||||||
hType = wc_OidGetHash(hSum);
|
hType = wc_OidGetHash(hSum);
|
||||||
if ((verLen = wc_RsaSSL_Verify_ex(sig, sigLen, (unsigned char *)sigDec,
|
if ((verLen = wc_RsaSSL_Verify_ex2(sig, sigLen, (unsigned char *)sigDec,
|
||||||
sigLen, (RsaKey*)rsa->internal, padding, hType)) <= 0) {
|
sigLen, (RsaKey*)rsa->internal, padding, hType)) <= 0) {
|
||||||
WOLFSSL_MSG("RSA Decrypt error");
|
WOLFSSL_MSG("RSA Decrypt error");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@@ -31111,18 +31122,18 @@ int wolfSSL_RSA_verify_ex(int type, const unsigned char* m,
|
|||||||
RSA_PSS_SALT_LEN_DISCOVER,
|
RSA_PSS_SALT_LEN_DISCOVER,
|
||||||
#endif
|
#endif
|
||||||
mp_count_bits(&((RsaKey*)rsa->internal)->n)) != 0) {
|
mp_count_bits(&((RsaKey*)rsa->internal)->n)) != 0) {
|
||||||
WOLFSSL_MSG("wolfSSL_RSA_verify failed");
|
WOLFSSL_MSG("wc_RsaPSS_CheckPadding_ex error");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) */
|
#endif /* !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) */
|
||||||
if ((int)len != verLen || XMEMCMP(sigRet, sigDec, verLen) != 0) {
|
if ((int)len != verLen || XMEMCMP(sigRet, sigDec, verLen) != 0) {
|
||||||
WOLFSSL_MSG("wolfSSL_RSA_verify failed");
|
WOLFSSL_MSG("wolfSSL_RSA_verify_ex failed");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
WOLFSSL_MSG("wolfSSL_RSA_verify success");
|
WOLFSSL_MSG("wolfSSL_RSA_verify_ex success");
|
||||||
ret = WOLFSSL_SUCCESS;
|
ret = WOLFSSL_SUCCESS;
|
||||||
cleanup:
|
cleanup:
|
||||||
if (sigRet)
|
if (sigRet)
|
||||||
@@ -36290,49 +36301,6 @@ int wolfSSL_RSA_LoadDer_ex(WOLFSSL_RSA* rsa, const unsigned char* derBuf,
|
|||||||
#if defined(WC_RSA_PSS) && (defined(OPENSSL_ALL) || defined(WOLFSSL_ASIO) || \
|
#if defined(WC_RSA_PSS) && (defined(OPENSSL_ALL) || defined(WOLFSSL_ASIO) || \
|
||||||
defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX))
|
defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX))
|
||||||
#if !defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION>2))
|
#if !defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION>2))
|
||||||
static int hash2mgf(enum wc_HashType hType)
|
|
||||||
{
|
|
||||||
switch (hType) {
|
|
||||||
#ifndef NO_SHA
|
|
||||||
case WC_HASH_TYPE_SHA:
|
|
||||||
return WC_MGF1SHA1;
|
|
||||||
#endif
|
|
||||||
#ifndef NO_SHA256
|
|
||||||
case WC_HASH_TYPE_SHA224:
|
|
||||||
#ifdef WOLFSSL_SHA224
|
|
||||||
return WC_MGF1SHA224;
|
|
||||||
#else
|
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
|
||||||
return WC_MGF1NONE;
|
|
||||||
#endif
|
|
||||||
case WC_HASH_TYPE_SHA256:
|
|
||||||
return WC_MGF1SHA256;
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA384
|
|
||||||
case WC_HASH_TYPE_SHA384:
|
|
||||||
return WC_MGF1SHA384;
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_SHA512
|
|
||||||
case WC_HASH_TYPE_SHA512:
|
|
||||||
return WC_MGF1SHA512;
|
|
||||||
#endif
|
|
||||||
case WC_HASH_TYPE_NONE:
|
|
||||||
case WC_HASH_TYPE_MD2:
|
|
||||||
case WC_HASH_TYPE_MD4:
|
|
||||||
case WC_HASH_TYPE_MD5:
|
|
||||||
case WC_HASH_TYPE_MD5_SHA:
|
|
||||||
case WC_HASH_TYPE_SHA3_224:
|
|
||||||
case WC_HASH_TYPE_SHA3_256:
|
|
||||||
case WC_HASH_TYPE_SHA3_384:
|
|
||||||
case WC_HASH_TYPE_SHA3_512:
|
|
||||||
case WC_HASH_TYPE_BLAKE2B:
|
|
||||||
case WC_HASH_TYPE_BLAKE2S:
|
|
||||||
default:
|
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
|
||||||
return WC_MGF1NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* +-----------+
|
* +-----------+
|
||||||
* | M |
|
* | M |
|
||||||
@@ -36398,8 +36366,8 @@ int wolfSSL_RSA_padding_add_PKCS1_PSS(WOLFSSL_RSA *rsa, unsigned char *EM,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mgf = hash2mgf(hashType)) == WC_MGF1NONE) {
|
if ((mgf = wc_hash2mgf(hashType)) == WC_MGF1NONE) {
|
||||||
WOLFSSL_MSG("hash2mgf error");
|
WOLFSSL_MSG("wc_hash2mgf error");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36505,8 +36473,8 @@ int wolfSSL_RSA_verify_PKCS1_PSS(WOLFSSL_RSA *rsa, const unsigned char *mHash,
|
|||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mgf = hash2mgf(hashType)) == WC_MGF1NONE) {
|
if ((mgf = wc_hash2mgf(hashType)) == WC_MGF1NONE) {
|
||||||
WOLFSSL_MSG("hash2mgf error");
|
WOLFSSL_MSG("wc_hash2mgf error");
|
||||||
return WOLFSSL_FAILURE;
|
return WOLFSSL_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45983,8 +45951,7 @@ int wolfSSL_RSA_public_decrypt(int flen, const unsigned char* from,
|
|||||||
|
|
||||||
/* size of 'to' buffer must be size of RSA key */
|
/* size of 'to' buffer must be size of RSA key */
|
||||||
tlen = wc_RsaSSL_Verify_ex(from, flen, to, wolfSSL_RSA_size(rsa),
|
tlen = wc_RsaSSL_Verify_ex(from, flen, to, wolfSSL_RSA_size(rsa),
|
||||||
(RsaKey*)rsa->internal, pad_type,
|
(RsaKey*)rsa->internal, pad_type);
|
||||||
WC_HASH_TYPE_NONE);
|
|
||||||
if (tlen <= 0)
|
if (tlen <= 0)
|
||||||
WOLFSSL_MSG("wolfSSL_RSA_public_decrypt failed");
|
WOLFSSL_MSG("wolfSSL_RSA_public_decrypt failed");
|
||||||
else {
|
else {
|
||||||
|
@@ -2519,8 +2519,8 @@ int wolfSSL_EVP_DigestSignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sig,
|
|||||||
int nid = wolfSSL_EVP_MD_type(wolfSSL_EVP_MD_CTX_md(ctx));
|
int nid = wolfSSL_EVP_MD_type(wolfSSL_EVP_MD_CTX_md(ctx));
|
||||||
if (nid < 0)
|
if (nid < 0)
|
||||||
break;
|
break;
|
||||||
ret = wolfSSL_RSA_sign_ex(nid, digest, hashLen, sig, &sigSz,
|
ret = wolfSSL_RSA_sign_generic_padding(nid, digest, hashLen,
|
||||||
ctx->pctx->pkey->rsa, 1, ctx->pctx->padding);
|
sig, &sigSz, ctx->pctx->pkey->rsa, 1, ctx->pctx->padding);
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
*siglen = sigSz;
|
*siglen = sigSz;
|
||||||
break;
|
break;
|
||||||
|
@@ -1748,43 +1748,38 @@ int wc_RsaUnPad_ex(byte* pkcsBlock, word32 pkcsBlockLen, byte** out,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hash2mgf(enum wc_HashType hType)
|
int wc_hash2mgf(enum wc_HashType hType)
|
||||||
{
|
{
|
||||||
switch (hType) {
|
switch (hType) {
|
||||||
case WC_HASH_TYPE_SHA:
|
case WC_HASH_TYPE_SHA:
|
||||||
#ifndef NO_SHA
|
#ifndef NO_SHA
|
||||||
return WC_MGF1SHA1;
|
return WC_MGF1SHA1;
|
||||||
#else
|
#else
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
break;
|
||||||
return WC_MGF1NONE;
|
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA224:
|
case WC_HASH_TYPE_SHA224:
|
||||||
#ifdef WOLFSSL_SHA224
|
#ifdef WOLFSSL_SHA224
|
||||||
return WC_MGF1SHA224;
|
return WC_MGF1SHA224;
|
||||||
#else
|
#else
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
break;
|
||||||
return WC_MGF1NONE;
|
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA256:
|
case WC_HASH_TYPE_SHA256:
|
||||||
#ifndef NO_SHA256
|
#ifndef NO_SHA256
|
||||||
return WC_MGF1SHA256;
|
return WC_MGF1SHA256;
|
||||||
#else
|
#else
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
break;
|
||||||
return WC_MGF1NONE;
|
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA384:
|
case WC_HASH_TYPE_SHA384:
|
||||||
#ifdef WOLFSSL_SHA384
|
#ifdef WOLFSSL_SHA384
|
||||||
return WC_MGF1SHA384;
|
return WC_MGF1SHA384;
|
||||||
#else
|
#else
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
break;
|
||||||
return WC_MGF1NONE;
|
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_SHA512:
|
case WC_HASH_TYPE_SHA512:
|
||||||
#ifdef WOLFSSL_SHA512
|
#ifdef WOLFSSL_SHA512
|
||||||
return WC_MGF1SHA512;
|
return WC_MGF1SHA512;
|
||||||
#else
|
#else
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
break;
|
||||||
return WC_MGF1NONE;
|
|
||||||
#endif
|
#endif
|
||||||
case WC_HASH_TYPE_NONE:
|
case WC_HASH_TYPE_NONE:
|
||||||
case WC_HASH_TYPE_MD2:
|
case WC_HASH_TYPE_MD2:
|
||||||
@@ -1798,9 +1793,10 @@ int hash2mgf(enum wc_HashType hType)
|
|||||||
case WC_HASH_TYPE_BLAKE2B:
|
case WC_HASH_TYPE_BLAKE2B:
|
||||||
case WC_HASH_TYPE_BLAKE2S:
|
case WC_HASH_TYPE_BLAKE2S:
|
||||||
default:
|
default:
|
||||||
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
break;
|
||||||
return WC_MGF1NONE;
|
|
||||||
}
|
}
|
||||||
|
WOLFSSL_MSG("Unrecognized or unsupported hash function");
|
||||||
|
return WC_MGF1NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WC_RSA_NONBLOCK
|
#ifdef WC_RSA_NONBLOCK
|
||||||
@@ -3263,11 +3259,17 @@ int wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out, RsaKey* key)
|
|||||||
int wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out, word32 outLen,
|
int wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out, word32 outLen,
|
||||||
RsaKey* key)
|
RsaKey* key)
|
||||||
{
|
{
|
||||||
return wc_RsaSSL_Verify_ex(in, inLen, out, outLen, key , WC_RSA_PKCSV15_PAD,
|
return wc_RsaSSL_Verify_ex(in, inLen, out, outLen, key, WC_RSA_PKCSV15_PAD);
|
||||||
WC_HASH_TYPE_NONE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out, word32 outLen,
|
int wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out, word32 outLen,
|
||||||
|
RsaKey* key, int pad_type)
|
||||||
|
{
|
||||||
|
return wc_RsaSSL_Verify_ex2(in, inLen, out, outLen, key, pad_type,
|
||||||
|
WC_HASH_TYPE_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
int wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out, word32 outLen,
|
||||||
RsaKey* key, int pad_type, enum wc_HashType hash)
|
RsaKey* key, int pad_type, enum wc_HashType hash)
|
||||||
{
|
{
|
||||||
WC_RNG* rng;
|
WC_RNG* rng;
|
||||||
@@ -3285,11 +3287,11 @@ int wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out, word32 outLen,
|
|||||||
#ifndef WOLFSSL_PSS_SALT_LEN_DISCOVER
|
#ifndef WOLFSSL_PSS_SALT_LEN_DISCOVER
|
||||||
return RsaPrivateDecryptEx((byte*)in, inLen, out, outLen, NULL, key,
|
return RsaPrivateDecryptEx((byte*)in, inLen, out, outLen, NULL, key,
|
||||||
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type,
|
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type,
|
||||||
hash, hash2mgf(hash), NULL, 0, RSA_PSS_SALT_LEN_DEFAULT, rng);
|
hash, wc_hash2mgf(hash), NULL, 0, RSA_PSS_SALT_LEN_DEFAULT, rng);
|
||||||
#else
|
#else
|
||||||
return RsaPrivateDecryptEx((byte*)in, inLen, out, outLen, NULL, key,
|
return RsaPrivateDecryptEx((byte*)in, inLen, out, outLen, NULL, key,
|
||||||
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type,
|
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type,
|
||||||
hash, hash2mgf(hash), NULL, 0, RSA_PSS_SALT_LEN_DISCOVER, rng);
|
hash, wc_hash2mgf(hash), NULL, 0, RSA_PSS_SALT_LEN_DISCOVER, rng);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -115,6 +115,9 @@ WOLFSSL_API int wolfSSL_RSA_sign(int type, const unsigned char* m,
|
|||||||
unsigned int mLen, unsigned char* sigRet,
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
unsigned int* sigLen, WOLFSSL_RSA*);
|
unsigned int* sigLen, WOLFSSL_RSA*);
|
||||||
WOLFSSL_API int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
WOLFSSL_API int wolfSSL_RSA_sign_ex(int type, const unsigned char* m,
|
||||||
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
|
unsigned int* sigLen, WOLFSSL_RSA*, int);
|
||||||
|
WOLFSSL_API int wolfSSL_RSA_sign_generic_padding(int type, const unsigned char* m,
|
||||||
unsigned int mLen, unsigned char* sigRet,
|
unsigned int mLen, unsigned char* sigRet,
|
||||||
unsigned int* sigLen, WOLFSSL_RSA*, int, int);
|
unsigned int* sigLen, WOLFSSL_RSA*, int, int);
|
||||||
WOLFSSL_API int wolfSSL_RSA_verify(int type, const unsigned char* m,
|
WOLFSSL_API int wolfSSL_RSA_verify(int type, const unsigned char* m,
|
||||||
|
@@ -245,6 +245,8 @@ WOLFSSL_API int wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out,
|
|||||||
WOLFSSL_API int wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out,
|
WOLFSSL_API int wc_RsaSSL_Verify(const byte* in, word32 inLen, byte* out,
|
||||||
word32 outLen, RsaKey* key);
|
word32 outLen, RsaKey* key);
|
||||||
WOLFSSL_API int wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out,
|
WOLFSSL_API int wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out,
|
||||||
|
word32 outLen, RsaKey* key, int pad_type);
|
||||||
|
WOLFSSL_API int wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out,
|
||||||
word32 outLen, RsaKey* key, int pad_type,
|
word32 outLen, RsaKey* key, int pad_type,
|
||||||
enum wc_HashType hash);
|
enum wc_HashType hash);
|
||||||
WOLFSSL_API int wc_RsaPSS_VerifyInline(byte* in, word32 inLen, byte** out,
|
WOLFSSL_API int wc_RsaPSS_VerifyInline(byte* in, word32 inLen, byte** out,
|
||||||
@@ -368,7 +370,7 @@ WOLFSSL_LOCAL int wc_RsaUnPad_ex(byte* pkcsBlock, word32 pkcsBlockLen, byte** ou
|
|||||||
int mgf, byte* optLabel, word32 labelLen, int saltLen,
|
int mgf, byte* optLabel, word32 labelLen, int saltLen,
|
||||||
int bits, void* heap);
|
int bits, void* heap);
|
||||||
|
|
||||||
WOLFSSL_LOCAL int hash2mgf(enum wc_HashType hType);
|
WOLFSSL_LOCAL int wc_hash2mgf(enum wc_HashType hType);
|
||||||
|
|
||||||
#endif /* HAVE_USER_RSA */
|
#endif /* HAVE_USER_RSA */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user