Merge pull request #2059 from miyazakh/openssl_bksize_digest
Added EVP_MD_CTX_block_size and exposed EVP_Digest()
This commit is contained in:
commit
0b2bbc33bd
55
src/ssl.c
55
src/ssl.c
@ -7410,7 +7410,7 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509,
|
||||
|
||||
|
||||
/* this function makes the assumption that out buffer is big enough for digest*/
|
||||
static int wolfSSL_EVP_Digest(unsigned char* in, int inSz, unsigned char* out,
|
||||
int wolfSSL_EVP_Digest(unsigned char* in, int inSz, unsigned char* out,
|
||||
unsigned int* outSz, const WOLFSSL_EVP_MD* evp,
|
||||
WOLFSSL_ENGINE* eng)
|
||||
{
|
||||
@ -13047,7 +13047,15 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
|
||||
return wolfSSL_EVP_MD_CTX_copy_ex(out, in);
|
||||
}
|
||||
|
||||
|
||||
/* returns digest size */
|
||||
int wolfSSL_EVP_MD_CTX_size(const WOLFSSL_EVP_MD_CTX *ctx) {
|
||||
return(wolfSSL_EVP_MD_size(wolfSSL_EVP_MD_CTX_md(ctx)));
|
||||
}
|
||||
/* returns block size */
|
||||
int wolfSSL_EVP_MD_CTX_block_size(const WOLFSSL_EVP_MD_CTX *ctx) {
|
||||
return(wolfSSL_EVP_MD_block_size(wolfSSL_EVP_MD_CTX_md(ctx)));
|
||||
}
|
||||
|
||||
/* Deep copy of EVP_MD hasher
|
||||
* return WOLFSSL_SUCCESS on success */
|
||||
static int wolfSSL_EVP_MD_Copy_Hasher(WOLFSSL_EVP_MD_CTX* des,
|
||||
@ -26065,6 +26073,49 @@ const WOLFSSL_EVP_MD* wolfSSL_EVP_ripemd160(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int wolfSSL_EVP_MD_block_size(const WOLFSSL_EVP_MD* type)
|
||||
{
|
||||
WOLFSSL_MSG("wolfSSL_EVP_MD_block_size");
|
||||
|
||||
if (type == NULL) {
|
||||
WOLFSSL_MSG("No md type arg");
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
if (XSTRNCMP(type, "SHA256", 6) == 0) {
|
||||
return WC_SHA256_BLOCK_SIZE;
|
||||
}
|
||||
#ifndef NO_MD5
|
||||
else if (XSTRNCMP(type, "MD5", 3) == 0) {
|
||||
return WC_MD5_BLOCK_SIZE;
|
||||
}
|
||||
#endif
|
||||
#ifdef WOLFSSL_SHA224
|
||||
else if (XSTRNCMP(type, "SHA224", 6) == 0) {
|
||||
return WC_SHA224_BLOCK_SIZE;
|
||||
}
|
||||
#endif
|
||||
#ifdef WOLFSSL_SHA384
|
||||
else if (XSTRNCMP(type, "SHA384", 6) == 0) {
|
||||
return WC_SHA384_BLOCK_SIZE;
|
||||
}
|
||||
#endif
|
||||
#ifdef WOLFSSL_SHA512
|
||||
else if (XSTRNCMP(type, "SHA512", 6) == 0) {
|
||||
return WC_SHA512_BLOCK_SIZE;
|
||||
}
|
||||
#endif
|
||||
#ifndef NO_SHA
|
||||
/* has to be last since would pick or 256, 384, or 512 too */
|
||||
else if (XSTRNCMP(type, "SHA", 3) == 0) {
|
||||
return WC_SHA_BLOCK_SIZE;
|
||||
}
|
||||
#endif
|
||||
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* type)
|
||||
{
|
||||
WOLFSSL_MSG("wolfSSL_EVP_MD_size");
|
||||
|
103
tests/api.c
103
tests/api.c
@ -17457,8 +17457,109 @@ static void test_wolfSSL_EVP_PKEY_new_mac_key(void)
|
||||
printf(resultFmt, passed);
|
||||
#endif /* OPENSSL_EXTRA */
|
||||
}
|
||||
static void test_wolfSSL_EVP_Digest(void)
|
||||
{
|
||||
#if defined(OPENSSL_EXTRA) && !defined(NO_SHA256)
|
||||
|
||||
|
||||
const char* in = "abc";
|
||||
int inLen = (int)XSTRLEN(in);
|
||||
byte out[WC_SHA256_DIGEST_SIZE];
|
||||
unsigned int outLen;
|
||||
const char* expOut = "\xBA\x78\x16\xBF\x8F\x01\xCF\xEA\x41\x41\x40\xDE\x5D\xAE\x22"
|
||||
"\x23\xB0\x03\x61\xA3\x96\x17\x7A\x9C\xB4\x10\xFF\x61\xF2\x00"
|
||||
"\x15\xAD";
|
||||
printf(testingFmt, "wolfSSL_EVP_Digest()");
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_Digest((unsigned char*)in, inLen, out, &outLen, "SHA256", NULL), 1);
|
||||
AssertIntEQ(outLen, WC_SHA256_DIGEST_SIZE);
|
||||
AssertIntEQ(XMEMCMP(out, expOut, WC_SHA256_DIGEST_SIZE), 0);
|
||||
|
||||
printf(resultFmt, passed);
|
||||
|
||||
#endif /* OPEN_EXTRA && ! NO_SHA256 */
|
||||
}
|
||||
|
||||
static void test_wolfSSL_EVP_MD_size(void)
|
||||
{
|
||||
#ifdef OPENSSL_EXTRA
|
||||
|
||||
WOLFSSL_EVP_MD_CTX mdCtx;
|
||||
|
||||
printf(testingFmt, "wolfSSL_EVP_MD_size()");
|
||||
|
||||
#ifndef NO_SHA256
|
||||
wolfSSL_EVP_MD_CTX_init(&mdCtx);
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, "SHA256"), 1);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_size(wolfSSL_EVP_MD_CTX_md(&mdCtx)), WC_SHA256_DIGEST_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), WC_SHA256_BLOCK_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 1);
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef NO_MD5
|
||||
wolfSSL_EVP_MD_CTX_init(&mdCtx);
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, "MD5"), 1);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_size(&mdCtx), WC_MD5_DIGEST_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), WC_MD5_BLOCK_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 1);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef WOLFSSL_SHA224
|
||||
wolfSSL_EVP_MD_CTX_init(&mdCtx);
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, "SHA224"), 1);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_size(&mdCtx), WC_SHA224_DIGEST_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), WC_SHA224_BLOCK_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 1);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef WOLFSSL_SHA384
|
||||
wolfSSL_EVP_MD_CTX_init(&mdCtx);
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, "SHA384"), 1);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_size(&mdCtx), WC_SHA384_DIGEST_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), WC_SHA384_BLOCK_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 1);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef WOLFSSL_SHA512
|
||||
wolfSSL_EVP_MD_CTX_init(&mdCtx);
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, "SHA512"), 1);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_size(&mdCtx), WC_SHA512_DIGEST_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), WC_SHA512_BLOCK_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 1);
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef NO_SHA
|
||||
wolfSSL_EVP_MD_CTX_init(&mdCtx);
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, "SHA"), 1);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_size(&mdCtx), WC_SHA_DIGEST_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), WC_SHA_BLOCK_SIZE);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 1);
|
||||
|
||||
#endif
|
||||
/* error case */
|
||||
wolfSSL_EVP_MD_CTX_init(&mdCtx);
|
||||
|
||||
AssertIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, ""), BAD_FUNC_ARG);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_size(wolfSSL_EVP_MD_CTX_md(&mdCtx)), BAD_FUNC_ARG);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), BAD_FUNC_ARG);
|
||||
AssertIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 0);
|
||||
|
||||
printf(resultFmt, passed);
|
||||
|
||||
#endif /* OPENSSL_EXTRA */
|
||||
}
|
||||
|
||||
static void test_wolfSSL_EVP_MD_hmac_signing(void)
|
||||
{
|
||||
#ifdef OPENSSL_EXTRA
|
||||
@ -23175,6 +23276,8 @@ void ApiTest(void)
|
||||
test_wolfSSL_PEM_PUBKEY();
|
||||
test_wolfSSL_tmp_dh();
|
||||
test_wolfSSL_ctrl();
|
||||
test_wolfSSL_EVP_MD_size();
|
||||
test_wolfSSL_EVP_Digest();
|
||||
test_wolfSSL_EVP_PKEY_new_mac_key();
|
||||
test_wolfSSL_EVP_MD_hmac_signing();
|
||||
test_wolfSSL_EVP_MD_rsa_signing();
|
||||
|
@ -239,6 +239,7 @@ typedef WOLFSSL_EVP_PKEY_CTX EVP_PKEY_CTX;
|
||||
WOLFSSL_API void wolfSSL_EVP_init(void);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* md);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_block_size(const WOLFSSL_EVP_MD *md);
|
||||
|
||||
WOLFSSL_API WOLFSSL_EVP_MD_CTX *wolfSSL_EVP_MD_CTX_new (void);
|
||||
WOLFSSL_API void wolfSSL_EVP_MD_CTX_free(WOLFSSL_EVP_MD_CTX* ctx);
|
||||
@ -247,6 +248,8 @@ WOLFSSL_API int wolfSSL_EVP_MD_CTX_cleanup(WOLFSSL_EVP_MD_CTX* ctx);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_CTX_copy(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_CTX_copy_ex(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_CTX_type(const WOLFSSL_EVP_MD_CTX *ctx);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_CTX_size(const WOLFSSL_EVP_MD_CTX *ctx);
|
||||
WOLFSSL_API int wolfSSL_EVP_MD_CTX_block_size(const WOLFSSL_EVP_MD_CTX *ctx);
|
||||
WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_MD_CTX_md(const WOLFSSL_EVP_MD_CTX *ctx);
|
||||
WOLFSSL_API const WOLFSSL_EVP_CIPHER *wolfSSL_EVP_get_cipherbyname(const char *name);
|
||||
WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_get_digestbyname(const char *name);
|
||||
@ -283,6 +286,9 @@ WOLFSSL_API int wolfSSL_EVP_DigestVerifyUpdate(WOLFSSL_EVP_MD_CTX *ctx,
|
||||
WOLFSSL_API int wolfSSL_EVP_DigestVerifyFinal(WOLFSSL_EVP_MD_CTX *ctx,
|
||||
const unsigned char *sig,
|
||||
size_t siglen);
|
||||
WOLFSSL_API int wolfSSL_EVP_Digest(unsigned char* in, int inSz, unsigned char* out,
|
||||
unsigned int* outSz, const WOLFSSL_EVP_MD* evp,
|
||||
WOLFSSL_ENGINE* eng);
|
||||
|
||||
|
||||
WOLFSSL_API int wolfSSL_EVP_BytesToKey(const WOLFSSL_EVP_CIPHER*,
|
||||
@ -487,17 +493,20 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
|
||||
#define EVP_idea_cbc wolfSSL_EVP_idea_cbc
|
||||
#define EVP_enc_null wolfSSL_EVP_enc_null
|
||||
|
||||
#define EVP_MD_size wolfSSL_EVP_MD_size
|
||||
#define EVP_MD_CTX_new wolfSSL_EVP_MD_CTX_new
|
||||
#define EVP_MD_CTX_create wolfSSL_EVP_MD_CTX_new
|
||||
#define EVP_MD_CTX_free wolfSSL_EVP_MD_CTX_free
|
||||
#define EVP_MD_CTX_destroy wolfSSL_EVP_MD_CTX_free
|
||||
#define EVP_MD_CTX_init wolfSSL_EVP_MD_CTX_init
|
||||
#define EVP_MD_CTX_cleanup wolfSSL_EVP_MD_CTX_cleanup
|
||||
#define EVP_MD_CTX_md wolfSSL_EVP_MD_CTX_md
|
||||
#define EVP_MD_CTX_type wolfSSL_EVP_MD_CTX_type
|
||||
#define EVP_MD_type wolfSSL_EVP_MD_type
|
||||
#define EVP_MD_size wolfSSL_EVP_MD_size
|
||||
#define EVP_MD_CTX_new wolfSSL_EVP_MD_CTX_new
|
||||
#define EVP_MD_CTX_create wolfSSL_EVP_MD_CTX_new
|
||||
#define EVP_MD_CTX_free wolfSSL_EVP_MD_CTX_free
|
||||
#define EVP_MD_CTX_destroy wolfSSL_EVP_MD_CTX_free
|
||||
#define EVP_MD_CTX_init wolfSSL_EVP_MD_CTX_init
|
||||
#define EVP_MD_CTX_cleanup wolfSSL_EVP_MD_CTX_cleanup
|
||||
#define EVP_MD_CTX_md wolfSSL_EVP_MD_CTX_md
|
||||
#define EVP_MD_CTX_type wolfSSL_EVP_MD_CTX_type
|
||||
#define EVP_MD_CTX_size wolfSSL_EVP_MD_CTX_size
|
||||
#define EVP_MD_CTX_block_size wolfSSL_EVP_MD_CTX_block_size
|
||||
#define EVP_MD_type wolfSSL_EVP_MD_type
|
||||
|
||||
#define EVP_Digest wolfSSL_EVP_Digest
|
||||
#define EVP_DigestInit wolfSSL_EVP_DigestInit
|
||||
#define EVP_DigestInit_ex wolfSSL_EVP_DigestInit_ex
|
||||
#define EVP_DigestUpdate wolfSSL_EVP_DigestUpdate
|
||||
|
Loading…
Reference in New Issue
Block a user