Merge pull request #7825 from daverodgman/cipher_wrap_size
Cipher wrap size improvement
This commit is contained in:
commit
3d0c8255aa
15 changed files with 765 additions and 610 deletions
|
@ -270,45 +270,58 @@ typedef struct mbedtls_cmac_context_t mbedtls_cmac_context_t;
|
|||
* mbedtls_cipher_info_from_type(),
|
||||
* mbedtls_cipher_info_from_values(),
|
||||
* mbedtls_cipher_info_from_psa().
|
||||
*
|
||||
* \note Some fields store a value that has been right-shifted to save
|
||||
* code-size, so should not be used directly. The accessor
|
||||
* functions adjust for this and return the "natural" value.
|
||||
*/
|
||||
typedef struct mbedtls_cipher_info_t {
|
||||
/** Full cipher identifier. For example,
|
||||
* MBEDTLS_CIPHER_AES_256_CBC.
|
||||
*/
|
||||
mbedtls_cipher_type_t MBEDTLS_PRIVATE(type);
|
||||
|
||||
/** The cipher mode. For example, MBEDTLS_MODE_CBC. */
|
||||
mbedtls_cipher_mode_t MBEDTLS_PRIVATE(mode);
|
||||
|
||||
/** The cipher key length, in bits. This is the
|
||||
* default length for variable sized ciphers.
|
||||
* Includes parity bits for ciphers like DES.
|
||||
*/
|
||||
unsigned int MBEDTLS_PRIVATE(key_bitlen);
|
||||
|
||||
/** Name of the cipher. */
|
||||
const char *MBEDTLS_PRIVATE(name);
|
||||
|
||||
/** IV or nonce size, in Bytes.
|
||||
/** The block size, in bytes. */
|
||||
unsigned int MBEDTLS_PRIVATE(block_size) : 5;
|
||||
|
||||
/** IV or nonce size, in bytes (right shifted by #MBEDTLS_IV_SIZE_SHIFT).
|
||||
* For ciphers that accept variable IV sizes,
|
||||
* this is the recommended size.
|
||||
*/
|
||||
unsigned int MBEDTLS_PRIVATE(iv_size);
|
||||
unsigned int MBEDTLS_PRIVATE(iv_size) : 3;
|
||||
|
||||
/** The cipher key length, in bits (right shifted by #MBEDTLS_KEY_BITLEN_SHIFT).
|
||||
* This is the default length for variable sized ciphers.
|
||||
* Includes parity bits for ciphers like DES.
|
||||
*/
|
||||
unsigned int MBEDTLS_PRIVATE(key_bitlen) : 4;
|
||||
|
||||
/** The cipher mode (as per mbedtls_cipher_mode_t).
|
||||
* For example, MBEDTLS_MODE_CBC.
|
||||
*/
|
||||
unsigned int MBEDTLS_PRIVATE(mode) : 4;
|
||||
|
||||
/** Full cipher identifier (as per mbedtls_cipher_type_t).
|
||||
* For example, MBEDTLS_CIPHER_AES_256_CBC.
|
||||
*
|
||||
* This could be 7 bits, but 8 bits retains byte alignment for the
|
||||
* next field, which reduces code size to access that field.
|
||||
*/
|
||||
unsigned int MBEDTLS_PRIVATE(type) : 8;
|
||||
|
||||
/** Bitflag comprised of MBEDTLS_CIPHER_VARIABLE_IV_LEN and
|
||||
* MBEDTLS_CIPHER_VARIABLE_KEY_LEN indicating whether the
|
||||
* cipher supports variable IV or variable key sizes, respectively.
|
||||
*/
|
||||
int MBEDTLS_PRIVATE(flags);
|
||||
unsigned int MBEDTLS_PRIVATE(flags) : 2;
|
||||
|
||||
/** The block size, in Bytes. */
|
||||
unsigned int MBEDTLS_PRIVATE(block_size);
|
||||
|
||||
/** Struct for base cipher information and functions. */
|
||||
const mbedtls_cipher_base_t *MBEDTLS_PRIVATE(base);
|
||||
/** Index to LUT for base cipher information and functions. */
|
||||
unsigned int MBEDTLS_PRIVATE(base_idx) : 5;
|
||||
|
||||
} mbedtls_cipher_info_t;
|
||||
|
||||
/* For internal use only.
|
||||
* These are used to more compactly represent the fields above. */
|
||||
#define MBEDTLS_KEY_BITLEN_SHIFT 6
|
||||
#define MBEDTLS_IV_SIZE_SHIFT 2
|
||||
/**
|
||||
* Generic cipher context.
|
||||
*/
|
||||
|
@ -439,7 +452,7 @@ static inline mbedtls_cipher_type_t mbedtls_cipher_info_get_type(
|
|||
if (info == NULL) {
|
||||
return MBEDTLS_CIPHER_NONE;
|
||||
} else {
|
||||
return info->MBEDTLS_PRIVATE(type);
|
||||
return (mbedtls_cipher_type_t) info->MBEDTLS_PRIVATE(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -458,7 +471,7 @@ static inline mbedtls_cipher_mode_t mbedtls_cipher_info_get_mode(
|
|||
if (info == NULL) {
|
||||
return MBEDTLS_MODE_NONE;
|
||||
} else {
|
||||
return info->MBEDTLS_PRIVATE(mode);
|
||||
return (mbedtls_cipher_mode_t) info->MBEDTLS_PRIVATE(mode);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,7 +492,7 @@ static inline size_t mbedtls_cipher_info_get_key_bitlen(
|
|||
if (info == NULL) {
|
||||
return 0;
|
||||
} else {
|
||||
return info->MBEDTLS_PRIVATE(key_bitlen);
|
||||
return info->MBEDTLS_PRIVATE(key_bitlen) << MBEDTLS_KEY_BITLEN_SHIFT;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -521,7 +534,7 @@ static inline size_t mbedtls_cipher_info_get_iv_size(
|
|||
return 0;
|
||||
}
|
||||
|
||||
return (size_t) info->MBEDTLS_PRIVATE(iv_size);
|
||||
return ((size_t) info->MBEDTLS_PRIVATE(iv_size)) << MBEDTLS_IV_SIZE_SHIFT;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -541,7 +554,7 @@ static inline size_t mbedtls_cipher_info_get_block_size(
|
|||
return 0;
|
||||
}
|
||||
|
||||
return (size_t) info->MBEDTLS_PRIVATE(block_size);
|
||||
return (size_t) (info->MBEDTLS_PRIVATE(block_size));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -682,7 +695,7 @@ static inline unsigned int mbedtls_cipher_get_block_size(
|
|||
return 0;
|
||||
}
|
||||
|
||||
return ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(block_size);
|
||||
return (unsigned int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(block_size);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -702,7 +715,7 @@ static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode(
|
|||
return MBEDTLS_MODE_NONE;
|
||||
}
|
||||
|
||||
return ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(mode);
|
||||
return (mbedtls_cipher_mode_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(mode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -727,7 +740,8 @@ static inline int mbedtls_cipher_get_iv_size(
|
|||
return (int) ctx->MBEDTLS_PRIVATE(iv_size);
|
||||
}
|
||||
|
||||
return (int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(iv_size);
|
||||
return (int) (((int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(iv_size)) <<
|
||||
MBEDTLS_IV_SIZE_SHIFT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -747,7 +761,7 @@ static inline mbedtls_cipher_type_t mbedtls_cipher_get_type(
|
|||
return MBEDTLS_CIPHER_NONE;
|
||||
}
|
||||
|
||||
return ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(type);
|
||||
return (mbedtls_cipher_type_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(type);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -788,7 +802,8 @@ static inline int mbedtls_cipher_get_key_bitlen(
|
|||
return MBEDTLS_KEY_LENGTH_NONE;
|
||||
}
|
||||
|
||||
return (int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(key_bitlen);
|
||||
return (int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(key_bitlen) <<
|
||||
MBEDTLS_KEY_BITLEN_SHIFT;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue