diff options
Diffstat (limited to 'thirdparty/mbedtls/library/camellia.c')
-rw-r--r-- | thirdparty/mbedtls/library/camellia.c | 70 |
1 files changed, 26 insertions, 44 deletions
diff --git a/thirdparty/mbedtls/library/camellia.c b/thirdparty/mbedtls/library/camellia.c index bd76ea874f..b1c0a08ca2 100644 --- a/thirdparty/mbedtls/library/camellia.c +++ b/thirdparty/mbedtls/library/camellia.c @@ -24,12 +24,6 @@ #if !defined(MBEDTLS_CAMELLIA_ALT) -/* Parameter validation macros */ -#define CAMELLIA_VALIDATE_RET(cond) \ - MBEDTLS_INTERNAL_VALIDATE_RET(cond, MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA) -#define CAMELLIA_VALIDATE(cond) \ - MBEDTLS_INTERNAL_VALIDATE(cond) - static const unsigned char SIGMA_CHARS[6][8] = { { 0xa0, 0x9e, 0x66, 0x7f, 0x3b, 0xcc, 0x90, 0x8b }, @@ -279,7 +273,6 @@ static void camellia_feistel(const uint32_t x[2], const uint32_t k[2], void mbedtls_camellia_init(mbedtls_camellia_context *ctx) { - CAMELLIA_VALIDATE(ctx != NULL); memset(ctx, 0, sizeof(mbedtls_camellia_context)); } @@ -307,9 +300,6 @@ int mbedtls_camellia_setkey_enc(mbedtls_camellia_context *ctx, uint32_t KC[16]; uint32_t TK[20]; - CAMELLIA_VALIDATE_RET(ctx != NULL); - CAMELLIA_VALIDATE_RET(key != NULL); - RK = ctx->rk; memset(t, 0, 64); @@ -409,6 +399,7 @@ int mbedtls_camellia_setkey_enc(mbedtls_camellia_context *ctx, /* * Camellia key schedule (decryption) */ +#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT) int mbedtls_camellia_setkey_dec(mbedtls_camellia_context *ctx, const unsigned char *key, unsigned int keybits) @@ -418,8 +409,6 @@ int mbedtls_camellia_setkey_dec(mbedtls_camellia_context *ctx, mbedtls_camellia_context cty; uint32_t *RK; uint32_t *SK; - CAMELLIA_VALIDATE_RET(ctx != NULL); - CAMELLIA_VALIDATE_RET(key != NULL); mbedtls_camellia_init(&cty); @@ -456,6 +445,7 @@ exit: return ret; } +#endif /* !MBEDTLS_BLOCK_CIPHER_NO_DECRYPT */ /* * Camellia-ECB block encryption/decryption @@ -467,11 +457,9 @@ int mbedtls_camellia_crypt_ecb(mbedtls_camellia_context *ctx, { int NR; uint32_t *RK, X[4]; - CAMELLIA_VALIDATE_RET(ctx != NULL); - CAMELLIA_VALIDATE_RET(mode == MBEDTLS_CAMELLIA_ENCRYPT || - mode == MBEDTLS_CAMELLIA_DECRYPT); - CAMELLIA_VALIDATE_RET(input != NULL); - CAMELLIA_VALIDATE_RET(output != NULL); + if (mode != MBEDTLS_CAMELLIA_ENCRYPT && mode != MBEDTLS_CAMELLIA_DECRYPT) { + return MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA; + } ((void) mode); @@ -535,14 +523,10 @@ int mbedtls_camellia_crypt_cbc(mbedtls_camellia_context *ctx, const unsigned char *input, unsigned char *output) { - int i; unsigned char temp[16]; - CAMELLIA_VALIDATE_RET(ctx != NULL); - CAMELLIA_VALIDATE_RET(mode == MBEDTLS_CAMELLIA_ENCRYPT || - mode == MBEDTLS_CAMELLIA_DECRYPT); - CAMELLIA_VALIDATE_RET(iv != NULL); - CAMELLIA_VALIDATE_RET(length == 0 || input != NULL); - CAMELLIA_VALIDATE_RET(length == 0 || output != NULL); + if (mode != MBEDTLS_CAMELLIA_ENCRYPT && mode != MBEDTLS_CAMELLIA_DECRYPT) { + return MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA; + } if (length % 16) { return MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH; @@ -553,9 +537,7 @@ int mbedtls_camellia_crypt_cbc(mbedtls_camellia_context *ctx, memcpy(temp, input, 16); mbedtls_camellia_crypt_ecb(ctx, mode, input, output); - for (i = 0; i < 16; i++) { - output[i] = (unsigned char) (output[i] ^ iv[i]); - } + mbedtls_xor(output, output, iv, 16); memcpy(iv, temp, 16); @@ -565,9 +547,7 @@ int mbedtls_camellia_crypt_cbc(mbedtls_camellia_context *ctx, } } else { while (length > 0) { - for (i = 0; i < 16; i++) { - output[i] = (unsigned char) (input[i] ^ iv[i]); - } + mbedtls_xor(output, input, iv, 16); mbedtls_camellia_crypt_ecb(ctx, mode, output, output); memcpy(iv, output, 16); @@ -596,13 +576,9 @@ int mbedtls_camellia_crypt_cfb128(mbedtls_camellia_context *ctx, { int c; size_t n; - CAMELLIA_VALIDATE_RET(ctx != NULL); - CAMELLIA_VALIDATE_RET(mode == MBEDTLS_CAMELLIA_ENCRYPT || - mode == MBEDTLS_CAMELLIA_DECRYPT); - CAMELLIA_VALIDATE_RET(iv != NULL); - CAMELLIA_VALIDATE_RET(iv_off != NULL); - CAMELLIA_VALIDATE_RET(length == 0 || input != NULL); - CAMELLIA_VALIDATE_RET(length == 0 || output != NULL); + if (mode != MBEDTLS_CAMELLIA_ENCRYPT && mode != MBEDTLS_CAMELLIA_DECRYPT) { + return MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA; + } n = *iv_off; if (n >= 16) { @@ -653,12 +629,6 @@ int mbedtls_camellia_crypt_ctr(mbedtls_camellia_context *ctx, { int c, i; size_t n; - CAMELLIA_VALIDATE_RET(ctx != NULL); - CAMELLIA_VALIDATE_RET(nonce_counter != NULL); - CAMELLIA_VALIDATE_RET(stream_block != NULL); - CAMELLIA_VALIDATE_RET(nc_off != NULL); - CAMELLIA_VALIDATE_RET(length == 0 || input != NULL); - CAMELLIA_VALIDATE_RET(length == 0 || output != NULL); n = *nc_off; if (n >= 16) { @@ -920,14 +890,26 @@ int mbedtls_camellia_self_test(int verbose) (v == MBEDTLS_CAMELLIA_DECRYPT) ? "dec" : "enc"); } +#if defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT) + if (v == MBEDTLS_CAMELLIA_DECRYPT) { + if (verbose != 0) { + mbedtls_printf("skipped\n"); + } + continue; + } +#endif + for (i = 0; i < CAMELLIA_TESTS_ECB; i++) { memcpy(key, camellia_test_ecb_key[u][i], 16 + 8 * u); +#if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT) if (v == MBEDTLS_CAMELLIA_DECRYPT) { mbedtls_camellia_setkey_dec(&ctx, key, 128 + u * 64); memcpy(src, camellia_test_ecb_cipher[u][i], 16); memcpy(dst, camellia_test_ecb_plain[i], 16); - } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ + } else +#endif + { /* MBEDTLS_CAMELLIA_ENCRYPT */ mbedtls_camellia_setkey_enc(&ctx, key, 128 + u * 64); memcpy(src, camellia_test_ecb_plain[i], 16); memcpy(dst, camellia_test_ecb_cipher[u][i], 16); |