1a8e1175bSopenharmony_ci/* BEGIN_HEADER */ 2a8e1175bSopenharmony_ci#include "mbedtls/camellia.h" 3a8e1175bSopenharmony_ci/* END_HEADER */ 4a8e1175bSopenharmony_ci 5a8e1175bSopenharmony_ci/* BEGIN_DEPENDENCIES 6a8e1175bSopenharmony_ci * depends_on:MBEDTLS_CAMELLIA_C 7a8e1175bSopenharmony_ci * END_DEPENDENCIES 8a8e1175bSopenharmony_ci */ 9a8e1175bSopenharmony_ci 10a8e1175bSopenharmony_ci/* BEGIN_CASE */ 11a8e1175bSopenharmony_civoid camellia_invalid_param() 12a8e1175bSopenharmony_ci{ 13a8e1175bSopenharmony_ci mbedtls_camellia_context ctx; 14a8e1175bSopenharmony_ci unsigned char buf[16] = { 0 }; 15a8e1175bSopenharmony_ci const int invalid_mode = 42; 16a8e1175bSopenharmony_ci size_t off; 17a8e1175bSopenharmony_ci ((void) off); 18a8e1175bSopenharmony_ci 19a8e1175bSopenharmony_ci TEST_EQUAL(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA, 20a8e1175bSopenharmony_ci mbedtls_camellia_crypt_ecb(&ctx, 21a8e1175bSopenharmony_ci invalid_mode, 22a8e1175bSopenharmony_ci buf, buf)); 23a8e1175bSopenharmony_ci 24a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_MODE_CBC) 25a8e1175bSopenharmony_ci TEST_EQUAL(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA, 26a8e1175bSopenharmony_ci mbedtls_camellia_crypt_cbc(&ctx, 27a8e1175bSopenharmony_ci invalid_mode, 28a8e1175bSopenharmony_ci sizeof(buf), 29a8e1175bSopenharmony_ci buf, buf, buf)); 30a8e1175bSopenharmony_ci#endif /* MBEDTLS_CIPHER_MODE_CBC */ 31a8e1175bSopenharmony_ci 32a8e1175bSopenharmony_ci#if defined(MBEDTLS_CIPHER_MODE_CFB) 33a8e1175bSopenharmony_ci TEST_EQUAL(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA, 34a8e1175bSopenharmony_ci mbedtls_camellia_crypt_cfb128(&ctx, 35a8e1175bSopenharmony_ci invalid_mode, 36a8e1175bSopenharmony_ci sizeof(buf), 37a8e1175bSopenharmony_ci &off, buf, 38a8e1175bSopenharmony_ci buf, buf)); 39a8e1175bSopenharmony_ci#endif /* MBEDTLS_CIPHER_MODE_CFB */ 40a8e1175bSopenharmony_ci 41a8e1175bSopenharmony_ciexit: 42a8e1175bSopenharmony_ci return; 43a8e1175bSopenharmony_ci} 44a8e1175bSopenharmony_ci/* END_CASE */ 45a8e1175bSopenharmony_ci 46a8e1175bSopenharmony_ci/* BEGIN_CASE */ 47a8e1175bSopenharmony_civoid camellia_encrypt_ecb(data_t *key_str, data_t *src_str, 48a8e1175bSopenharmony_ci data_t *dst, int setkey_result) 49a8e1175bSopenharmony_ci{ 50a8e1175bSopenharmony_ci unsigned char output[100]; 51a8e1175bSopenharmony_ci mbedtls_camellia_context ctx; 52a8e1175bSopenharmony_ci 53a8e1175bSopenharmony_ci memset(output, 0x00, 100); 54a8e1175bSopenharmony_ci mbedtls_camellia_init(&ctx); 55a8e1175bSopenharmony_ci 56a8e1175bSopenharmony_ci 57a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8) == setkey_result); 58a8e1175bSopenharmony_ci if (setkey_result == 0) { 59a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_crypt_ecb(&ctx, MBEDTLS_CAMELLIA_ENCRYPT, src_str->x, 60a8e1175bSopenharmony_ci output) == 0); 61a8e1175bSopenharmony_ci 62a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0); 63a8e1175bSopenharmony_ci } 64a8e1175bSopenharmony_ci 65a8e1175bSopenharmony_ciexit: 66a8e1175bSopenharmony_ci mbedtls_camellia_free(&ctx); 67a8e1175bSopenharmony_ci} 68a8e1175bSopenharmony_ci/* END_CASE */ 69a8e1175bSopenharmony_ci 70a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:!MBEDTLS_BLOCK_CIPHER_NO_DECRYPT */ 71a8e1175bSopenharmony_civoid camellia_decrypt_ecb(data_t *key_str, data_t *src_str, 72a8e1175bSopenharmony_ci data_t *dst, int setkey_result) 73a8e1175bSopenharmony_ci{ 74a8e1175bSopenharmony_ci unsigned char output[100]; 75a8e1175bSopenharmony_ci mbedtls_camellia_context ctx; 76a8e1175bSopenharmony_ci 77a8e1175bSopenharmony_ci memset(output, 0x00, 100); 78a8e1175bSopenharmony_ci mbedtls_camellia_init(&ctx); 79a8e1175bSopenharmony_ci 80a8e1175bSopenharmony_ci 81a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_setkey_dec(&ctx, key_str->x, key_str->len * 8) == setkey_result); 82a8e1175bSopenharmony_ci if (setkey_result == 0) { 83a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_crypt_ecb(&ctx, MBEDTLS_CAMELLIA_DECRYPT, src_str->x, 84a8e1175bSopenharmony_ci output) == 0); 85a8e1175bSopenharmony_ci 86a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0); 87a8e1175bSopenharmony_ci } 88a8e1175bSopenharmony_ci 89a8e1175bSopenharmony_ciexit: 90a8e1175bSopenharmony_ci mbedtls_camellia_free(&ctx); 91a8e1175bSopenharmony_ci} 92a8e1175bSopenharmony_ci/* END_CASE */ 93a8e1175bSopenharmony_ci 94a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */ 95a8e1175bSopenharmony_civoid camellia_encrypt_cbc(data_t *key_str, data_t *iv_str, 96a8e1175bSopenharmony_ci data_t *src_str, data_t *dst, int cbc_result) 97a8e1175bSopenharmony_ci{ 98a8e1175bSopenharmony_ci unsigned char output[100]; 99a8e1175bSopenharmony_ci mbedtls_camellia_context ctx; 100a8e1175bSopenharmony_ci 101a8e1175bSopenharmony_ci memset(output, 0x00, 100); 102a8e1175bSopenharmony_ci mbedtls_camellia_init(&ctx); 103a8e1175bSopenharmony_ci 104a8e1175bSopenharmony_ci 105a8e1175bSopenharmony_ci mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8); 106a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_crypt_cbc(&ctx, MBEDTLS_CAMELLIA_ENCRYPT, src_str->len, iv_str->x, 107a8e1175bSopenharmony_ci src_str->x, output) == cbc_result); 108a8e1175bSopenharmony_ci if (cbc_result == 0) { 109a8e1175bSopenharmony_ci 110a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len, 111a8e1175bSopenharmony_ci dst->len) == 0); 112a8e1175bSopenharmony_ci } 113a8e1175bSopenharmony_ci 114a8e1175bSopenharmony_ciexit: 115a8e1175bSopenharmony_ci mbedtls_camellia_free(&ctx); 116a8e1175bSopenharmony_ci} 117a8e1175bSopenharmony_ci/* END_CASE */ 118a8e1175bSopenharmony_ci 119a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */ 120a8e1175bSopenharmony_civoid camellia_decrypt_cbc(data_t *key_str, data_t *iv_str, 121a8e1175bSopenharmony_ci data_t *src_str, data_t *dst, 122a8e1175bSopenharmony_ci int cbc_result) 123a8e1175bSopenharmony_ci{ 124a8e1175bSopenharmony_ci unsigned char output[100]; 125a8e1175bSopenharmony_ci mbedtls_camellia_context ctx; 126a8e1175bSopenharmony_ci 127a8e1175bSopenharmony_ci memset(output, 0x00, 100); 128a8e1175bSopenharmony_ci mbedtls_camellia_init(&ctx); 129a8e1175bSopenharmony_ci 130a8e1175bSopenharmony_ci 131a8e1175bSopenharmony_ci mbedtls_camellia_setkey_dec(&ctx, key_str->x, key_str->len * 8); 132a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_crypt_cbc(&ctx, MBEDTLS_CAMELLIA_DECRYPT, src_str->len, iv_str->x, 133a8e1175bSopenharmony_ci src_str->x, output) == cbc_result); 134a8e1175bSopenharmony_ci if (cbc_result == 0) { 135a8e1175bSopenharmony_ci 136a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, src_str->len, 137a8e1175bSopenharmony_ci dst->len) == 0); 138a8e1175bSopenharmony_ci } 139a8e1175bSopenharmony_ci 140a8e1175bSopenharmony_ciexit: 141a8e1175bSopenharmony_ci mbedtls_camellia_free(&ctx); 142a8e1175bSopenharmony_ci} 143a8e1175bSopenharmony_ci/* END_CASE */ 144a8e1175bSopenharmony_ci 145a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */ 146a8e1175bSopenharmony_civoid camellia_encrypt_cfb128(data_t *key_str, data_t *iv_str, 147a8e1175bSopenharmony_ci data_t *src_str, data_t *dst) 148a8e1175bSopenharmony_ci{ 149a8e1175bSopenharmony_ci unsigned char output[100]; 150a8e1175bSopenharmony_ci mbedtls_camellia_context ctx; 151a8e1175bSopenharmony_ci size_t iv_offset = 0; 152a8e1175bSopenharmony_ci 153a8e1175bSopenharmony_ci memset(output, 0x00, 100); 154a8e1175bSopenharmony_ci mbedtls_camellia_init(&ctx); 155a8e1175bSopenharmony_ci 156a8e1175bSopenharmony_ci 157a8e1175bSopenharmony_ci mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8); 158a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_crypt_cfb128(&ctx, MBEDTLS_CAMELLIA_ENCRYPT, 16, &iv_offset, 159a8e1175bSopenharmony_ci iv_str->x, src_str->x, output) == 0); 160a8e1175bSopenharmony_ci 161a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0); 162a8e1175bSopenharmony_ci 163a8e1175bSopenharmony_ciexit: 164a8e1175bSopenharmony_ci mbedtls_camellia_free(&ctx); 165a8e1175bSopenharmony_ci} 166a8e1175bSopenharmony_ci/* END_CASE */ 167a8e1175bSopenharmony_ci 168a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CFB */ 169a8e1175bSopenharmony_civoid camellia_decrypt_cfb128(data_t *key_str, data_t *iv_str, 170a8e1175bSopenharmony_ci data_t *src_str, 171a8e1175bSopenharmony_ci data_t *dst) 172a8e1175bSopenharmony_ci{ 173a8e1175bSopenharmony_ci unsigned char output[100]; 174a8e1175bSopenharmony_ci mbedtls_camellia_context ctx; 175a8e1175bSopenharmony_ci size_t iv_offset = 0; 176a8e1175bSopenharmony_ci 177a8e1175bSopenharmony_ci memset(output, 0x00, 100); 178a8e1175bSopenharmony_ci mbedtls_camellia_init(&ctx); 179a8e1175bSopenharmony_ci 180a8e1175bSopenharmony_ci 181a8e1175bSopenharmony_ci mbedtls_camellia_setkey_enc(&ctx, key_str->x, key_str->len * 8); 182a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_crypt_cfb128(&ctx, MBEDTLS_CAMELLIA_DECRYPT, 16, &iv_offset, 183a8e1175bSopenharmony_ci iv_str->x, src_str->x, output) == 0); 184a8e1175bSopenharmony_ci 185a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_test_hexcmp(output, dst->x, 16, dst->len) == 0); 186a8e1175bSopenharmony_ci 187a8e1175bSopenharmony_ciexit: 188a8e1175bSopenharmony_ci mbedtls_camellia_free(&ctx); 189a8e1175bSopenharmony_ci} 190a8e1175bSopenharmony_ci/* END_CASE */ 191a8e1175bSopenharmony_ci 192a8e1175bSopenharmony_ci/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ 193a8e1175bSopenharmony_civoid camellia_selftest() 194a8e1175bSopenharmony_ci{ 195a8e1175bSopenharmony_ci TEST_ASSERT(mbedtls_camellia_self_test(1) == 0); 196a8e1175bSopenharmony_ci} 197a8e1175bSopenharmony_ci/* END_CASE */ 198