*/
#include "dpl/test/test_runner.h"
+#include "yaca-test-common.h"
+#include "yaca-test-vector.h"
#include <yaca_seal.h>
+#include <yaca_encrypt.h>
+#include <yaca_key.h>
+const Buffer DATA = random_buffer(1024);
RUNNER_TEST_GROUP_INIT(T5000_YACA_SEAL);
-RUNNER_TEST(T5001_yaca_seal_init)
+RUNNER_TEST(T5010_yaca_seal_init_invalid_param, YacaTest)
{
+ yaca_context_h ctx;
+ yaca_key_h sym_key;
+ yaca_key_h iv;
+
+ yaca_encrypt_algorithm_e algo = YACA_ENCRYPT_AES;
+ yaca_block_cipher_mode_e bcm = YACA_BCM_CBC;
+ size_t sym_key_bit_len = YACA_KEY_LENGTH_192BIT;
+
+ auto rsa_priv_key_ptr = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto rsa_pub_key_ptr = extract_public_key(rsa_priv_key_ptr);
+
+ auto dsa_priv_key_ptr = generate_key(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto dsa_pub_key_ptr = extract_public_key(dsa_priv_key_ptr);
+ auto dsa_params_ptr = extract_parameters(dsa_priv_key_ptr);
+
+ auto aes_key_ptr = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT);
+
+ YACA_INVALID_PARAM(yaca_seal_initialize(nullptr, rsa_pub_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ &sym_key, &iv));
+
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, YACA_KEY_NULL, algo, bcm, sym_key_bit_len,
+ &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_priv_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, dsa_priv_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, dsa_pub_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, dsa_params_ptr.get(), algo, bcm, sym_key_bit_len,
+ &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, aes_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ &sym_key, &iv));
+
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(),
+ static_cast<yaca_encrypt_algorithm_e>(-1),
+ bcm, sym_key_bit_len, &sym_key, &iv));
+
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(), algo,
+ static_cast<yaca_block_cipher_mode_e>(-1),
+ sym_key_bit_len, &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(), algo, YACA_BCM_WRAP, sym_key_bit_len,
+ &sym_key, &iv));
+
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(), algo, bcm, 512, &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(), algo, bcm, 64, &sym_key, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(), algo, bcm, 63, &sym_key, &iv));
+
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ nullptr, &iv));
+ YACA_INVALID_PARAM(yaca_seal_initialize(&ctx, rsa_pub_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ &sym_key, nullptr));
}
-RUNNER_TEST(T5002_yaca_seal_update)
+RUNNER_TEST(T5020_yaca_seal_update_invalid_param, YacaTest)
{
+ size_t ciphertext_len = 0;
+ KeyPtr sym_key = null_key();
+ KeyPtr iv = null_key();
+
+ auto rsa_priv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto rsa_pub = extract_public_key(rsa_priv);
+
+ auto seal_ctx_ptr = seal_init(rsa_pub, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+ auto open_ctx_ptr = open_init(rsa_priv, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+
+ auto ciphertext_ptr = out_buf_alloc(seal_ctx_ptr, DATA.size(), ciphertext_len);
+
+ YACA_INVALID_PARAM(yaca_seal_update(YACA_CONTEXT_NULL, DATA.data(), DATA.size(),
+ ciphertext_ptr.get(), &ciphertext_len));
+ YACA_INVALID_PARAM(yaca_seal_update(open_ctx_ptr.get(), DATA.data(), DATA.size(),
+ ciphertext_ptr.get(), &ciphertext_len));
+
+ YACA_INVALID_PARAM(yaca_seal_update(seal_ctx_ptr.get(), nullptr, DATA.size(),
+ ciphertext_ptr.get(), &ciphertext_len));
+
+ YACA_INVALID_PARAM(yaca_seal_update(seal_ctx_ptr.get(), DATA.data(), 0,
+ ciphertext_ptr.get(), &ciphertext_len));
+
+ YACA_INVALID_PARAM(yaca_seal_update(seal_ctx_ptr.get(), DATA.data(), DATA.size(),
+ nullptr, &ciphertext_len));
+
+ YACA_INVALID_PARAM(yaca_seal_update(seal_ctx_ptr.get(), DATA.data(), DATA.size(),
+ ciphertext_ptr.get(), nullptr));
}
-RUNNER_TEST(T5003_yaca_seal_final)
+RUNNER_TEST(T5030_yaca_seal_final_invalid_param, YacaTest)
{
+ size_t ciphertext_len = 0;
+ KeyPtr sym_key = null_key();
+ KeyPtr iv = null_key();
+
+ auto rsa_priv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto rsa_pub = extract_public_key(rsa_priv);
+
+ auto seal_ctx_ptr = seal_init(rsa_pub, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+ auto open_ctx_ptr = open_init(rsa_priv, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+
+ auto ciphertext_ptr = out_buf_alloc(seal_ctx_ptr, DATA.size(), ciphertext_len);
+
+ YACA_INVALID_PARAM(yaca_seal_finalize(YACA_CONTEXT_NULL, ciphertext_ptr.get(), &ciphertext_len));
+ YACA_INVALID_PARAM(yaca_seal_finalize(open_ctx_ptr.get(), ciphertext_ptr.get(), &ciphertext_len));
+ YACA_INVALID_PARAM(yaca_seal_finalize(seal_ctx_ptr.get(), nullptr, &ciphertext_len));
+ YACA_INVALID_PARAM(yaca_seal_finalize(seal_ctx_ptr.get(), ciphertext_ptr.get(), nullptr));
}
-RUNNER_TEST(T5004_yaca_open_init)
+RUNNER_TEST(T5040_yaca_open_init_invalid_param, YacaTest)
{
+ yaca_context_h ctx;
+ KeyPtr sym_key = null_key();
+ KeyPtr iv = null_key();
+
+ yaca_encrypt_algorithm_e algo = YACA_ENCRYPT_AES;
+ yaca_block_cipher_mode_e bcm = YACA_BCM_CBC;
+ size_t sym_key_bit_len = YACA_KEY_LENGTH_192BIT;
+
+ auto rsa_priv_key_ptr = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto rsa_pub_key_ptr = extract_public_key(rsa_priv_key_ptr);
+
+ auto seal_ctx_ptr = seal_init(rsa_pub_key_ptr, algo, bcm, sym_key_bit_len, sym_key, iv);
+
+ auto dsa_priv_key_ptr = generate_key(YACA_KEY_TYPE_DSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto dsa_pub_key_ptr = extract_public_key(dsa_priv_key_ptr);
+ auto dsa_params_ptr = extract_parameters(dsa_priv_key_ptr);
+
+ auto aes_key_ptr = generate_key(YACA_KEY_TYPE_SYMMETRIC, YACA_KEY_LENGTH_192BIT);
+
+ YACA_INVALID_PARAM(yaca_open_initialize(nullptr, rsa_priv_key_ptr.get(), algo, bcm,
+ sym_key_bit_len, sym_key.get(), iv.get()));
+
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, YACA_KEY_NULL, algo, bcm, sym_key_bit_len,
+ sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_pub_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, dsa_priv_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, dsa_pub_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, dsa_params_ptr.get(), algo, bcm, sym_key_bit_len,
+ sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, aes_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ sym_key.get(), iv.get()));
+
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(),
+ static_cast<yaca_encrypt_algorithm_e>(-1),
+ bcm, sym_key_bit_len, sym_key.get(), iv.get()));
+
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(), algo,
+ static_cast<yaca_block_cipher_mode_e>(-1),
+ sym_key_bit_len, sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(), algo, YACA_BCM_WRAP,
+ sym_key_bit_len, sym_key.get(), iv.get()));
+
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(), algo, bcm, 512,
+ sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(), algo, bcm, 64,
+ sym_key.get(), iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(), algo, bcm, 63,
+ sym_key.get(), iv.get()));
+
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ YACA_KEY_NULL, iv.get()));
+ YACA_INVALID_PARAM(yaca_open_initialize(&ctx, rsa_priv_key_ptr.get(), algo, bcm, sym_key_bit_len,
+ sym_key.get(), YACA_KEY_NULL));
}
-RUNNER_TEST(T5005_yaca_open_update)
+RUNNER_TEST(T5050_yaca_open_update_invalid_param, YacaTest)
{
+ size_t plaintext_len = 0;
+ KeyPtr sym_key = null_key();
+ KeyPtr iv = null_key();
+
+ auto rsa_priv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto rsa_pub = extract_public_key(rsa_priv);
+
+ auto seal_ctx_ptr = seal_init(rsa_pub, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+ auto open_ctx_ptr = open_init(rsa_priv, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+
+ auto plaintext_ptr = out_buf_alloc(open_ctx_ptr, DATA.size(), plaintext_len);
+
+ YACA_INVALID_PARAM(yaca_open_update(YACA_CONTEXT_NULL, DATA.data(), DATA.size(),
+ plaintext_ptr.get(), &plaintext_len));
+ YACA_INVALID_PARAM(yaca_open_update(seal_ctx_ptr.get(), DATA.data(), DATA.size(),
+ plaintext_ptr.get(), &plaintext_len));
+
+ YACA_INVALID_PARAM(yaca_open_update(open_ctx_ptr.get(), nullptr, DATA.size(),
+ plaintext_ptr.get(), &plaintext_len));
+
+ YACA_INVALID_PARAM(yaca_open_update(open_ctx_ptr.get(), DATA.data(), 0,
+ plaintext_ptr.get(), &plaintext_len));
+
+ YACA_INVALID_PARAM(yaca_open_update(open_ctx_ptr.get(), DATA.data(), DATA.size(),
+ nullptr, &plaintext_len));
+
+ YACA_INVALID_PARAM(yaca_open_update(open_ctx_ptr.get(), DATA.data(), DATA.size(),
+ plaintext_ptr.get(), nullptr));
}
-RUNNER_TEST(T5006_yaca_open_final)
+RUNNER_TEST(T5060_yaca_open_final_invalid_param, YacaTest)
{
+ size_t plaintext_len = 0;
+ KeyPtr sym_key = null_key();
+ KeyPtr iv = null_key();
+
+ auto rsa_priv = generate_key(YACA_KEY_TYPE_RSA_PRIV, YACA_KEY_LENGTH_1024BIT);
+ auto rsa_pub = extract_public_key(rsa_priv);
+
+ auto seal_ctx_ptr = seal_init(rsa_pub, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+ auto open_ctx_ptr = open_init(rsa_priv, YACA_ENCRYPT_AES, YACA_BCM_CBC, YACA_KEY_LENGTH_192BIT,
+ sym_key, iv);
+
+ auto plaintext_ptr = out_buf_alloc(open_ctx_ptr, DATA.size(), plaintext_len);
+
+ YACA_INVALID_PARAM(yaca_open_finalize(YACA_CONTEXT_NULL, plaintext_ptr.get(), &plaintext_len));
+ YACA_INVALID_PARAM(yaca_open_finalize(seal_ctx_ptr.get(), plaintext_ptr.get(), &plaintext_len));
+ YACA_INVALID_PARAM(yaca_open_finalize(open_ctx_ptr.get(), nullptr, &plaintext_len));
+ YACA_INVALID_PARAM(yaca_open_finalize(open_ctx_ptr.get(), plaintext_ptr.get(), nullptr));
}