Merge pull request #8570 from wolfSSL/devin/1742405136-cipherType-to-string

Add wolfSSL_EVP_CIPHER_type_string function and test
This commit is contained in:
David Garske
2025-03-21 10:04:41 -07:00
committed by GitHub
5 changed files with 197 additions and 0 deletions

View File

@ -66877,6 +66877,7 @@ TEST_CASE testCases[] = {
TEST_DECL(test_wolfSSL_EVP_EncodeInit),
TEST_DECL(test_wolfSSL_EVP_EncodeUpdate),
TEST_DECL(test_wolfSSL_EVP_CipherUpdate_Null),
TEST_DECL(test_wolfSSL_EVP_CIPHER_type_string),
TEST_DECL(test_wolfSSL_EVP_EncodeFinal),
TEST_DECL(test_wolfSSL_EVP_DecodeInit),
TEST_DECL(test_wolfSSL_EVP_DecodeUpdate),

View File

@ -68,3 +68,38 @@ int test_wolfSSL_EVP_CipherUpdate_Null(void)
return EXPECT_RESULT();
}
/* Test for wolfSSL_EVP_CIPHER_type_string() */
int test_wolfSSL_EVP_CIPHER_type_string(void)
{
EXPECT_DECLS;
#ifdef OPENSSL_EXTRA
const char* cipherStr;
/* Test with valid cipher types */
#ifndef NO_AES
#ifdef WOLFSSL_AES_128
cipherStr = wolfSSL_EVP_CIPHER_type_string(WC_AES_128_CBC_TYPE);
ExpectNotNull(cipherStr);
ExpectStrEQ(cipherStr, "AES-128-CBC");
#endif
#endif
#ifndef NO_DES3
cipherStr = wolfSSL_EVP_CIPHER_type_string(WC_DES_CBC_TYPE);
ExpectNotNull(cipherStr);
ExpectStrEQ(cipherStr, "DES-CBC");
#endif
/* Test with NULL cipher type */
cipherStr = wolfSSL_EVP_CIPHER_type_string(WC_NULL_CIPHER_TYPE);
ExpectNotNull(cipherStr);
ExpectStrEQ(cipherStr, "NULL");
/* Test with invalid cipher type */
cipherStr = wolfSSL_EVP_CIPHER_type_string(0xFFFF);
ExpectNull(cipherStr);
#endif /* OPENSSL_EXTRA */
return EXPECT_RESULT();
}

View File

@ -23,5 +23,6 @@
#define WOLFSSL_TEST_EVP_H
int test_wolfSSL_EVP_CipherUpdate_Null(void);
int test_wolfSSL_EVP_CIPHER_type_string(void);
#endif /* WOLFSSL_TEST_EVP_H */

View File

@ -2054,6 +2054,165 @@ static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher)
else return 0;
}
/* Getter function for cipher type string
*
* cipherType cipherType enum value to get string for
*
* Returns string representation of the cipher type or NULL if not found
*/
const char* wolfSSL_EVP_CIPHER_type_string(unsigned int cipherType)
{
WOLFSSL_ENTER("wolfSSL_EVP_CIPHER_type_string");
switch (cipherType) {
#ifndef NO_DES3
case WC_DES_CBC_TYPE: return EVP_DES_CBC;
case WC_DES_EDE3_CBC_TYPE: return EVP_DES_EDE3_CBC;
case WC_DES_ECB_TYPE: return EVP_DES_ECB;
case WC_DES_EDE3_ECB_TYPE: return EVP_DES_EDE3_ECB;
#endif
#if !defined(NO_AES)
#if defined(HAVE_AES_CBC) || defined(WOLFSSL_AES_DIRECT)
#ifdef WOLFSSL_AES_128
case WC_AES_128_CBC_TYPE: return EVP_AES_128_CBC;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_CBC_TYPE: return EVP_AES_192_CBC;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_CBC_TYPE: return EVP_AES_256_CBC;
#endif
#endif /* HAVE_AES_CBC || WOLFSSL_AES_DIRECT */
#if defined(WOLFSSL_AES_CFB)
#ifndef WOLFSSL_NO_AES_CFB_1_8
#ifdef WOLFSSL_AES_128
case WC_AES_128_CFB1_TYPE: return EVP_AES_128_CFB1;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_CFB1_TYPE: return EVP_AES_192_CFB1;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_CFB1_TYPE: return EVP_AES_256_CFB1;
#endif
#ifdef WOLFSSL_AES_128
case WC_AES_128_CFB8_TYPE: return EVP_AES_128_CFB8;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_CFB8_TYPE: return EVP_AES_192_CFB8;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_CFB8_TYPE: return EVP_AES_256_CFB8;
#endif
#endif /* !WOLFSSL_NO_AES_CFB_1_8 */
#ifdef WOLFSSL_AES_128
case WC_AES_128_CFB128_TYPE: return EVP_AES_128_CFB128;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_CFB128_TYPE: return EVP_AES_192_CFB128;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_CFB128_TYPE: return EVP_AES_256_CFB128;
#endif
#endif /* WOLFSSL_AES_CFB */
#if defined(WOLFSSL_AES_OFB)
#ifdef WOLFSSL_AES_128
case WC_AES_128_OFB_TYPE: return EVP_AES_128_OFB;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_OFB_TYPE: return EVP_AES_192_OFB;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_OFB_TYPE: return EVP_AES_256_OFB;
#endif
#endif /* WOLFSSL_AES_OFB */
#if defined(WOLFSSL_AES_XTS) && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(5,3))
#ifdef WOLFSSL_AES_128
case WC_AES_128_XTS_TYPE: return EVP_AES_128_XTS;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_XTS_TYPE: return EVP_AES_256_XTS;
#endif
#endif /* WOLFSSL_AES_XTS && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(5,3)) */
#if defined(HAVE_AESGCM)
#ifdef WOLFSSL_AES_128
case WC_AES_128_GCM_TYPE: return EVP_AES_128_GCM;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_GCM_TYPE: return EVP_AES_192_GCM;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_GCM_TYPE: return EVP_AES_256_GCM;
#endif
#endif /* HAVE_AESGCM */
#if defined(HAVE_AESCCM)
#ifdef WOLFSSL_AES_128
case WC_AES_128_CCM_TYPE: return EVP_AES_128_CCM;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_CCM_TYPE: return EVP_AES_192_CCM;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_CCM_TYPE: return EVP_AES_256_CCM;
#endif
#endif /* HAVE_AESCCM */
#if defined(WOLFSSL_AES_COUNTER)
#ifdef WOLFSSL_AES_128
case WC_AES_128_CTR_TYPE: return EVP_AES_128_CTR;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_CTR_TYPE: return EVP_AES_192_CTR;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_CTR_TYPE: return EVP_AES_256_CTR;
#endif
#endif /* WOLFSSL_AES_COUNTER */
#if defined(HAVE_AES_ECB)
#ifdef WOLFSSL_AES_128
case WC_AES_128_ECB_TYPE: return EVP_AES_128_ECB;
#endif
#ifdef WOLFSSL_AES_192
case WC_AES_192_ECB_TYPE: return EVP_AES_192_ECB;
#endif
#ifdef WOLFSSL_AES_256
case WC_AES_256_ECB_TYPE: return EVP_AES_256_ECB;
#endif
#endif /* HAVE_AES_ECB */
#endif /* !NO_AES */
#if defined(HAVE_ARIA)
case WC_ARIA_128_GCM_TYPE: return EVP_ARIA_128_GCM;
case WC_ARIA_192_GCM_TYPE: return EVP_ARIA_192_GCM;
case WC_ARIA_256_GCM_TYPE: return EVP_ARIA_256_GCM;
#endif /* HAVE_ARIA */
#ifndef NO_RC4
case WC_ARC4_TYPE: return EVP_ARC4;
#endif
#if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
case WC_CHACHA20_POLY1305_TYPE: return EVP_CHACHA20_POLY1305;
#endif
#ifdef HAVE_CHACHA
case WC_CHACHA20_TYPE: return EVP_CHACHA20;
#endif
#ifdef WOLFSSL_SM4_ECB
case WC_SM4_ECB_TYPE: return EVP_SM4_ECB;
#endif
#ifdef WOLFSSL_SM4_CBC
case WC_SM4_CBC_TYPE: return EVP_SM4_CBC;
#endif
#ifdef WOLFSSL_SM4_CTR
case WC_SM4_CTR_TYPE: return EVP_SM4_CTR;
#endif
#ifdef WOLFSSL_SM4_GCM
case WC_SM4_GCM_TYPE: return EVP_SM4_GCM;
#endif
#ifdef WOLFSSL_SM4_CCM
case WC_SM4_CCM_TYPE: return EVP_SM4_CCM;
#endif
case WC_NULL_CIPHER_TYPE: return EVP_NULL;
default:
return NULL;
}
}
int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher)
{
if (cipher == NULL)

View File

@ -1102,6 +1102,7 @@ WOLFSSL_API int wolfSSL_EVP_DigestVerifyInit(WOLFSSL_EVP_MD_CTX *ctx,
WOLFSSL_API int wolfSSL_EVP_Digest(const unsigned char* in, int inSz, unsigned char* out,
unsigned int* outSz, const WOLFSSL_EVP_MD* evp,
WOLFSSL_ENGINE* eng);
WOLFSSL_API const char* wolfSSL_EVP_CIPHER_type_string(unsigned int type);
WOLFSSL_API int wolfSSL_EVP_CipherInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
const WOLFSSL_EVP_CIPHER* type,
WOLFSSL_ENGINE *impl,