EVP_CIPHER_CTX_new/free, EVP_get_digestbyname

This commit is contained in:
Takashi Kojo
2016-12-04 10:00:42 +09:00
committed by Jacob Barthelmeh
parent 0c742654dc
commit 2ef85e3d4d
3 changed files with 111 additions and 9 deletions

View File

@@ -10538,12 +10538,48 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
#endif /* WOLFSSL_SHA512 */
const EVP_MD *wolfSSL_EVP_get_digestbyname(const char *name)
{
static const char *md_tbl[] = {
#ifndef NO_MD5
"MD5",
#endif /* NO_MD5 */
#ifndef NO_SHA
"SHA",
#endif /* NO_SHA */
#ifdef WOLFSSL_SHA224
"SHA224",
#endif /* WOLFSSL_SHA224 */
"SHA256",
#ifdef WOLFSSL_SHA384
"SHA384",
#endif /* WOLFSSL_SHA384 */
#ifdef WOLFSSL_SHA512
"SHA512",
#endif /* WOLFSSL_SHA512 */
NULL
} ;
const char **tbl ;
for( tbl = md_tbl; *tbl != NULL; tbl++)
if(XSTRNCMP(name, *tbl, XSTRLEN(*tbl)+1) == 0) {
return (EVP_MD *)*tbl;
}
return NULL;
}
#ifndef NO_MD5
const WOLFSSL_EVP_MD* wolfSSL_EVP_md5(void)
{
static const char* type = "MD5";
const char* type = EVP_get_digestbyname("MD5");
WOLFSSL_ENTER("EVP_md5");
return type;
}
@@ -10554,7 +10590,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
#ifndef NO_SHA
const WOLFSSL_EVP_MD* wolfSSL_EVP_sha1(void)
{
static const char* type = "SHA";
const char* type = EVP_get_digestbyname("SHA");
WOLFSSL_ENTER("EVP_sha1");
return type;
}
@@ -10564,7 +10600,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
const WOLFSSL_EVP_MD* wolfSSL_EVP_sha224(void)
{
static const char* type = "SHA224";
const char* type = EVP_get_digestbyname("SHA224");
WOLFSSL_ENTER("EVP_sha224");
return type;
}
@@ -10574,7 +10610,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
const WOLFSSL_EVP_MD* wolfSSL_EVP_sha256(void)
{
static const char* type = "SHA256";
const char* type = EVP_get_digestbyname("SHA256");
WOLFSSL_ENTER("EVP_sha256");
return type;
}
@@ -10583,7 +10619,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
const WOLFSSL_EVP_MD* wolfSSL_EVP_sha384(void)
{
static const char* type = "SHA384";
const char* type = EVP_get_digestbyname("SHA384");
WOLFSSL_ENTER("EVP_sha384");
return type;
}
@@ -10594,7 +10630,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
const WOLFSSL_EVP_MD* wolfSSL_EVP_sha512(void)
{
static const char* type = "SHA512";
const char* type = EVP_get_digestbyname("SHA512");
WOLFSSL_ENTER("EVP_sha512");
return type;
}

View File

@@ -19,7 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
*/
static unsigned char cipherType(const WOLFSSL_EVP_CIPHER *cipher);
static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher);
WOLFSSL_API int wolfSSL_EVP_EncryptInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
const WOLFSSL_EVP_CIPHER* type,
@@ -55,6 +55,59 @@ WOLFSSL_API int wolfSSL_EVP_DecryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
return wolfSSL_EVP_CipherInit(ctx, type, key, iv, 0);
}
WOLFSSL_API WOLFSSL_EVP_CIPHER_CTX *wolfSSL_EVP_CIPHER_CTX_new(void)
{
WOLFSSL_EVP_CIPHER_CTX *ctx=XMALLOC(sizeof *ctx, NULL, DYNAMIC_TYPE_TMP_BUFFER);
if (ctx)
wolfSSL_EVP_CIPHER_CTX_init(ctx);
return ctx;
}
WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_free(WOLFSSL_EVP_CIPHER_CTX *ctx)
{
if (ctx) {
wolfSSL_EVP_CIPHER_CTX_cleanup(ctx);
XFREE(ctx, NULL, DYNAMIC_TYPE_TMP_BUFFER);
}
}
WOLFSSL_API int wolfSSL_EVP_EncryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
unsigned char *out, int *outl)
{
if (ctx->enc)
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
else
return 0;
}
WOLFSSL_API int wolfSSL_EVP_EncryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
unsigned char *out, int *outl)
{
if (ctx->enc)
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
else
return 0;
}
WOLFSSL_API int wolfSSL_EVP_DecryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
unsigned char *out, int *outl)
{
if (ctx->enc)
return 0;
else
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
}
WOLFSSL_API int wolfSSL_EVP_DecryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
unsigned char *out, int *outl)
{
if (ctx->enc)
return 0;
else
return wolfSSL_EVP_CipherFinal(ctx, out, outl);
}
WOLFSSL_API int wolfSSL_EVP_DigestInit_ex(WOLFSSL_EVP_MD_CTX* ctx,
const WOLFSSL_EVP_MD* type,
WOLFSSL_ENGINE *impl)
@@ -304,7 +357,7 @@ WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_block_size(const WOLFSSL_EVP_CIPHER_CTX *
}
}
static unsigned char cipherType(const WOLFSSL_EVP_CIPHER *cipher)
static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher)
{
if (cipher == NULL) return 0; /* dummy for #ifdef */
#ifndef NO_DES3

View File

@@ -179,6 +179,9 @@ WOLFSSL_API int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* md);
WOLFSSL_API void wolfSSL_EVP_MD_CTX_init(WOLFSSL_EVP_MD_CTX* ctx);
WOLFSSL_API int wolfSSL_EVP_MD_CTX_cleanup(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);
WOLFSSL_API int wolfSSL_EVP_DigestInit(WOLFSSL_EVP_MD_CTX* ctx,
const WOLFSSL_EVP_MD* type);
WOLFSSL_API int wolfSSL_EVP_DigestInit_ex(WOLFSSL_EVP_MD_CTX* ctx,
@@ -242,6 +245,8 @@ WOLFSSL_API int wolfSSL_EVP_DecryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
WOLFSSL_API int wolfSSL_EVP_DecryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
unsigned char *out, int *outl);
WOLFSSL_API WOLFSSL_EVP_CIPHER_CTX *wolfSSL_EVP_CIPHER_CTX_new(void);
WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_free(WOLFSSL_EVP_CIPHER_CTX *ctx);
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx);
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_set_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx,
int keylen);
@@ -250,7 +255,7 @@ WOLFSSL_API int wolfSSL_EVP_Cipher(WOLFSSL_EVP_CIPHER_CTX* ctx,
unsigned int len);
WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_get_digestbynid(int);
WOLFSSL_API const WOLFSSL_EVP_CIPHER *wolfSSL_EVP_get_cipherbyname(const char *name);
WOLFSSL_API WOLFSSL_RSA* wolfSSL_EVP_PKEY_get1_RSA(WOLFSSL_EVP_PKEY*);
WOLFSSL_API WOLFSSL_DSA* wolfSSL_EVP_PKEY_get1_DSA(WOLFSSL_EVP_PKEY*);
WOLFSSL_API WOLFSSL_EC_KEY *wolfSSL_EVP_PKEY_get1_EC_KEY(WOLFSSL_EVP_PKEY *key);
@@ -333,6 +338,9 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
#define EVP_DigestFinal_ex wolfSSL_EVP_DigestFinal_ex
#define EVP_BytesToKey wolfSSL_EVP_BytesToKey
#define EVP_get_cipherbyname wolfSSL_EVP_get_cipherbyname
#define EVP_get_digestbyname wolfSSL_EVP_get_digestbyname
#define EVP_CIPHER_CTX_init wolfSSL_EVP_CIPHER_CTX_init
#define EVP_CIPHER_CTX_cleanup wolfSSL_EVP_CIPHER_CTX_cleanup
#define EVP_CIPHER_CTX_iv_length wolfSSL_EVP_CIPHER_CTX_iv_length
@@ -356,7 +364,12 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
#define EVP_DecryptFinal wolfSSL_EVP_CipherFinal
#define EVP_DecryptFinal_ex wolfSSL_EVP_CipherFinal
#define EVP_CIPHER_CTX_free wolfSSL_EVP_CIPHER_CTX_free
#define EVP_CIPHER_CTX_new wolfSSL_EVP_CIPHER_CTX_new
#define EVP_get_digestbynid wolfSSL_EVP_get_digestbynid
#define EVP_get_cipherbyname wolfSSL_EVP_get_cipherbyname
#define EVP_get_digestbyname wolfSSL_EVP_get_digestbyname
#define EVP_PKEY_get1_RSA wolfSSL_EVP_PKEY_get1_RSA
#define EVP_PKEY_get1_DSA wolfSSL_EVP_PKEY_get1_DSA