mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-22 16:45:41 +01:00
Add cipher abstraction and test cases for OFB block mode
Adds OFB as additional block mode in the cipher abstraction, and additional test cases for that block mode.
This commit is contained in:
parent
0301884f00
commit
8c0fd1e881
@ -5,6 +5,8 @@ mbed TLS ChangeLog (Sorted per branch, date)
|
||||
Features
|
||||
* Add support for ARIA cipher (RFC 5794) and associated TLS ciphersuites
|
||||
(RFC 6209). Disabled by default, see MBEDTLS_ARIA_C in config.h
|
||||
* Add additional block mode, OFB (Output Feedback), to the AES module and
|
||||
cipher abstraction module.
|
||||
|
||||
API Changes
|
||||
* Extend the platform module with a util component that contains
|
||||
|
@ -164,6 +164,9 @@ typedef enum {
|
||||
MBEDTLS_CIPHER_ARIA_128_CCM, /**< Aria cipher with 128-bit key and CCM mode. */
|
||||
MBEDTLS_CIPHER_ARIA_192_CCM, /**< Aria cipher with 192-bit key and CCM mode. */
|
||||
MBEDTLS_CIPHER_ARIA_256_CCM, /**< Aria cipher with 256-bit key and CCM mode. */
|
||||
MBEDTLS_CIPHER_AES_128_OFB,
|
||||
MBEDTLS_CIPHER_AES_192_OFB,
|
||||
MBEDTLS_CIPHER_AES_256_OFB
|
||||
} mbedtls_cipher_type_t;
|
||||
|
||||
/** Supported cipher modes. */
|
||||
|
@ -59,11 +59,20 @@ struct mbedtls_cipher_base_t
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
/** Encrypt using CFB (Full length) */
|
||||
|
||||
int (*cfb_func)( void *ctx, mbedtls_operation_t mode, size_t length, size_t *iv_off,
|
||||
unsigned char *iv, const unsigned char *input,
|
||||
unsigned char *output );
|
||||
#endif
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
/** Encrypt using OFB (Full length) */
|
||||
int (*ofb_func)( void *ctx, size_t length, size_t *iv_off,
|
||||
unsigned char *iv,
|
||||
const unsigned char *input,
|
||||
unsigned char *output );
|
||||
#endif
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
/** Encrypt using CTR */
|
||||
int (*ctr_func)( void *ctx, size_t length, size_t *nc_off,
|
||||
|
@ -191,10 +191,11 @@ int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, const unsigned char *k
|
||||
ctx->operation = operation;
|
||||
|
||||
/*
|
||||
* For CFB and CTR mode always use the encryption key schedule
|
||||
* For OFB, CFB and CTR mode always use the encryption key schedule
|
||||
*/
|
||||
if( MBEDTLS_ENCRYPT == operation ||
|
||||
MBEDTLS_MODE_CFB == ctx->cipher_info->mode ||
|
||||
MBEDTLS_MODE_OFB == ctx->cipher_info->mode ||
|
||||
MBEDTLS_MODE_CTR == ctx->cipher_info->mode )
|
||||
{
|
||||
return ctx->cipher_info->base->setkey_enc_func( ctx->cipher_ctx, key,
|
||||
@ -424,6 +425,21 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
|
||||
}
|
||||
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
if( ctx->cipher_info->mode == MBEDTLS_MODE_OFB )
|
||||
{
|
||||
if( 0 != ( ret = ctx->cipher_info->base->ofb_func( ctx->cipher_ctx,
|
||||
ilen, &ctx->unprocessed_len, ctx->iv, input, output ) ) )
|
||||
{
|
||||
return( ret );
|
||||
}
|
||||
|
||||
*olen = ilen;
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
#endif /* MBEDTLS_CIPHER_MODE_OFB */
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
if( ctx->cipher_info->mode == MBEDTLS_MODE_CTR )
|
||||
{
|
||||
@ -639,6 +655,7 @@ int mbedtls_cipher_finish( mbedtls_cipher_context_t *ctx,
|
||||
*olen = 0;
|
||||
|
||||
if( MBEDTLS_MODE_CFB == ctx->cipher_info->mode ||
|
||||
MBEDTLS_MODE_OFB == ctx->cipher_info->mode ||
|
||||
MBEDTLS_MODE_CTR == ctx->cipher_info->mode ||
|
||||
MBEDTLS_MODE_GCM == ctx->cipher_info->mode ||
|
||||
MBEDTLS_MODE_STREAM == ctx->cipher_info->mode )
|
||||
|
@ -142,6 +142,15 @@ static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation,
|
||||
}
|
||||
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
static int aes_crypt_ofb_wrap( void *ctx, size_t length, size_t *iv_off,
|
||||
unsigned char *iv, const unsigned char *input, unsigned char *output )
|
||||
{
|
||||
return mbedtls_aes_crypt_ofb( (mbedtls_aes_context *) ctx, length, iv_off,
|
||||
iv, input, output );
|
||||
}
|
||||
#endif /* MBEDTLS_CIPHER_MODE_OFB */
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off,
|
||||
unsigned char *nonce_counter, unsigned char *stream_block,
|
||||
@ -191,6 +200,9 @@ static const mbedtls_cipher_base_t aes_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
aes_crypt_cfb128_wrap,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
aes_crypt_ofb_wrap,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
aes_crypt_ctr_wrap,
|
||||
#endif
|
||||
@ -306,6 +318,41 @@ static const mbedtls_cipher_info_t aes_256_cfb128_info = {
|
||||
};
|
||||
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
static const mbedtls_cipher_info_t aes_128_ofb_info = {
|
||||
MBEDTLS_CIPHER_AES_128_OFB,
|
||||
MBEDTLS_MODE_OFB,
|
||||
128,
|
||||
"AES-128-OFB",
|
||||
16,
|
||||
0,
|
||||
16,
|
||||
&aes_info
|
||||
};
|
||||
|
||||
static const mbedtls_cipher_info_t aes_192_ofb_info = {
|
||||
MBEDTLS_CIPHER_AES_192_OFB,
|
||||
MBEDTLS_MODE_OFB,
|
||||
192,
|
||||
"AES-192-OFB",
|
||||
16,
|
||||
0,
|
||||
16,
|
||||
&aes_info
|
||||
};
|
||||
|
||||
static const mbedtls_cipher_info_t aes_256_ofb_info = {
|
||||
MBEDTLS_CIPHER_AES_256_OFB,
|
||||
MBEDTLS_MODE_OFB,
|
||||
256,
|
||||
"AES-256-OFB",
|
||||
16,
|
||||
0,
|
||||
16,
|
||||
&aes_info
|
||||
};
|
||||
#endif /* MBEDTLS_CIPHER_MODE_OFB */
|
||||
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
static const mbedtls_cipher_info_t aes_128_ctr_info = {
|
||||
MBEDTLS_CIPHER_AES_128_CTR,
|
||||
@ -358,6 +405,9 @@ static const mbedtls_cipher_base_t gcm_aes_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -421,6 +471,9 @@ static const mbedtls_cipher_base_t ccm_aes_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -548,6 +601,9 @@ static const mbedtls_cipher_base_t camellia_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
camellia_crypt_cfb128_wrap,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
camellia_crypt_ctr_wrap,
|
||||
#endif
|
||||
@ -715,6 +771,9 @@ static const mbedtls_cipher_base_t gcm_camellia_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -778,6 +837,9 @@ static const mbedtls_cipher_base_t ccm_camellia_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -1312,6 +1374,9 @@ static const mbedtls_cipher_base_t des_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -1357,6 +1422,9 @@ static const mbedtls_cipher_base_t des_ede_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -1402,6 +1470,9 @@ static const mbedtls_cipher_base_t des_ede3_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -1511,6 +1582,9 @@ static const mbedtls_cipher_base_t blowfish_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
blowfish_crypt_cfb64_wrap,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
blowfish_crypt_ctr_wrap,
|
||||
#endif
|
||||
@ -1621,6 +1695,9 @@ static const mbedtls_cipher_base_t arc4_base_info = {
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
NULL,
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
NULL,
|
||||
#endif
|
||||
@ -1724,6 +1801,11 @@ const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
|
||||
{ MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
|
||||
{ MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
||||
{ MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
|
||||
{ MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
|
||||
{ MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
|
||||
#endif
|
||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
||||
{ MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
|
||||
{ MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
|
||||
|
@ -474,6 +474,110 @@ AES-128 CFB - Encrypt and decrypt 32 bytes in multiple parts 1
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_CFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_CFB128:128:16:16:-1:16:16:16:16
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 0 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:0:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 1 byte
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:1:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 2 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:2:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 7 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:7:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 8 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:8:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 9 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:9:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 15 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:15:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 16 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:16:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 17 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:17:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 31 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:31:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 32 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:32:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 32 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:33:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 47 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:47:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 48 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:48:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 49 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_OFB:"AES-128-OFB":128:49:-1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 0 bytes in multiple parts
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:0:0:-1:0:0:0:0
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 1 bytes in multiple parts 1
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:1:0:-1:1:0:1:0
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 1 bytes in multiple parts 2
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:0:1:-1:0:1:0:1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 1
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:16:0:-1:16:0:16:0
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 2
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:0:16:-1:0:16:0:16
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 3
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:1:15:-1:1:15:1:15
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 4
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:15:1:-1:15:1:15:1
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 22 bytes in multiple parts 1
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:15:7:-1:15:7:15:7
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 22 bytes in multiple parts 2
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:16:6:-1:16:6:16:6
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 23 bytes in multiple parts 1
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:17:6:-1:17:6:17:6
|
||||
|
||||
AES-128 OFB - Encrypt and decrypt 32 bytes in multiple parts 1
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_OFB
|
||||
enc_dec_buf_multipart:MBEDTLS_CIPHER_AES_128_OFB:128:16:16:-1:16:16:16:16
|
||||
|
||||
AES-128 CTR - Encrypt and decrypt 0 bytes
|
||||
depends_on:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_CTR
|
||||
enc_dec_buf:MBEDTLS_CIPHER_AES_128_CTR:"AES-128-CTR":128:0:-1
|
||||
|
Loading…
Reference in New Issue
Block a user