test_lib_its_security.cc 87.9 KB
Newer Older
#include "gtest/gtest.h"
YannGarcia's avatar
YannGarcia committed

extern "C" {
#include "lib_its_security.h"
#ifndef _Win64
Yann Garcia's avatar
Yann Garcia committed
    uint8_t* hex_to_bin(const int8_t* p_buffer, size_t* p_buffer_length);
#endif
}

#ifdef _Win64
uint8_t* hex_to_bin(const int8_t* p_buffer, size_t* p_buffer_length) {
    int8_t a;
    size_t i, len;
    uint8_t* retval = NULL;

    // Sanity check
    if (p_buffer == NULL) {
        return NULL;
    }
    if ((len = strlen((const char*)p_buffer)) & 1) {
        return NULL;
Yann Garcia's avatar
Yann Garcia committed
    }
    retval = (uint8_t*)malloc(len >> 1);
    for (i = 0; i < len; i++) {
        a = toupper(*(p_buffer + i));
        if (!isxdigit(a)) {
            break;
        }
        if (isdigit(a)) {
            a -= '0';
        }
        else {
            a = a - 'A' + 0x0A;
        }
        if (i & 1) {
            retval[i >> 1] |= a;
        }
        else {
            retval[i >> 1] = a << 4;
        }
    } // End of 'for' statement
    if (i < len) {
        free(retval);
        retval = NULL;
    }
    *p_buffer_length = len >> 1;

    return retval;
}
#endif
#ifndef _Win64
YannGarcia's avatar
YannGarcia committed
/**
 * @class lib_its_security unit tests suite implementation
 */
class lib_its_security_test_suite : public ::testing::Test {
protected:
    virtual void SetUp() { };
    virtual void TearDown() { };
YannGarcia's avatar
YannGarcia committed
};
#endif
YannGarcia's avatar
YannGarcia committed

TEST(lib_its_security_test_suite, Init1) {
    EXPECT_TRUE(initialize(nist_p_256, NULL) == -1);
}

TEST(lib_its_security_test_suite, Init2) {
    EXPECT_TRUE(uninitialize(NULL) == -1);
}

TEST(lib_its_security_test_suite, Init3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context != NULL);

    // Test body
    EXPECT_EQ(lib_its_security_context->elliptic_curve, nist_p_256);
    EXPECT_EQ(lib_its_security_context->key_length, 32);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);

    // Postamble
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, Init4) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_256_r1, &lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context != NULL);

    // Test body
    EXPECT_EQ(lib_its_security_context->elliptic_curve, brainpool_p_256_r1);
    EXPECT_EQ(lib_its_security_context->key_length, 32);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);

    // Postamble
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, Init5) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_384_r1, &lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context != NULL);

    // Test body
    EXPECT_EQ(lib_its_security_context->elliptic_curve, brainpool_p_384_r1);
    EXPECT_EQ(lib_its_security_context->key_length, 48);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);

    // Postamble
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sha_256_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    uint8_t* hashed_data = NULL;
    EXPECT_TRUE(hash_with_sha256(NULL, 10, &hashed_data) == 0);
    EXPECT_TRUE(hashed_data != NULL);
    EXPECT_EQ(hashed_data[0], 0xe3);
    EXPECT_EQ(hashed_data[31], 0x55);
    free(hashed_data);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sha_256_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    size_t l = 0;
    uint8_t* data_to_be_hashed = hex_to_bin((const int8_t*)"CAFEDECA", &l);
    uint8_t* hashed_data = NULL;
    EXPECT_TRUE(hash_with_sha256(data_to_be_hashed, 0, &hashed_data) == 0); // 0 instead of l
    EXPECT_TRUE(hashed_data != NULL);
    EXPECT_EQ(hashed_data[0], 0xe3);
    EXPECT_EQ(hashed_data[31], 0x55);
    free(data_to_be_hashed);
    free(hashed_data);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sha_256_3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    size_t l = 0;
    uint8_t* data_to_be_hashed = hex_to_bin((const int8_t*)"CAFEDECA", &l);
    uint8_t* hashed_data = NULL;
    EXPECT_TRUE(hash_with_sha256(data_to_be_hashed, l, &hashed_data) == 0);
    EXPECT_TRUE(hashed_data != NULL);
    EXPECT_EQ(hashed_data[0], 0x84);
    EXPECT_EQ(hashed_data[31], 0xfb);
    free(data_to_be_hashed);
    free(hashed_data);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sha_384_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    uint8_t* hashed_data = NULL;
    EXPECT_TRUE(hash_with_sha384(NULL, 10, &hashed_data) == 0);
    EXPECT_TRUE(hashed_data != NULL);
    EXPECT_EQ(hashed_data[0], 0x38);
    EXPECT_EQ(hashed_data[47], 0x5b);
    free(hashed_data);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sha_384_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    size_t l = 0;
    uint8_t* data_to_be_hashed = hex_to_bin((const int8_t*)"CAFEDECA", &l);
    uint8_t* hashed_data = NULL;
    EXPECT_TRUE(hash_with_sha384(data_to_be_hashed, 0, &hashed_data) == 0); // 0 instead of l
    EXPECT_TRUE(hashed_data != NULL);
    EXPECT_EQ(hashed_data[0], 0x38);
    EXPECT_EQ(hashed_data[47], 0x5b);
    free(data_to_be_hashed);
    free(hashed_data);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sha_384_3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    size_t l = 0;
    uint8_t* data_to_be_hashed = hex_to_bin((const int8_t*)"CAFEDECA", &l);
    uint8_t* hashed_data = NULL;
    EXPECT_TRUE(hash_with_sha384(data_to_be_hashed, l, &hashed_data) == 0);
    EXPECT_TRUE(hashed_data != NULL);
    EXPECT_EQ(hashed_data[0], 0x64);
    EXPECT_EQ(hashed_data[47], 0x12);
    free(data_to_be_hashed);
    free(hashed_data);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, hmac_sha_256_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    uint8_t* hmac = NULL;
    size_t secret_length;
    uint8_t* secret = hex_to_bin((const int8_t*)"4a656665", &secret_length);
    size_t message_length;
    uint8_t* message = hex_to_bin((const int8_t*)"7768617420646f2079612077616e7420666f72206e6f7468696e673f", &message_length);
    EXPECT_TRUE(hmac_sha256(secret, secret_length, message, message_length, NULL) == -1);
    EXPECT_TRUE(hmac_sha256(NULL, secret_length, message, message_length, &hmac) == -1);
    EXPECT_TRUE(hmac_sha256(secret, secret_length, NULL, message_length, &hmac) == -1);
    EXPECT_TRUE(hmac_sha256(secret, 0, message, message_length, &hmac) == -1);
    EXPECT_TRUE(hmac_sha256(secret, secret_length, message, 0, &hmac) == -1);
    free(secret);
    free(message);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, hmac_sha_256_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    uint8_t* hmac = NULL;
    size_t secret_length = 0;
    uint8_t* secret = hex_to_bin((const int8_t*)"4a656665", &secret_length);
    size_t message_length = 0;
    uint8_t* message = hex_to_bin((const int8_t*)"7768617420646f2079612077616e7420666f72206e6f7468696e673f", &message_length);
    EXPECT_TRUE(hmac_sha256(secret, secret_length, message, message_length, &hmac) == 0);
    EXPECT_EQ(hmac[0], 0x5b);
    EXPECT_EQ(hmac[15], 0xc7);
    free(secret);
    free(message);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, generate_key_pair_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(NULL, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == -1);
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, NULL, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == -1);
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, NULL, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == -1);
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, NULL, &public_key_compressed, &public_key_compressed_mode) == -1);
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, NULL, &public_key_compressed_mode) == -1);
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, NULL) == -1);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, generate_key_pair_nist_p_256_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);

    // Test body
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, generate_key_pair_brainpool_p_256_r1_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_256_r1, &lib_its_security_context) == 0);

    // Test body
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, generate_key_pair_brainpool_p_384_r1_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_384_r1, &lib_its_security_context) == 0);

    // Test body
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);

    // Postamble
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_nistp256_with_sha256_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);

    // Test body
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    free(sig);

    // Postamble
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_nistp256_with_sha256_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);

    // Test body
    EXPECT_TRUE(verify_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);
YannGarcia's avatar
YannGarcia committed
    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_nistp256_with_sha256_3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    EXPECT_TRUE(verify_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Test body
    *(public_key_y + 1) = 0xaa; *(public_key_y + 2) = 0xaa;
    EXPECT_TRUE(verify_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_nistp256_with_sha256_4) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    EXPECT_TRUE(verify_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Test body
    *(sig + 1) = 0xaa; *(sig + 2) = 0xaa;
    EXPECT_TRUE(verify_with_ecdsa_nistp256_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_nistp256_with_sha256_5) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    size_t l;
    uint8_t* issuer = hex_to_bin((const int8_t*)"4CC9D9FECC22775705A4B15929A3B01BEEE0BE6903AC3524EFEB473043DD2B88", &l);
    uint8_t* sig = hex_to_bin((const int8_t*)"208F312F000D528C45E05A8BD9BC40A3627AA423FC5E8979068646B2C7A55449232B3FFEA13D9C73B2936CA4C037F984FB1FA6ACC34CD9D4C5C9C41B804C47A6", &l);
    uint8_t* public_key_compressed = hex_to_bin((const int8_t*)"311038D31EF3A6201EEFC8CE75220F83FB18783923C7A31093DDED24F8123C8F", &l);
    ecc_compressed_mode_t public_key_compressed_mode = compressed_y_1;
    uint8_t* message = hex_to_bin((const int8_t*)"4003805320508000002F0A00BC21001C6B0D0201CBF4D9FB15E761B5FD48CC8D000000000000000007D1000002020010F43DDDE14059718956ADC020AE600200200030D41E0000012016840310A50733FFE1FFFA0010004001240001D00CB48315C1", &l);

    // Test body
    EXPECT_TRUE(verify_with_ecdsa_nistp256_with_sha256(lib_its_security_context, message, l, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);
    *(sig + 1) = 0xaa; *(sig + 2) = 0xaa;
    EXPECT_TRUE(verify_with_ecdsa_nistp256_with_sha256(lib_its_security_context, message, l, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(message);
    free(public_key_compressed);
    free(sig);
    free(issuer);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

YannGarcia's avatar
YannGarcia committed
TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp256r1_with_sha256_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_256_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);

    // Test body
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    free(sig);

    // Postamble
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp256r1_with_sha256_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_256_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);

    // Test body
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp256r1_with_sha256_3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_256_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Test body
    *(public_key_y + 1) = 0xaa; *(public_key_y + 2) = 0xaa;
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp256r1_with_sha256_4) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_256_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Test body
    *(sig + 1) = 0xaa; *(sig + 2) = 0xaa;
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp256r1_with_sha256_5) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    size_t l;
    uint8_t* public_key_compressed = hex_to_bin((const int8_t*)"45dc4fbf42910e1843bc33ed5752e3781fa84432af6d77c3f35bc105e8493842", &l);
    ecc_compressed_mode_t public_key_compressed_mode = compressed_y_0;
    EXPECT_TRUE(initialize_with_public_key(brainpool_p_256_r1, public_key_compressed, public_key_compressed_mode, &lib_its_security_context) == 0);

    // Test body
    size_t data_length;
    uint8_t* data = hex_to_bin((const int8_t*)"40038081CD018140B35BB1620425E515B0AE24C8183B64FF008003008062C042D452D16EBA70812431356433396237342D653232372D346431322D383039622D36313033373631623235393000000000001E80314F8400788301028000FA80017C0001018002026F81030201C080808369D872E470EC6CFB9483834DAF3BA42430ED455308382F8893C94195F31125528180256EF768A3101619D9D67071B20CE3339EFEA006FBD11CEDE0406BE63E0F947B54D4BDE21CB10580CB8D3119F6152FD0C48E07A95CB26A72746EE3B62600B27F4002026F0001D16790C0B1BD", &data_length);
    uint8_t* issuer = hex_to_bin((const int8_t*)"89bab7dea15bdaf3ff0357d952760a25735dd9816941bf6562c042d452d16eba", &l);
    uint8_t* sig = hex_to_bin((const int8_t*)"03F5D9B6C73AE57FE2372F0F9580349A474AF3CE30CE986E7DFDEF8E87BA309B45677D03B713594E0C731B3C680A87631A9E23993678B2268E1715B8EB5E07CF", &l);
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, data, data_length, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);
    free(data);
    data = hex_to_bin((const int8_t*)"018140917e149bda9bb458c5ae3d48757c41b3008003008062c042d452d16eba70812436393761346436332d366666342d343234642d613664342d38333738653034306234316200000000001e8113df8400788301028000fa80017c0001018002026f81030201c08080839f4d40e1aa679757aad00885fdf365b4b9764d51e5f4cbba38765813fddc6f8d8180934615ee798ccc3786dc0a8b305ddc04cc7641acf1c52fce051ebf7a5266e9fb490f723920145aa9a014231948b01ba5227f8adda0e5c912376930330a09c1944002026f0001d17511c52f26", &data_length);
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp256r1_with_sha256(lib_its_security_context, data, data_length, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(data);
    free(issuer);
    free(sig);
    free(public_key_compressed);
YannGarcia's avatar
YannGarcia committed
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp384r1_with_sha384_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_384_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);

    // Test body
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    free(sig);

    // Postamble
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp384r1_with_sha384_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_384_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);

    // Test body
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp384r1_with_sha384_3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_384_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Test body
    *(public_key_y + 1) = 0xaa; *(public_key_y + 2) = 0xaa;
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, sign_with_ecdsa_brainpoolp384r1_with_sha384_4) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(brainpool_p_384_r1, &lib_its_security_context) == 0);
    uint8_t* private_key = NULL;
    uint8_t* public_key_x = NULL;
    uint8_t* public_key_y = NULL;
    uint8_t* public_key_compressed = NULL;
    ecc_compressed_mode_t public_key_compressed_mode;
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &private_key, &public_key_x, &public_key_y, &public_key_compressed, &public_key_compressed_mode) == 0);
    uint8_t issuer[32] = { 0x00 };
    uint8_t* sig = NULL;
    EXPECT_TRUE(sign_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, private_key, &sig) == 0);
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == 0);

    // Test body
    *(sig + 1) = 0xaa; *(sig + 2) = 0xaa;
    EXPECT_TRUE(verify_with_ecdsa_brainpoolp384r1_with_sha384(lib_its_security_context, public_key_y, 32, issuer, sig, public_key_compressed, public_key_compressed_mode) == -1);

    // Postamble
    free(sig);
    free(private_key);
    free(public_key_x);
    free(public_key_y);
    free(public_key_compressed);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, encrypt_aes_ccm_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->sym_key = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->sym_key_length));
    lib_its_security_context->nonce = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->nonce_length));

    // Test body
    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = NULL;
    EXPECT_TRUE(encrypt_(NULL, plain_text_message, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == -1);
    EXPECT_TRUE(encrypt_(lib_its_security_context, NULL, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == -1);
    EXPECT_TRUE(encrypt_(lib_its_security_context, plain_text_message, plain_text_message_length, NULL, &encrypted_secured_message_length) == -1);

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, encrypt_aes_ccm_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->nonce = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->nonce_length));

    // Test body
    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = NULL;
    EXPECT_TRUE(encrypt_(lib_its_security_context, plain_text_message, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == -1);

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, encrypt_aes_ccm_3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->sym_key = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->sym_key_length));

    // Test body
    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = NULL;
    EXPECT_TRUE(encrypt_(lib_its_security_context, plain_text_message, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == -1);

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, encrypt_aes_ccm_4) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->sym_key = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->sym_key_length));
    lib_its_security_context->nonce = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->nonce_length));

    // Test body
    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = NULL;
    EXPECT_TRUE(encrypt_(lib_its_security_context, plain_text_message, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == 0);
    EXPECT_TRUE(encrypted_secured_message != NULL);
    EXPECT_TRUE(encrypted_secured_message_length == plain_text_message_length);

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, decrypt_aes_ccm_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->sym_key = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->sym_key_length));
    lib_its_security_context->nonce = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->nonce_length));

    // Test body
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = hex_to_bin((const int8_t*)"ABABABAB", &encrypted_secured_message_length);
    size_t plain_text_message_length = 0;
    uint8_t* plain_text_message = NULL;
    EXPECT_TRUE(decrypt(NULL, encrypted_secured_message, encrypted_secured_message_length, &plain_text_message, &plain_text_message_length) == -1);
    EXPECT_TRUE(decrypt(lib_its_security_context, NULL, encrypted_secured_message_length, &plain_text_message, &plain_text_message_length) == -1);
    EXPECT_TRUE(decrypt(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, &plain_text_message, &plain_text_message_length) == -1);

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, decrypt_aes_ccm_2) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->sym_key = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->sym_key_length));
    lib_its_security_context->nonce = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->nonce_length));
    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = NULL;
    EXPECT_TRUE(encrypt_(lib_its_security_context, plain_text_message, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == 0);

    // Test body
    free(lib_its_security_context->sym_key);
    lib_its_security_context->sym_key = NULL;
    size_t new_plain_text_message_length;
    uint8_t* new_plain_text_message = NULL;
    EXPECT_TRUE(decrypt(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, &new_plain_text_message, &new_plain_text_message_length) == -1);

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, decrypt_aes_ccm_3) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->sym_key = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->sym_key_length));
    lib_its_security_context->nonce = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->nonce_length));
    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = NULL;
    EXPECT_TRUE(encrypt_(lib_its_security_context, plain_text_message, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == 0);

    // Test body
    free(lib_its_security_context->nonce);
    lib_its_security_context->nonce = NULL;
    size_t new_plain_text_message_length;
    uint8_t* new_plain_text_message = NULL;
    EXPECT_TRUE(decrypt(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, &new_plain_text_message, &new_plain_text_message_length) == -1);

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

TEST(lib_its_security_test_suite, decrypt_aes_ccm_4) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    lib_its_security_context->encryption_algorithm = aes_128_ccm;
    lib_its_security_context->sym_key = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->sym_key_length));
    lib_its_security_context->nonce = hex_to_bin((const int8_t*)"CAFEDECA", &(lib_its_security_context->nonce_length));
    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t encrypted_secured_message_length = 0;
    uint8_t* encrypted_secured_message = NULL;
    EXPECT_TRUE(encrypt_(lib_its_security_context, plain_text_message, plain_text_message_length, &encrypted_secured_message, &encrypted_secured_message_length) == 0);
    EXPECT_TRUE(encrypted_secured_message != NULL);

    // Test body
    size_t new_plain_text_message_length;
    uint8_t* new_plain_text_message = NULL;
    EXPECT_TRUE(decrypt(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, &new_plain_text_message, &new_plain_text_message_length) == 0);
    EXPECT_TRUE(new_plain_text_message != NULL);
    EXPECT_TRUE(plain_text_message_length == new_plain_text_message_length);
Yann Garcia's avatar
Yann Garcia committed
    for (size_t i = 0; i < new_plain_text_message_length; i++) {
        EXPECT_TRUE(*(new_plain_text_message + i) == *(plain_text_message + i));
    }

    // Postamble
    free(plain_text_message);
    free(encrypted_secured_message);
    free(new_plain_text_message);
    EXPECT_TRUE(lib_its_security_context->ec_key != NULL);
    EXPECT_TRUE(uninitialize(&lib_its_security_context) == 0);
    EXPECT_TRUE(lib_its_security_context == NULL);
}

YannGarcia's avatar
YannGarcia committed
TEST(lib_its_security_test_suite, encrypt_with_ecies_nistp256_with_sha256_1) {
    // Preamble
    lib_its_security_context_t* lib_its_security_context = NULL;
    EXPECT_TRUE(initialize(nist_p_256, &lib_its_security_context) == 0);
    EXPECT_TRUE(generate_key_pair(lib_its_security_context, &lib_its_security_context->private_key, &lib_its_security_context->public_key_x, &lib_its_security_context->public_key_y, &lib_its_security_context->public_key_c, &lib_its_security_context->compressed_mode) == 0);

    // Test body