Set default digest NID

This commit is contained in:
Juliusz Sosinowicz
2020-08-31 19:17:13 +02:00
parent 2689d499b9
commit 932ef25e79
2 changed files with 44 additions and 12 deletions

View File

@ -2287,7 +2287,6 @@ const unsigned char* wolfSSL_EVP_PKEY_get0_hmac(const WOLFSSL_EVP_PKEY* pkey,
return (const unsigned char*)pkey->pkey.ptr; return (const unsigned char*)pkey->pkey.ptr;
} }
/* Initialize an EVP_DigestSign/Verify operation. /* Initialize an EVP_DigestSign/Verify operation.
* Initialize a digest for RSA and ECC keys, or HMAC for HMAC key. * Initialize a digest for RSA and ECC keys, or HMAC for HMAC key.
*/ */
@ -2297,6 +2296,19 @@ static int wolfSSL_evp_digest_pk_init(WOLFSSL_EVP_MD_CTX *ctx,
WOLFSSL_ENGINE *e, WOLFSSL_ENGINE *e,
WOLFSSL_EVP_PKEY *pkey) WOLFSSL_EVP_PKEY *pkey)
{ {
if (!type) {
int default_digest;
if (wolfSSL_EVP_PKEY_get_default_digest_nid(pkey, &default_digest)
!= WOLFSSL_SUCCESS) {
WOLFSSL_MSG("Could not get default digest");
return WOLFSSL_FAILURE;
}
type = wolfSSL_EVP_get_digestbynid(default_digest);
if (!type) {
return BAD_FUNC_ARG;
}
}
if (pkey->type == EVP_PKEY_HMAC) { if (pkey->type == EVP_PKEY_HMAC) {
int hashType; int hashType;
const unsigned char* key; const unsigned char* key;
@ -2511,7 +2523,7 @@ int wolfSSL_EVP_DigestSignInit(WOLFSSL_EVP_MD_CTX *ctx,
{ {
WOLFSSL_ENTER("EVP_DigestSignInit"); WOLFSSL_ENTER("EVP_DigestSignInit");
if (ctx == NULL || type == NULL || pkey == NULL) if (ctx == NULL || pkey == NULL)
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
return wolfSSL_evp_digest_pk_init(ctx, pctx, type, e, pkey); return wolfSSL_evp_digest_pk_init(ctx, pctx, type, e, pkey);
@ -5393,7 +5405,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
WOLFSSL_ENTER("EVP_DigestInit"); WOLFSSL_ENTER("EVP_DigestInit");
if (ctx == NULL || md == NULL) { if (ctx == NULL) {
return BAD_FUNC_ARG; return BAD_FUNC_ARG;
} }
@ -5407,7 +5419,10 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
/* Set to 0 if no match */ /* Set to 0 if no match */
ctx->macType = wolfSSL_EVP_md2macType(md); ctx->macType = wolfSSL_EVP_md2macType(md);
if (XSTRNCMP(md, "SHA256", 6) == 0) { if (md == NULL) {
XMEMSET(&ctx->hash.digest, 0, sizeof(WOLFSSL_Hasher));
}
else if (XSTRNCMP(md, "SHA256", 6) == 0) {
ret = wolfSSL_SHA256_Init(&(ctx->hash.digest.sha256)); ret = wolfSSL_SHA256_Init(&(ctx->hash.digest.sha256));
} }
#ifdef WOLFSSL_SHA224 #ifdef WOLFSSL_SHA224
@ -5673,6 +5688,10 @@ const WOLFSSL_EVP_MD* wolfSSL_EVP_get_digestbynid(int id)
#ifndef NO_SHA #ifndef NO_SHA
case NID_sha1: case NID_sha1:
return wolfSSL_EVP_sha1(); return wolfSSL_EVP_sha1();
#endif
#ifndef NO_SHA256
case NID_sha256:
return wolfSSL_EVP_sha256();
#endif #endif
default: default:
WOLFSSL_MSG("Bad digest id value"); WOLFSSL_MSG("Bad digest id value");
@ -6582,15 +6601,29 @@ int wolfSSL_EVP_PKEY_base_id(const WOLFSSL_EVP_PKEY *pkey)
int wolfSSL_EVP_PKEY_get_default_digest_nid(WOLFSSL_EVP_PKEY *pkey, int *pnid) int wolfSSL_EVP_PKEY_get_default_digest_nid(WOLFSSL_EVP_PKEY *pkey, int *pnid)
{ {
(void)pkey; WOLFSSL_ENTER("wolfSSL_EVP_PKEY_get_default_digest_nid");
#ifndef NO_SHA256
if (pnid) { if (!pkey || !pnid) {
*pnid = NID_sha256; WOLFSSL_MSG("Bad parameter");
return WOLFSSL_FAILURE;
} }
return WOLFSSL_SUCCESS;
#else switch (pkey->type) {
return -2; case EVP_PKEY_HMAC:
#ifndef NO_DSA
case EVP_PKEY_DSA:
#endif #endif
#ifndef NO_RSA
case EVP_PKEY_RSA:
#endif
#ifdef HAVE_ECC
case EVP_PKEY_EC:
#endif
*pnid = NID_sha256;
return WOLFSSL_SUCCESS;
default:
return WOLFSSL_FAILURE;
}
} }
/* increments ref count of WOLFSSL_EVP_PKEY. Return 1 on success, 0 on error */ /* increments ref count of WOLFSSL_EVP_PKEY. Return 1 on success, 0 on error */

View File

@ -925,7 +925,6 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
#define EVP_R_PRIVATE_KEY_DECODE_ERROR (-MIN_CODE_E + 100 + 4) #define EVP_R_PRIVATE_KEY_DECODE_ERROR (-MIN_CODE_E + 100 + 4)
#define EVP_PKEY_NONE NID_undef #define EVP_PKEY_NONE NID_undef
#define EVP_PKEY_RSA 6
#define EVP_PKEY_RSA2 19 #define EVP_PKEY_RSA2 19
#define EVP_PKEY_DH 28 #define EVP_PKEY_DH 28
#define EVP_CIPHER_mode WOLFSSL_CIPHER_mode #define EVP_CIPHER_mode WOLFSSL_CIPHER_mode