From 1e604a4c1912ddd1b02d3bea7803b04dbc53120b Mon Sep 17 00:00:00 2001 From: Dariusz Michaluk Date: Tue, 11 Oct 2016 12:07:40 +0200 Subject: [PATCH] YACA: Add more yaca encrypt API tests. Change-Id: I130af9321ac13f3f82cf17412c11e15c4da1c1d2 --- src/yaca/yaca-test-encrypt.cpp | 139 +++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) diff --git a/src/yaca/yaca-test-encrypt.cpp b/src/yaca/yaca-test-encrypt.cpp index 60a3ae17..8160afd8 100644 --- a/src/yaca/yaca-test-encrypt.cpp +++ b/src/yaca/yaca-test-encrypt.cpp @@ -747,6 +747,22 @@ RUNNER_TEST(T3075_yaca_key_wrap_unwrap_invalid_param, YacaTest) unwrapped.get(), &unwrapped_len)); } +RUNNER_TEST(T3077_yaca_get_iv_bit_length, YacaTest) +{ + size_t iv_bit_len; + YACA_SUCCESS(yaca_encrypt_get_iv_bit_length(YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_256BIT, + &iv_bit_len)); + YACA_ASSERT_MSG(iv_bit_len == YACA_KEY_LENGTH_IV_128BIT, "Invalid IV bit length."); + + YACA_SUCCESS(yaca_encrypt_get_iv_bit_length(YACA_ENCRYPT_AES, YACA_BCM_ECB, YACA_KEY_LENGTH_256BIT, + &iv_bit_len)); + YACA_ASSERT_MSG(iv_bit_len == 0, "Invalid IV bit length."); + + YACA_SUCCESS(yaca_encrypt_get_iv_bit_length(YACA_ENCRYPT_3DES_3TDEA, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT, + &iv_bit_len)); + YACA_ASSERT_MSG(iv_bit_len == YACA_KEY_LENGTH_IV_64BIT, "Invalid IV bit length."); +} + RUNNER_TEST(T3080_yaca_encrypt_decrypt_init_param_comb, YacaTest) { auto tvv = loadTestVector("encrypt_param_comb.txt"); @@ -1350,3 +1366,126 @@ RUNNER_TEST(T3190_yaca_set_get_ccm_properties_invalid_param, YacaTest) update.get(), &update_len)); YACA_SUCCESS(yaca_decrypt_finalize(dec_ctx.get(), final.get(), &final_len)); } + +RUNNER_TEST(T3200_yaca_set_invalid_gcm_tag_aad, YacaTest) +{ + KeyPtr key = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT); + KeyPtr iv = generate_key(YACA_KEY_TYPE_IV, YACA_KEY_LENGTH_IV_64BIT); + + size_t aad_len = 16; + Buffer aad = random_buffer(aad_len); + size_t tag_len = 12; + ChrPtr tag = create_yaca_buffer(tag_len); + + CtxPtr enc_ctx = encrypt_init(YACA_ENCRYPT_AES, YACA_BCM_GCM, key, iv); + + Buffer encrypt_output; + size_t update_len, final_len; + ChrPtr update = out_buf_alloc(enc_ctx, DATA.size(), update_len); + ChrPtr final = out_buf_alloc(enc_ctx, 0, final_len); + + YACA_SUCCESS(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_GCM_AAD, + aad.data(), aad.size())); + YACA_SUCCESS(yaca_encrypt_update(enc_ctx.get(), DATA.data(), DATA.size(), + update.get(), &update_len)); + YACA_SUCCESS(yaca_encrypt_finalize(enc_ctx.get(), final.get(), &final_len)); + YACA_SUCCESS(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG, + (void**)tag.get(), &tag_len)); + + encrypt_output.insert(encrypt_output.end(), update.get(), update.get() + update_len); + encrypt_output.insert(encrypt_output.end(), final.get(), final.get() + final_len); + + CtxPtr dec_ctx = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_GCM, key, iv); + update = out_buf_alloc(dec_ctx, encrypt_output.size(), update_len); + final = out_buf_alloc(dec_ctx, 0, final_len); + + // Invalid AAD + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_AAD, + tag.get(), aad.size())); + + YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(), + update.get(), &update_len)); + + // Valid TAG + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_TAG, + tag.get(), tag_len)); + + YACA_INVALID_PARAM(yaca_decrypt_finalize(dec_ctx.get(), final.get(), &final_len)); + + dec_ctx = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_GCM, key, iv); + + // Valid AAD + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_AAD, + aad.data(), aad.size())); + + YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(), + update.get(), &update_len)); + + // Invalid TAG + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_TAG, + aad.data(), tag_len)); + + YACA_INVALID_PARAM(yaca_decrypt_finalize(dec_ctx.get(), final.get(), &final_len)); +} + +RUNNER_TEST(T3210_yaca_set_invalid_ccm_tag_aad, YacaTest) +{ + KeyPtr key = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT); + KeyPtr iv = generate_key(YACA_KEY_TYPE_IV, YACA_KEY_LENGTH_IV_64BIT); + + size_t aad_len = 16; + Buffer aad = random_buffer(aad_len); + size_t tag_len = 12; + ChrPtr tag = create_yaca_buffer(tag_len); + + CtxPtr enc_ctx = encrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CCM, key, iv); + + Buffer encrypt_output; + size_t update_len, final_len; + ChrPtr update = out_buf_alloc(enc_ctx, DATA.size(), update_len); + ChrPtr final = out_buf_alloc(enc_ctx, 0, final_len); + + YACA_SUCCESS(yaca_encrypt_update(enc_ctx.get(), NULL, DATA.size(), NULL, &update_len)); + YACA_SUCCESS(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_CCM_AAD, + aad.data(), aad.size())); + YACA_SUCCESS(yaca_encrypt_update(enc_ctx.get(), DATA.data(), DATA.size(), + update.get(), &update_len)); + YACA_SUCCESS(yaca_encrypt_finalize(enc_ctx.get(), final.get(), &final_len)); + YACA_SUCCESS(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG, + (void**)tag.get(), &tag_len)); + + encrypt_output.insert(encrypt_output.end(), update.get(), update.get() + update_len); + encrypt_output.insert(encrypt_output.end(), final.get(), final.get() + final_len); + + CtxPtr dec_ctx = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CCM, key, iv); + update = out_buf_alloc(dec_ctx, encrypt_output.size(), update_len); + final = out_buf_alloc(dec_ctx, 0, final_len); + + // Invalid TAG + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_TAG, + aad.data(), tag_len)); + + // Valid AAD + YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), NULL, encrypt_output.size(), NULL, + &update_len)); + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_AAD, + aad.data(), aad.size())); + + YACA_INVALID_PARAM(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(), + update.get(), &update_len)); + + dec_ctx = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CCM, key, iv); + + // Valid TAG + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_TAG, + tag.get(), tag_len)); + + // Invalid AAD + YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), NULL, encrypt_output.size(), NULL, + &update_len)); + YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_AAD, + tag.get(), aad.size())); + + YACA_INVALID_PARAM(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(), + update.get(), &update_len)); +} -- 2.34.1