Skip to content

Commit 9258fde

Browse files
authored
Merge pull request #8570 from wolfSSL/devin/1742405136-cipherType-to-string
Add wolfSSL_EVP_CIPHER_type_string function and test
2 parents 7c9ecd3 + ec00f78 commit 9258fde

5 files changed

Lines changed: 197 additions & 0 deletions

File tree

tests/api.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66877,6 +66877,7 @@ TEST_CASE testCases[] = {
6687766877
TEST_DECL(test_wolfSSL_EVP_EncodeInit),
6687866878
TEST_DECL(test_wolfSSL_EVP_EncodeUpdate),
6687966879
TEST_DECL(test_wolfSSL_EVP_CipherUpdate_Null),
66880+
TEST_DECL(test_wolfSSL_EVP_CIPHER_type_string),
6688066881
TEST_DECL(test_wolfSSL_EVP_EncodeFinal),
6688166882
TEST_DECL(test_wolfSSL_EVP_DecodeInit),
6688266883
TEST_DECL(test_wolfSSL_EVP_DecodeUpdate),

tests/api/test_evp.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,38 @@ int test_wolfSSL_EVP_CipherUpdate_Null(void)
6868
return EXPECT_RESULT();
6969
}
7070

71+
/* Test for wolfSSL_EVP_CIPHER_type_string() */
72+
int test_wolfSSL_EVP_CIPHER_type_string(void)
73+
{
74+
EXPECT_DECLS;
75+
#ifdef OPENSSL_EXTRA
76+
const char* cipherStr;
77+
78+
/* Test with valid cipher types */
79+
#ifndef NO_AES
80+
#ifdef WOLFSSL_AES_128
81+
cipherStr = wolfSSL_EVP_CIPHER_type_string(WC_AES_128_CBC_TYPE);
82+
ExpectNotNull(cipherStr);
83+
ExpectStrEQ(cipherStr, "AES-128-CBC");
84+
#endif
85+
#endif
86+
87+
#ifndef NO_DES3
88+
cipherStr = wolfSSL_EVP_CIPHER_type_string(WC_DES_CBC_TYPE);
89+
ExpectNotNull(cipherStr);
90+
ExpectStrEQ(cipherStr, "DES-CBC");
91+
#endif
92+
93+
/* Test with NULL cipher type */
94+
cipherStr = wolfSSL_EVP_CIPHER_type_string(WC_NULL_CIPHER_TYPE);
95+
ExpectNotNull(cipherStr);
96+
ExpectStrEQ(cipherStr, "NULL");
97+
98+
/* Test with invalid cipher type */
99+
cipherStr = wolfSSL_EVP_CIPHER_type_string(0xFFFF);
100+
ExpectNull(cipherStr);
101+
#endif /* OPENSSL_EXTRA */
102+
103+
return EXPECT_RESULT();
104+
}
105+

tests/api/test_evp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@
2323
#define WOLFSSL_TEST_EVP_H
2424

2525
int test_wolfSSL_EVP_CipherUpdate_Null(void);
26+
int test_wolfSSL_EVP_CIPHER_type_string(void);
2627

2728
#endif /* WOLFSSL_TEST_EVP_H */

wolfcrypt/src/evp.c

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2054,6 +2054,165 @@ static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher)
20542054
else return 0;
20552055
}
20562056

2057+
/* Getter function for cipher type string
2058+
*
2059+
* cipherType cipherType enum value to get string for
2060+
*
2061+
* Returns string representation of the cipher type or NULL if not found
2062+
*/
2063+
const char* wolfSSL_EVP_CIPHER_type_string(unsigned int cipherType)
2064+
{
2065+
WOLFSSL_ENTER("wolfSSL_EVP_CIPHER_type_string");
2066+
2067+
switch (cipherType) {
2068+
#ifndef NO_DES3
2069+
case WC_DES_CBC_TYPE: return EVP_DES_CBC;
2070+
case WC_DES_EDE3_CBC_TYPE: return EVP_DES_EDE3_CBC;
2071+
case WC_DES_ECB_TYPE: return EVP_DES_ECB;
2072+
case WC_DES_EDE3_ECB_TYPE: return EVP_DES_EDE3_ECB;
2073+
#endif
2074+
#if !defined(NO_AES)
2075+
#if defined(HAVE_AES_CBC) || defined(WOLFSSL_AES_DIRECT)
2076+
#ifdef WOLFSSL_AES_128
2077+
case WC_AES_128_CBC_TYPE: return EVP_AES_128_CBC;
2078+
#endif
2079+
#ifdef WOLFSSL_AES_192
2080+
case WC_AES_192_CBC_TYPE: return EVP_AES_192_CBC;
2081+
#endif
2082+
#ifdef WOLFSSL_AES_256
2083+
case WC_AES_256_CBC_TYPE: return EVP_AES_256_CBC;
2084+
#endif
2085+
#endif /* HAVE_AES_CBC || WOLFSSL_AES_DIRECT */
2086+
#if defined(WOLFSSL_AES_CFB)
2087+
#ifndef WOLFSSL_NO_AES_CFB_1_8
2088+
#ifdef WOLFSSL_AES_128
2089+
case WC_AES_128_CFB1_TYPE: return EVP_AES_128_CFB1;
2090+
#endif
2091+
#ifdef WOLFSSL_AES_192
2092+
case WC_AES_192_CFB1_TYPE: return EVP_AES_192_CFB1;
2093+
#endif
2094+
#ifdef WOLFSSL_AES_256
2095+
case WC_AES_256_CFB1_TYPE: return EVP_AES_256_CFB1;
2096+
#endif
2097+
#ifdef WOLFSSL_AES_128
2098+
case WC_AES_128_CFB8_TYPE: return EVP_AES_128_CFB8;
2099+
#endif
2100+
#ifdef WOLFSSL_AES_192
2101+
case WC_AES_192_CFB8_TYPE: return EVP_AES_192_CFB8;
2102+
#endif
2103+
#ifdef WOLFSSL_AES_256
2104+
case WC_AES_256_CFB8_TYPE: return EVP_AES_256_CFB8;
2105+
#endif
2106+
#endif /* !WOLFSSL_NO_AES_CFB_1_8 */
2107+
#ifdef WOLFSSL_AES_128
2108+
case WC_AES_128_CFB128_TYPE: return EVP_AES_128_CFB128;
2109+
#endif
2110+
#ifdef WOLFSSL_AES_192
2111+
case WC_AES_192_CFB128_TYPE: return EVP_AES_192_CFB128;
2112+
#endif
2113+
#ifdef WOLFSSL_AES_256
2114+
case WC_AES_256_CFB128_TYPE: return EVP_AES_256_CFB128;
2115+
#endif
2116+
#endif /* WOLFSSL_AES_CFB */
2117+
#if defined(WOLFSSL_AES_OFB)
2118+
#ifdef WOLFSSL_AES_128
2119+
case WC_AES_128_OFB_TYPE: return EVP_AES_128_OFB;
2120+
#endif
2121+
#ifdef WOLFSSL_AES_192
2122+
case WC_AES_192_OFB_TYPE: return EVP_AES_192_OFB;
2123+
#endif
2124+
#ifdef WOLFSSL_AES_256
2125+
case WC_AES_256_OFB_TYPE: return EVP_AES_256_OFB;
2126+
#endif
2127+
#endif /* WOLFSSL_AES_OFB */
2128+
#if defined(WOLFSSL_AES_XTS) && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(5,3))
2129+
#ifdef WOLFSSL_AES_128
2130+
case WC_AES_128_XTS_TYPE: return EVP_AES_128_XTS;
2131+
#endif
2132+
#ifdef WOLFSSL_AES_256
2133+
case WC_AES_256_XTS_TYPE: return EVP_AES_256_XTS;
2134+
#endif
2135+
#endif /* WOLFSSL_AES_XTS && (!defined(HAVE_FIPS) || FIPS_VERSION_GE(5,3)) */
2136+
#if defined(HAVE_AESGCM)
2137+
#ifdef WOLFSSL_AES_128
2138+
case WC_AES_128_GCM_TYPE: return EVP_AES_128_GCM;
2139+
#endif
2140+
#ifdef WOLFSSL_AES_192
2141+
case WC_AES_192_GCM_TYPE: return EVP_AES_192_GCM;
2142+
#endif
2143+
#ifdef WOLFSSL_AES_256
2144+
case WC_AES_256_GCM_TYPE: return EVP_AES_256_GCM;
2145+
#endif
2146+
#endif /* HAVE_AESGCM */
2147+
#if defined(HAVE_AESCCM)
2148+
#ifdef WOLFSSL_AES_128
2149+
case WC_AES_128_CCM_TYPE: return EVP_AES_128_CCM;
2150+
#endif
2151+
#ifdef WOLFSSL_AES_192
2152+
case WC_AES_192_CCM_TYPE: return EVP_AES_192_CCM;
2153+
#endif
2154+
#ifdef WOLFSSL_AES_256
2155+
case WC_AES_256_CCM_TYPE: return EVP_AES_256_CCM;
2156+
#endif
2157+
#endif /* HAVE_AESCCM */
2158+
#if defined(WOLFSSL_AES_COUNTER)
2159+
#ifdef WOLFSSL_AES_128
2160+
case WC_AES_128_CTR_TYPE: return EVP_AES_128_CTR;
2161+
#endif
2162+
#ifdef WOLFSSL_AES_192
2163+
case WC_AES_192_CTR_TYPE: return EVP_AES_192_CTR;
2164+
#endif
2165+
#ifdef WOLFSSL_AES_256
2166+
case WC_AES_256_CTR_TYPE: return EVP_AES_256_CTR;
2167+
#endif
2168+
#endif /* WOLFSSL_AES_COUNTER */
2169+
#if defined(HAVE_AES_ECB)
2170+
#ifdef WOLFSSL_AES_128
2171+
case WC_AES_128_ECB_TYPE: return EVP_AES_128_ECB;
2172+
#endif
2173+
#ifdef WOLFSSL_AES_192
2174+
case WC_AES_192_ECB_TYPE: return EVP_AES_192_ECB;
2175+
#endif
2176+
#ifdef WOLFSSL_AES_256
2177+
case WC_AES_256_ECB_TYPE: return EVP_AES_256_ECB;
2178+
#endif
2179+
#endif /* HAVE_AES_ECB */
2180+
#endif /* !NO_AES */
2181+
#if defined(HAVE_ARIA)
2182+
case WC_ARIA_128_GCM_TYPE: return EVP_ARIA_128_GCM;
2183+
case WC_ARIA_192_GCM_TYPE: return EVP_ARIA_192_GCM;
2184+
case WC_ARIA_256_GCM_TYPE: return EVP_ARIA_256_GCM;
2185+
#endif /* HAVE_ARIA */
2186+
#ifndef NO_RC4
2187+
case WC_ARC4_TYPE: return EVP_ARC4;
2188+
#endif
2189+
#if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
2190+
case WC_CHACHA20_POLY1305_TYPE: return EVP_CHACHA20_POLY1305;
2191+
#endif
2192+
#ifdef HAVE_CHACHA
2193+
case WC_CHACHA20_TYPE: return EVP_CHACHA20;
2194+
#endif
2195+
#ifdef WOLFSSL_SM4_ECB
2196+
case WC_SM4_ECB_TYPE: return EVP_SM4_ECB;
2197+
#endif
2198+
#ifdef WOLFSSL_SM4_CBC
2199+
case WC_SM4_CBC_TYPE: return EVP_SM4_CBC;
2200+
#endif
2201+
#ifdef WOLFSSL_SM4_CTR
2202+
case WC_SM4_CTR_TYPE: return EVP_SM4_CTR;
2203+
#endif
2204+
#ifdef WOLFSSL_SM4_GCM
2205+
case WC_SM4_GCM_TYPE: return EVP_SM4_GCM;
2206+
#endif
2207+
#ifdef WOLFSSL_SM4_CCM
2208+
case WC_SM4_CCM_TYPE: return EVP_SM4_CCM;
2209+
#endif
2210+
case WC_NULL_CIPHER_TYPE: return EVP_NULL;
2211+
default:
2212+
return NULL;
2213+
}
2214+
}
2215+
20572216
int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher)
20582217
{
20592218
if (cipher == NULL)

wolfssl/openssl/evp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,6 +1102,7 @@ WOLFSSL_API int wolfSSL_EVP_DigestVerifyInit(WOLFSSL_EVP_MD_CTX *ctx,
11021102
WOLFSSL_API int wolfSSL_EVP_Digest(const unsigned char* in, int inSz, unsigned char* out,
11031103
unsigned int* outSz, const WOLFSSL_EVP_MD* evp,
11041104
WOLFSSL_ENGINE* eng);
1105+
WOLFSSL_API const char* wolfSSL_EVP_CIPHER_type_string(unsigned int type);
11051106
WOLFSSL_API int wolfSSL_EVP_CipherInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
11061107
const WOLFSSL_EVP_CIPHER* type,
11071108
WOLFSSL_ENGINE *impl,

0 commit comments

Comments
 (0)