void set_padding(yaca_padding_e padding)
{
YACA_SUCCESS(yaca_context_set_property(m_enCtxPtr.get(), YACA_PROPERTY_PADDING,
- (char*)(&padding), sizeof(padding)));
+ (void*)(&padding), sizeof(padding)));
YACA_SUCCESS(yaca_context_set_property(m_decCtxPtr.get(), YACA_PROPERTY_PADDING,
- (char*)(&padding), sizeof(padding)));
+ (void*)(&padding), sizeof(padding)));
}
void set_effective_key_bits(size_t key_bits)
{
YACA_SUCCESS(yaca_context_set_property(m_enCtxPtr.get(), YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
- (char*)(&key_bits), sizeof(key_bits)));
+ (void*)(&key_bits), sizeof(key_bits)));
YACA_SUCCESS(yaca_context_set_property(m_decCtxPtr.get(), YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
- (char*)(&key_bits), sizeof(key_bits)));
+ (void*)(&key_bits), sizeof(key_bits)));
}
int set_tag_len(yaca_block_cipher_mode_e bcm, size_t tag_len)
: null_key();
size_t tag_len = tag.size();
- auto tag_output = create_yaca_buffer(tag_len);
+ char *tag_output;
// encryption
Buffer encrypt_output;
YACA_SUCCESS(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_SUCCESS(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- (void**)tag_output.get(), &tag_len));
+ (void**)&tag_output, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag_output);
YACA_ASSERT_MSG(output.size() == encrypt_output.size(), "Ciphertext size after encrypt differs\n");
YACA_ASSERT_MSG(output == encrypt_output, "Ciphertext after encrypt differs\n");
YACA_ASSERT_MSG(tag.size() == tag_len, "Tag size after encrypt differs\n");
- YACA_ASSERT_MSG(yaca_memcmp(tag.data(), tag_output.get(), tag_len) == YACA_ERROR_NONE,
+ YACA_ASSERT_MSG(yaca_memcmp(tag.data(), tag_output, tag_len) == YACA_ERROR_NONE,
"Tag after encrypt differs\n");
// decryption
: null_key();
size_t tag_len = tag.size();
- auto tag_output = create_yaca_buffer(tag_len);
+ char *tag_output;
// encryption
Buffer encrypt_output;
encrypt_output.insert(encrypt_output.end(), final_ptr.get(), final_ptr.get() + final_len);
YACA_SUCCESS(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- (void**)tag_output.get(), &tag_len));
+ (void**)&tag_output, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag_output);
YACA_ASSERT_MSG(output.size() == encrypt_output.size(), "Ciphertext size after encrypt differs \n");
YACA_ASSERT_MSG(output == encrypt_output, "ciphertext after encrypt differs\n");
YACA_ASSERT_MSG(tag.size() == tag_len, "Tag size after encrypt differs\n");
- YACA_ASSERT_MSG(yaca_memcmp(tag.data(), tag_output.get(), tag_len) == YACA_ERROR_NONE,
+ YACA_ASSERT_MSG(yaca_memcmp(tag.data(), tag_output, tag_len) == YACA_ERROR_NONE,
"Tag after encrypt differs\n");
// decryption
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");
{
KeyIvPair key_iv_pair;
size_t tag_len = 14;
- auto tag = create_yaca_buffer(tag_len);
+ char *tag;
auto aad = random_buffer(16);
Buffer encrypt_output;
Buffer decrypt_output;
auto final_ptr = out_buf_alloc(enc_ctx_ptr, 0, final_len);
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_SUCCESS(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_SUCCESS(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag);
+
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
final_ptr = out_buf_alloc(dec_ctx_ptr, 0, final_len);
YACA_INVALID_PARAM(yaca_context_get_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_get_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- tag.get(), tag_len + 42));
+ tag, tag_len + 42));
- YACA_SUCCESS(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- tag.get(), tag_len));
+ YACA_SUCCESS(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG, tag, tag_len));
YACA_SUCCESS(yaca_decrypt_finalize(dec_ctx_ptr.get(), final_ptr.get(), &final_len));
decrypt_output.insert(decrypt_output.end(), final_ptr.get(), final_ptr.get() + final_len);
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_get_property(dec_ctx_ptr.get(), YACA_PROPERTY_GCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_ASSERT_MSG(DATA.size() == decrypt_output.size(), "Size after encrypt-decrypt differs\n");
YACA_ASSERT_MSG(DATA == decrypt_output, "Text after encrypt-decrypt has changed\n");
KeyPtr key = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT);
KeyPtr iv = generate_key(YACA_KEY_TYPE_IV, YACA_KEY_LENGTH_IV_64BIT);
size_t tag_len = 16;
- auto tag = create_yaca_buffer(tag_len);
+ char *tag;
auto aad = random_buffer(16);
Buffer encrypt_output;
Buffer decrypt_output;
auto final_ptr = out_buf_alloc(enc_ctx_ptr, 0, final_len);
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_SUCCESS(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_SUCCESS(yaca_encrypt_finalize(enc_ctx_ptr.get(), final_ptr.get(), &final_len));
encrypt_output.insert(encrypt_output.end(), final_ptr.get(), final_ptr.get() + final_len);
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_SUCCESS(yaca_context_get_property(enc_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag);
// decryption
auto dec_ctx_ptr = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CCM, key, iv);
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_get_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len + 42));
+ tag, tag_len + 42));
- YACA_SUCCESS(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len));
+ YACA_SUCCESS(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG, tag, tag_len));
YACA_SUCCESS(yaca_decrypt_update(dec_ctx_ptr.get(), NULL, encrypt_output.size(),
NULL, &update_len));
YACA_SUCCESS(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_SUCCESS(yaca_decrypt_update(dec_ctx_ptr.get(), encrypt_output.data(), encrypt_output.size(),
update_ptr.get(), &update_len));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_get_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_SUCCESS(yaca_decrypt_finalize(dec_ctx_ptr.get(), final_ptr.get(), &final_len));
decrypt_output.insert(decrypt_output.end(), final_ptr.get(), final_ptr.get() + final_len);
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_AAD,
aad.data(), aad.size()));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- tag.get(), tag_len));
+ tag, tag_len));
YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG_LEN,
(void*)&tag_len, sizeof(tag_len)));
YACA_INVALID_PARAM(yaca_context_get_property(dec_ctx_ptr.get(), YACA_PROPERTY_CCM_TAG,
- (void**)tag.get(), &tag_len));
+ (void**)&tag, &tag_len));
YACA_ASSERT_MSG(DATA.size() == decrypt_output.size(), "Size after encrypt-decrypt differs\n");
YACA_ASSERT_MSG(DATA == decrypt_output, "Text after encrypt-decrypt has changed\n");
: aes_ccm_test_output(input, algo, bcm, key, iv, aad, tag, output);
}
}
+
+RUNNER_TEST(T3160_yaca_set_get_padding_invalid_param, YacaTest)
+{
+ KeyIvPair key_iv_pair;
+ CtxPtr enc_ctx = encrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CBC,
+ key_iv_pair.key, key_iv_pair.iv);
+
+ yaca_padding_e padding = YACA_PADDING_NONE;
+ size_t padding_len;
+
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), static_cast<yaca_property_e>(-1),
+ (void*)(&padding), sizeof(padding)));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_PADDING,
+ nullptr, sizeof(padding)));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_PADDING,
+ (void*)(&padding), 0));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_PADDING,
+ (void*)(&padding), sizeof(char)));
+
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_PADDING,
+ (void**)(&padding), &padding_len));
+
+ size_t output_len = get_output_length(enc_ctx);
+ Buffer output(output_len);
+ YACA_SUCCESS(yaca_encrypt_finalize(enc_ctx.get(), output.data(), &output_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_PADDING,
+ (void*)(&padding), sizeof(padding)));
+
+ std::vector<yaca_block_cipher_mode_e> bcms = {YACA_BCM_OFB, YACA_BCM_CFB, YACA_BCM_GCM,
+ YACA_BCM_CTR, YACA_BCM_CBC};
+ std::vector<yaca_padding_e> paddings = {YACA_PADDING_PKCS1, YACA_PADDING_PKCS1_PSS,
+ YACA_PADDING_X931, YACA_PADDING_PKCS1_SSLV23,
+ YACA_PADDING_PKCS1_OAEP};
+
+ for (yaca_block_cipher_mode_e bcm : bcms) {
+ enc_ctx = encrypt_init(YACA_ENCRYPT_AES, bcm, key_iv_pair.key, key_iv_pair.iv);
+
+ for (yaca_padding_e padding : paddings) {
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_PADDING,
+ (void*)(&padding), sizeof(padding)));
+ }
+ }
+}
+
+RUNNER_TEST(T3170_yaca_set_get_rc2_key_bits_invalid_param, YacaTest)
+{
+ size_t effective_key_bits;
+ size_t effective_key_bits_len;
+ KeyPtr key = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_UNSAFE_128BIT);
+ CtxPtr enc_ctx = encrypt_init(YACA_ENCRYPT_UNSAFE_RC2, YACA_BCM_ECB, key, null_key());
+
+ effective_key_bits = 0;
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(),
+ YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+ (void*)(&effective_key_bits),
+ sizeof(effective_key_bits)));
+ effective_key_bits = 1025;
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(),
+ YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+ (void*)(&effective_key_bits),
+ sizeof(effective_key_bits)));
+
+ effective_key_bits = 128;
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(),
+ YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+ (void*)(&effective_key_bits), sizeof(char)));
+
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(),
+ YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+ (void**)(&effective_key_bits),
+ &effective_key_bits_len));
+
+ size_t output_len = get_output_length(enc_ctx, DATA.size());
+ Buffer output(output_len);
+ YACA_SUCCESS(yaca_encrypt_update(enc_ctx.get(), DATA.data(), DATA.size(),
+ output.data(), &output_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(),
+ YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+ (void*)(&effective_key_bits),
+ sizeof(effective_key_bits)));
+
+ std::vector<yaca_encrypt_algorithm_e> algos = {YACA_ENCRYPT_AES, YACA_ENCRYPT_UNSAFE_3DES_2TDEA,
+ YACA_ENCRYPT_CAST5};
+
+ for (yaca_encrypt_algorithm_e algo : algos) {
+ enc_ctx = encrypt_init(algo, YACA_BCM_ECB, key, null_key());
+
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(),
+ YACA_PROPERTY_RC2_EFFECTIVE_KEY_BITS,
+ (void*)(&effective_key_bits),
+ sizeof(effective_key_bits)));
+ }
+}
+
+RUNNER_TEST(T3180_yaca_set_get_gcm_properties_invalid_param, 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_128BIT);
+ KeyPtr gcm_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 = 16;
+ char *tag;
+
+ size_t update_len, final_len;
+
+ // CTR
+ CtxPtr enc_ctx = encrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CTR, key, iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_GCM_AAD,
+ aad.data(), aad.size()));
+
+ Buffer encrypt_output;
+ 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(), DATA.data(), DATA.size(),
+ update.get(), &update_len));
+ YACA_SUCCESS(yaca_encrypt_finalize(enc_ctx.get(), final.get(), &final_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);
+
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG_LEN,
+ (void*)(&tag_len), sizeof(tag_len)));
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG,
+ (void**)&tag, &tag_len));
+
+ CtxPtr dec_ctx = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CTR, key, iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_AAD,
+ aad.data(), aad.size()));
+
+ update = out_buf_alloc(dec_ctx, encrypt_output.size(), update_len);
+ final = out_buf_alloc(dec_ctx, 0, final_len);
+
+ YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(),
+ update.get(), &update_len));
+
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_TAG,
+ tag, tag_len));
+
+ YACA_SUCCESS(yaca_decrypt_finalize(dec_ctx.get(), final.get(), &final_len));
+
+ // GCM
+ enc_ctx = encrypt_init(YACA_ENCRYPT_AES, YACA_BCM_GCM, key, gcm_iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_CCM_AAD,
+ aad.data(), aad.size()));
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_GCM_AAD,
+ (void**)aad.data(), &aad_len));
+
+ encrypt_output.clear();
+ update = out_buf_alloc(enc_ctx, DATA.size(), update_len);
+ final = out_buf_alloc(enc_ctx, 0, final_len);
+ 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));
+ encrypt_output.insert(encrypt_output.end(), update.get(), update.get() + update_len);
+ encrypt_output.insert(encrypt_output.end(), final.get(), final.get() + final_len);
+
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG_LEN,
+ (void*)(&tag_len), sizeof(tag_len)));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG_LEN,
+ (void*)(&tag_len), sizeof(char)));
+
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG,
+ (void**)&tag, &tag_len));
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG,
+ nullptr, &tag_len));
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG,
+ (void**)&tag, nullptr));
+
+ YACA_SUCCESS(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG,
+ (void**)&tag, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag);
+
+ dec_ctx = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_GCM, key, gcm_iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_AAD,
+ aad.data(), aad.size()));
+ YACA_INVALID_PARAM(yaca_context_get_property(dec_ctx.get(), YACA_PROPERTY_GCM_AAD,
+ (void**)aad.data(), &aad_len));
+
+ update = out_buf_alloc(dec_ctx, encrypt_output.size(), update_len);
+ final = out_buf_alloc(dec_ctx, 0, final_len);
+
+ YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(),
+ update.get(), &update_len));
+
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_TAG,
+ tag, tag_len));
+
+ YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_TAG, tag, tag_len));
+
+ YACA_SUCCESS(yaca_decrypt_finalize(dec_ctx.get(), final.get(), &final_len));
+}
+
+RUNNER_TEST(T3190_yaca_set_get_ccm_properties_invalid_param, 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;
+ char *tag;
+
+ size_t update_len, final_len;
+
+ // CFB
+ CtxPtr enc_ctx = encrypt_init(YACA_ENCRYPT_3DES_3TDEA, YACA_BCM_CFB, key, iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG_LEN,
+ (void*)(&tag_len), sizeof(tag_len)));
+
+ YACA_INVALID_PARAM(yaca_encrypt_update(enc_ctx.get(), NULL, DATA.size(), NULL, &update_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_CCM_AAD,
+ aad.data(), aad.size()));
+
+ Buffer encrypt_output;
+ 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(), DATA.data(), DATA.size(),
+ update.get(), &update_len));
+ YACA_SUCCESS(yaca_encrypt_finalize(enc_ctx.get(), final.get(), &final_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);
+
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG,
+ (void**)&tag, &tag_len));
+
+ CtxPtr dec_ctx = decrypt_init(YACA_ENCRYPT_3DES_3TDEA, YACA_BCM_CFB, key, iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_TAG,
+ tag, tag_len));
+ YACA_INVALID_PARAM(yaca_decrypt_update(dec_ctx.get(), NULL, encrypt_output.size(), NULL,
+ &update_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_AAD,
+ aad.data(), aad.size()));
+
+ update = out_buf_alloc(dec_ctx, encrypt_output.size(), update_len);
+ final = out_buf_alloc(dec_ctx, 0, final_len);
+
+ YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(),
+ update.get(), &update_len));
+ YACA_SUCCESS(yaca_decrypt_finalize(dec_ctx.get(), final.get(), &final_len));
+
+ // CCM
+ enc_ctx = encrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CCM, key, iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG_LEN,
+ (void*)(&tag_len), sizeof(tag_len)));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG_LEN,
+ (void*)(&tag_len), sizeof(char)));
+
+ YACA_SUCCESS(yaca_encrypt_update(enc_ctx.get(), NULL, DATA.size(), NULL, &update_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_GCM_AAD,
+ aad.data(), aad.size()));
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_CCM_AAD,
+ (void**)aad.data(), &aad_len));
+
+ YACA_SUCCESS(yaca_context_set_property(enc_ctx.get(), YACA_PROPERTY_CCM_AAD,
+ aad.data(), aad.size()));
+
+ encrypt_output.clear();
+ update = out_buf_alloc(enc_ctx, DATA.size(), update_len);
+ final = out_buf_alloc(enc_ctx, 0, final_len);
+ 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));
+ encrypt_output.insert(encrypt_output.end(), update.get(), update.get() + update_len);
+ encrypt_output.insert(encrypt_output.end(), final.get(), final.get() + final_len);
+
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_GCM_TAG,
+ (void**)&tag, &tag_len));
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG,
+ nullptr, &tag_len));
+ YACA_INVALID_PARAM(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG,
+ (void**)&tag, nullptr));
+
+ YACA_SUCCESS(yaca_context_get_property(enc_ctx.get(), YACA_PROPERTY_CCM_TAG,
+ (void**)&tag, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag);
+
+ dec_ctx = decrypt_init(YACA_ENCRYPT_AES, YACA_BCM_CCM, key, iv);
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_TAG,
+ tag, tag_len));
+
+ YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_TAG, tag, tag_len));
+
+ YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), NULL, encrypt_output.size(), NULL,
+ &update_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_GCM_AAD,
+ aad.data(), aad.size()));
+
+ YACA_SUCCESS(yaca_context_set_property(dec_ctx.get(), YACA_PROPERTY_CCM_AAD,
+ aad.data(), aad.size()));
+
+ update = out_buf_alloc(dec_ctx, encrypt_output.size(), update_len);
+ final = out_buf_alloc(dec_ctx, 0, final_len);
+ YACA_SUCCESS(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(),
+ 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 = 16;
+ char *tag;
+
+ 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, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag);
+
+ 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, 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, 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;
+ char *tag;
+
+ 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, &tag_len));
+ ChrPtr tag_ptr = wrap_ptr(tag);
+
+ 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, 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, aad.size()));
+
+ YACA_INVALID_PARAM(yaca_decrypt_update(dec_ctx.get(), encrypt_output.data(), encrypt_output.size(),
+ update.get(), &update_len));
+}
RUNNER_TEST(T6010_yaca_sign_init_invalid_param, YacaTest)
{
yaca_context_h ctx = YACA_CONTEXT_NULL;
- KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
- KeyPtr pub = extract_public_key(prv);
+ KeyPair rsa(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
+ KeyPair dsa(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ KeyPair ec(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP384R1);
KeyPtr sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT);
- YACA_INVALID_PARAM(yaca_sign_initialize(nullptr, YACA_DIGEST_MD5, prv.get()));
- YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, static_cast<yaca_digest_algorithm_e>(-1), prv.get()));
+ YACA_INVALID_PARAM(yaca_sign_initialize(nullptr, YACA_DIGEST_MD5, rsa.prv.get()));
+ YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, static_cast<yaca_digest_algorithm_e>(-1),
+ rsa.prv.get()));
YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, YACA_KEY_NULL));
- YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, pub.get()));
+ YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, rsa.pub.get()));
YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, sym.get()));
+ YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_SHA384, rsa.prv.get()));
+ YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_SHA512, rsa.prv.get()));
+ YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, dsa.prv.get()));
+ YACA_INVALID_PARAM(yaca_sign_initialize(&ctx, YACA_DIGEST_MD5, ec.prv.get()));
}
RUNNER_TEST(T6020_yaca_sign_hmac_init_invalid_param, YacaTest)
RUNNER_TEST(T6060_yaca_verify_init_invalid_param)
{
yaca_context_h ctx = YACA_CONTEXT_NULL;
- KeyPtr prv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
- KeyPtr pub = extract_public_key(prv);
+ KeyPair rsa(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
+ KeyPair dsa(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ KeyPair ec(YACA_KEY_TYPE_EC_PRIV, YACA_KEY_LENGTH_EC_SECP384R1);
KeyPtr sym = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_256BIT);
- YACA_INVALID_PARAM(yaca_verify_initialize(nullptr, YACA_DIGEST_MD5, pub.get()));
- YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, static_cast<yaca_digest_algorithm_e>(-1), prv.get()));
+ YACA_INVALID_PARAM(yaca_verify_initialize(nullptr, YACA_DIGEST_MD5, rsa.pub.get()));
+ YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, static_cast<yaca_digest_algorithm_e>(-1),
+ rsa.prv.get()));
YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, YACA_KEY_NULL));
- YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, prv.get()));
+ YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, rsa.prv.get()));
YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, sym.get()));
+ YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_SHA384, rsa.pub.get()));
+ YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_SHA512, rsa.pub.get()));
+ YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, dsa.pub.get()));
+ YACA_INVALID_PARAM(yaca_verify_initialize(&ctx, YACA_DIGEST_MD5, ec.pub.get()));
}
RUNNER_TEST(T6070_yaca_verify_update_invalid_param)
KeyPtr pub = extract_public_key(prv);
CtxPtr ctx = verify_init(YACA_DIGEST_MD5, pub);
- YACA_INVALID_PARAM(yaca_sign_update(YACA_CONTEXT_NULL, lorem16, LOREM16_SIZE));
- YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), nullptr, LOREM16_SIZE));
- YACA_INVALID_PARAM(yaca_sign_update(ctx.get(), lorem16, 0));
+ YACA_INVALID_PARAM(yaca_verify_update(YACA_CONTEXT_NULL, lorem16, LOREM16_SIZE));
+ YACA_INVALID_PARAM(yaca_verify_update(ctx.get(), nullptr, LOREM16_SIZE));
+ YACA_INVALID_PARAM(yaca_verify_update(ctx.get(), lorem16, 0));
}
RUNNER_TEST(T6080_yaca_verify_final_invalid_param)
YACA_INVALID_PARAM(yaca_context_get_output_length(ctx.get(), 0, nullptr));
}
+RUNNER_TEST(T6095_yaca_sign_verify_call_order_invalid_param)
+{
+ KeyPtr key = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ KeyPtr key_pub = extract_public_key(key);
+ CtxPtr ctx_sgn = sign_init(YACA_DIGEST_SHA1, key);
+ CtxPtr ctx_vrf = verify_init(YACA_DIGEST_SHA1, key_pub);
+ size_t output_len = get_output_length(ctx_sgn);
+ Buffer output(output_len);
+ yaca_padding_e padding = YACA_PADDING_PKCS1_PSS;
+
+ YACA_SUCCESS(yaca_sign_finalize(ctx_sgn.get(), output.data(), &output_len));
+ YACA_SUCCESS(yaca_verify_finalize(ctx_vrf.get(), output.data(), output_len));
+
+ YACA_INVALID_PARAM(yaca_sign_update(ctx_sgn.get(), output.data(), output_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(ctx_sgn.get(), YACA_PROPERTY_PADDING,
+ static_cast<void*>(&padding),
+ sizeof(yaca_padding_e)));
+
+ YACA_INVALID_PARAM(yaca_verify_update(ctx_vrf.get(), output.data(), output_len));
+ YACA_INVALID_PARAM(yaca_context_set_property(ctx_vrf.get(), YACA_PROPERTY_PADDING,
+ static_cast<void*>(&padding),
+ sizeof(yaca_padding_e)));
+}
+
RUNNER_TEST(T6100_yaca_sign_set_property_invalid_param)
{
KeyPtr key = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_512BIT);
0));
}
+ padding = YACA_PADDING_X931;
+ ctx_sgn = sign_init(YACA_DIGEST_MD5, key);
+ YACA_INVALID_PARAM(yaca_context_set_property(ctx_sgn.get(), YACA_PROPERTY_PADDING,
+ static_cast<void*>(&padding),
+ sizeof(yaca_padding_e)));
+ ctx_sgn = sign_init(YACA_DIGEST_SHA224, key);
+ YACA_INVALID_PARAM(yaca_context_set_property(ctx_sgn.get(), YACA_PROPERTY_PADDING,
+ static_cast<void*>(&padding),
+ sizeof(yaca_padding_e)));
+
YACA_INVALID_PARAM(yaca_context_set_property(ctx_dsa.get(), YACA_PROPERTY_PADDING,
static_cast<void*>(&padding),
sizeof(yaca_padding_e)));
YACA_INVALID_PARAM(yaca_context_set_property(ctx_digest.get(), YACA_PROPERTY_PADDING,
static_cast<void*>(&padding),
sizeof(yaca_padding_e)));
-
}
RUNNER_TEST(T6120_yaca_sign_get_output_length)
};
const std::vector<yaca_key_bit_length_e> lengths = {
- YACA_KEY_LENGTH_512BIT,
YACA_KEY_LENGTH_1024BIT,
YACA_KEY_LENGTH_2048BIT,
YACA_KEY_LENGTH_3072BIT,
CtxPtr ctx = sign_init(algo, key_prv);
size_t output_len = get_output_length(ctx);
YACA_SUCCESS(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
- static_cast<void*>(&padding), sizeof(padding)));
+ static_cast<void*>(&padding),
+ sizeof(yaca_padding_e)));
if (input.size() > 0) {
for (size_t i = 0; i < repeats; i++)
ctx = verify_init(algo, key_pub);
YACA_SUCCESS(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
- static_cast<void*>(&padding), sizeof(padding)));
+ static_cast<void*>(&padding),
+ sizeof(yaca_padding_e)));
if (input.size() > 0)
for (size_t i = 0; i < repeats; i++)
}
}
}
+
+RUNNER_TEST(T6190_yaca_sign_param_combinations, YacaTest)
+{
+ auto tvv = loadTestVector("sign_param_comb.txt");
+
+ for (const auto& tv : tvv) {
+ yaca_key_type_e key_type;
+ size_t key_len;
+ yaca_padding_e padding;
+ yaca_digest_algorithm_e algo;
+
+ tv.get("key_type", key_type);
+ tv.get("key_len_bits", key_len);
+ if (key_type == YACA_KEY_TYPE_RSA_PRIV)
+ tv.get("padding", padding);
+ tv.get("algo", algo);
+
+ KeyPtr key = generate_key(key_type, key_len);
+ CtxPtr ctx = sign_init(algo, key);
+
+ if (key_type == YACA_KEY_TYPE_RSA_PRIV)
+ YACA_SUCCESS(yaca_context_set_property(ctx.get(), YACA_PROPERTY_PADDING,
+ (void*)&padding, sizeof(yaca_padding_e)));
+
+ size_t output_len = get_output_length(ctx);
+ Buffer output(output_len);
+ YACA_SUCCESS(yaca_sign_finalize(ctx.get(), output.data(), &output_len));
+ }
+}