add EVP_CIPHER_CTX_mode

This commit is contained in:
Takashi Kojo
2016-12-13 13:45:51 +09:00
committed by Jacob Barthelmeh
parent f60cb08c29
commit c77a18f0ec
3 changed files with 34 additions and 3 deletions

View File

@ -11107,6 +11107,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_128_CBC, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_128_CBC, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_128_CBC); WOLFSSL_MSG(EVP_AES_128_CBC);
ctx->cipherType = AES_128_CBC_TYPE; ctx->cipherType = AES_128_CBC_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CBC_MODE;
ctx->keyLen = 16; ctx->keyLen = 16;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11127,6 +11128,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_192_CBC, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_192_CBC, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_192_CBC); WOLFSSL_MSG(EVP_AES_192_CBC);
ctx->cipherType = AES_192_CBC_TYPE; ctx->cipherType = AES_192_CBC_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CBC_MODE;
ctx->keyLen = 24; ctx->keyLen = 24;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11147,6 +11149,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_256_CBC, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_256_CBC, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_256_CBC); WOLFSSL_MSG(EVP_AES_256_CBC);
ctx->cipherType = AES_256_CBC_TYPE; ctx->cipherType = AES_256_CBC_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CBC_MODE;
ctx->keyLen = 32; ctx->keyLen = 32;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11168,6 +11171,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_128_CTR, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_128_CTR, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_128_CTR); WOLFSSL_MSG(EVP_AES_128_CTR);
ctx->cipherType = AES_128_CTR_TYPE; ctx->cipherType = AES_128_CTR_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CTR_MODE;
ctx->keyLen = 16; ctx->keyLen = 16;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11188,6 +11192,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_192_CTR, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_192_CTR, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_192_CTR); WOLFSSL_MSG(EVP_AES_192_CTR);
ctx->cipherType = AES_192_CTR_TYPE; ctx->cipherType = AES_192_CTR_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CTR_MODE;
ctx->keyLen = 24; ctx->keyLen = 24;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11208,6 +11213,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_256_CTR, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_256_CTR, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_256_CTR); WOLFSSL_MSG(EVP_AES_256_CTR);
ctx->cipherType = AES_256_CTR_TYPE; ctx->cipherType = AES_256_CTR_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CTR_MODE;
ctx->keyLen = 32; ctx->keyLen = 32;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11229,6 +11235,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_128_ECB, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_128_ECB, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_128_ECB); WOLFSSL_MSG(EVP_AES_128_ECB);
ctx->cipherType = AES_128_ECB_TYPE; ctx->cipherType = AES_128_ECB_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_ECB_MODE;
ctx->keyLen = 16; ctx->keyLen = 16;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11244,6 +11251,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_192_ECB, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_192_ECB, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_192_ECB); WOLFSSL_MSG(EVP_AES_192_ECB);
ctx->cipherType = AES_192_ECB_TYPE; ctx->cipherType = AES_192_ECB_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_ECB_MODE;
ctx->keyLen = 24; ctx->keyLen = 24;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11260,6 +11268,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_AES_256_ECB, EVP_AES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_AES_256_ECB, EVP_AES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_AES_256_ECB); WOLFSSL_MSG(EVP_AES_256_ECB);
ctx->cipherType = AES_256_ECB_TYPE; ctx->cipherType = AES_256_ECB_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_ECB_MODE;
ctx->keyLen = 32; ctx->keyLen = 32;
ctx->block_size = AES_BLOCK_SIZE; ctx->block_size = AES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11278,6 +11287,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_DES_CBC, EVP_DES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_DES_CBC, EVP_DES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_DES_CBC); WOLFSSL_MSG(EVP_DES_CBC);
ctx->cipherType = DES_CBC_TYPE; ctx->cipherType = DES_CBC_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CBC_MODE;
ctx->keyLen = 8; ctx->keyLen = 8;
ctx->block_size = DES_BLOCK_SIZE; ctx->block_size = DES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11297,6 +11307,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_DES_ECB, EVP_DES_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_DES_ECB, EVP_DES_SIZE) == 0)) {
WOLFSSL_MSG(EVP_DES_ECB); WOLFSSL_MSG(EVP_DES_ECB);
ctx->cipherType = DES_ECB_TYPE; ctx->cipherType = DES_ECB_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_ECB_MODE;
ctx->keyLen = 8; ctx->keyLen = 8;
ctx->block_size = DES_BLOCK_SIZE; ctx->block_size = DES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11314,6 +11325,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
XSTRNCMP(type, EVP_DES_EDE3_CBC, EVP_DES_EDE3_SIZE) == 0)) { XSTRNCMP(type, EVP_DES_EDE3_CBC, EVP_DES_EDE3_SIZE) == 0)) {
WOLFSSL_MSG(EVP_DES_EDE3_CBC); WOLFSSL_MSG(EVP_DES_EDE3_CBC);
ctx->cipherType = DES_EDE3_CBC_TYPE; ctx->cipherType = DES_EDE3_CBC_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CBC_MODE;
ctx->keyLen = 24; ctx->keyLen = 24;
ctx->block_size = DES_BLOCK_SIZE; ctx->block_size = DES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11336,6 +11348,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
XSTRNCMP(type, EVP_DES_EDE3_ECB, EVP_DES_EDE3_SIZE) == 0)) { XSTRNCMP(type, EVP_DES_EDE3_ECB, EVP_DES_EDE3_SIZE) == 0)) {
WOLFSSL_MSG(EVP_DES_EDE3_ECB); WOLFSSL_MSG(EVP_DES_EDE3_ECB);
ctx->cipherType = DES_EDE3_ECB_TYPE; ctx->cipherType = DES_EDE3_ECB_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_ECB_MODE;
ctx->keyLen = 24; ctx->keyLen = 24;
ctx->block_size = DES_BLOCK_SIZE; ctx->block_size = DES_BLOCK_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
@ -11353,6 +11366,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
XSTRNCMP(type, "ARC4", 4) == 0)) { XSTRNCMP(type, "ARC4", 4) == 0)) {
WOLFSSL_MSG("ARC4"); WOLFSSL_MSG("ARC4");
ctx->cipherType = ARC4_TYPE; ctx->cipherType = ARC4_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_STREAM_CIPHER;
if (ctx->keyLen == 0) /* user may have already set */ if (ctx->keyLen == 0) /* user may have already set */
ctx->keyLen = 16; /* default to 128 */ ctx->keyLen = 16; /* default to 128 */
if (key) if (key)
@ -11365,6 +11379,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
(type && XSTRNCMP(type, EVP_IDEA_CBC, EVP_IDEA_SIZE) == 0)) { (type && XSTRNCMP(type, EVP_IDEA_CBC, EVP_IDEA_SIZE) == 0)) {
WOLFSSL_MSG(EVP_IDEA_CBC); WOLFSSL_MSG(EVP_IDEA_CBC);
ctx->cipherType = IDEA_CBC_TYPE; ctx->cipherType = IDEA_CBC_TYPE;
ctx->flags = WOLFSSL_EVP_CIPH_CBC_MODE;
ctx->keyLen = IDEA_KEY_SIZE; ctx->keyLen = IDEA_KEY_SIZE;
if (enc == 0 || enc == 1) if (enc == 0 || enc == 1)
ctx->enc = enc ? 1 : 0; ctx->enc = enc ? 1 : 0;

View File

@ -75,6 +75,12 @@ WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_free(WOLFSSL_EVP_CIPHER_CTX *ctx)
} }
} }
WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_CTX_mode(const WOLFSSL_EVP_CIPHER_CTX *ctx)
{
if (ctx == NULL) return 0;
return ctx->flags & WOLFSSL_EVP_CIPH_MODE;
}
WOLFSSL_API int wolfSSL_EVP_EncryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx, WOLFSSL_API int wolfSSL_EVP_EncryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
unsigned char *out, int *outl) unsigned char *out, int *outl)
{ {

View File

@ -284,10 +284,20 @@ WOLFSSL_API unsigned long WOLFSSL_EVP_CIPHER_mode(const WOLFSSL_EVP_CIPHER *ciph
WOLFSSL_API unsigned long WOLFSSL_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher); WOLFSSL_API unsigned long WOLFSSL_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher);
WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_flags(const WOLFSSL_EVP_CIPHER *cipher); WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_flags(const WOLFSSL_EVP_CIPHER *cipher);
WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_set_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags); WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_set_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags);
WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_CTX_mode(const WOLFSSL_EVP_CIPHER_CTX *ctx);
WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *c, int pad); WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *c, int pad);
WOLFSSL_API int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest); WOLFSSL_API int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest);
#define WOLFSSL_EVP_CIPH_MODE 0xF0007 #define EVP_CIPH_STREAM_CIPHER WOLFSSL_EVP_CIPH_STREAM_CIPHER
#define EVP_CIPH_ECB_MODE WOLFSSL_EVP_CIPH_ECB_MODE
#define EVP_CIPH_CBC_MODE WOLFSSL_EVP_CIPH_CBC_MODE
#define EVP_CIPH_CFB_MODE WOLFSSL_EVP_CIPH_CFB_MODE
#define EVP_CIPH_OFB_MODE WOLFSSL_EVP_CIPH_OFB_MODE
#define EVP_CIPH_CTR_MODE WOLFSSL_EVP_CIPH_CTR_MODE
#define EVP_CIPH_GCM_MODE WOLFSSL_EVP_CIPH_GCM_MODE
#define EVP_CIPH_CCM_MODE WOLFSSL_EVP_CIPH_CCM_MODE
#define WOLFSSL_EVP_CIPH_MODE 0x0007
#define WOLFSSL_EVP_CIPH_STREAM_CIPHER 0x0 #define WOLFSSL_EVP_CIPH_STREAM_CIPHER 0x0
#define WOLFSSL_EVP_CIPH_ECB_MODE 0x1 #define WOLFSSL_EVP_CIPH_ECB_MODE 0x1
#define WOLFSSL_EVP_CIPH_CBC_MODE 0x2 #define WOLFSSL_EVP_CIPH_CBC_MODE 0x2
@ -298,8 +308,6 @@ WOLFSSL_API int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest);
#define WOLFSSL_EVP_CIPH_CCM_MODE 0x7 #define WOLFSSL_EVP_CIPH_CCM_MODE 0x7
#define WOLFSSL_EVP_CIPH_NO_PADDING 0x100 #define WOLFSSL_EVP_CIPH_NO_PADDING 0x100
#define wolfSSL_EVP_CIPHER_CTX_flags(c) wolfSSL_EVP_CIPHER_flags(WOLFSSL_EVP_CIPHER_CTX_cipher(c))
/* end OpenSSH compat */ /* end OpenSSH compat */
typedef WOLFSSL_EVP_MD EVP_MD; typedef WOLFSSL_EVP_MD EVP_MD;
@ -360,6 +368,8 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
#define EVP_CIPHER_CTX_iv_length wolfSSL_EVP_CIPHER_CTX_iv_length #define EVP_CIPHER_CTX_iv_length wolfSSL_EVP_CIPHER_CTX_iv_length
#define EVP_CIPHER_CTX_key_length wolfSSL_EVP_CIPHER_CTX_key_length #define EVP_CIPHER_CTX_key_length wolfSSL_EVP_CIPHER_CTX_key_length
#define EVP_CIPHER_CTX_set_key_length wolfSSL_EVP_CIPHER_CTX_set_key_length #define EVP_CIPHER_CTX_set_key_length wolfSSL_EVP_CIPHER_CTX_set_key_length
#define EVP_CIPHER_CTX_mode wolfSSL_EVP_CIPHER_CTX_mode
#define EVP_CipherInit wolfSSL_EVP_CipherInit #define EVP_CipherInit wolfSSL_EVP_CipherInit
#define EVP_CipherInit_ex wolfSSL_EVP_CipherInit_ex #define EVP_CipherInit_ex wolfSSL_EVP_CipherInit_ex
#define EVP_EncryptInit wolfSSL_EVP_EncryptInit #define EVP_EncryptInit wolfSSL_EVP_EncryptInit