test_lib_its_security.cc 67.9 KB
Newer Older
YannGarcia's avatar
YannGarcia committed
    ecc_compressed_mode_t ephemeral_compressed_mode = compressed_y_0;
    uint8_t* aes_sym_key = NULL;
    uint8_t* encrypted_sym_key = NULL;
    uint8_t* authentication_vector = NULL;
    uint8_t* nonce = NULL;
    uint8_t* encrypted_secured_message = NULL;
    size_t encrypted_secured_message_length = 0;
    EXPECT_TRUE(encrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context/*recipient's public keys*/, plain_text_message, plain_text_message_length, lib_its_security_context->public_key_c, lib_its_security_context->compressed_mode, salt, salt_length, &ephemeral_key_compressed, &ephemeral_compressed_mode, &aes_sym_key, &encrypted_sym_key, &authentication_vector, &nonce, &encrypted_secured_message, &encrypted_secured_message_length) == 0);

    // Test body
    size_t new_plain_text_message_length = 0;
    uint8_t* new_plain_text_message = NULL;
    uint8_t* new_aes_enc_sym_key = NULL;
    EXPECT_TRUE(decrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, lib_its_security_context->private_key, ephemeral_key_compressed, ephemeral_compressed_mode, encrypted_sym_key, authentication_vector, nonce, salt, salt_length, &new_aes_enc_sym_key, &new_plain_text_message, &new_plain_text_message_length) == 0);
    EXPECT_TRUE(new_plain_text_message_length == plain_text_message_length);
    for (uint32_t i = 0; i < plain_text_message_length; i++) {
        EXPECT_TRUE(*(plain_text_message + i) == *(new_plain_text_message + i));
    }
    for (uint32_t i = 0; i < 16; i++) {
        EXPECT_TRUE(*(encrypted_sym_key + i) == *(new_aes_enc_sym_key + i));
    }
    free(new_plain_text_message);
    free(new_aes_enc_sym_key);

    // Postamble
    free(plain_text_message);
    free(salt);
    free(aes_sym_key);
    free(encrypted_sym_key);
    free(authentication_vector);
    free(nonce);
    free(encrypted_secured_message);
    free(ephemeral_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_with_ecies_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);
    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);

    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t salt_length;
    uint8_t* salt = hex_to_bin((const int8_t*)"4739DA8E1723A178CCF278763454DAE55B67208F1D9DCB312BDA08D4402BDEAA", &salt_length);
    /* Encrypt */
    uint8_t* ephemeral_key_compressed = NULL;
    ecc_compressed_mode_t ephemeral_compressed_mode = compressed_y_0;
    uint8_t* aes_sym_key = NULL;
    uint8_t* encrypted_sym_key = NULL;
    uint8_t* authentication_vector = NULL;
    uint8_t* nonce = NULL;
    uint8_t* encrypted_secured_message = NULL;
    size_t encrypted_secured_message_length = 0;
    EXPECT_TRUE(encrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context/*recipient's public keys*/, plain_text_message, plain_text_message_length, lib_its_security_context->public_key_c, lib_its_security_context->compressed_mode, salt, salt_length, &ephemeral_key_compressed, &ephemeral_compressed_mode, &aes_sym_key, &encrypted_sym_key, &authentication_vector, &nonce, &encrypted_secured_message, &encrypted_secured_message_length) == 0);

    // Test body
    size_t new_plain_text_message_length = 0;
    uint8_t* new_plain_text_message = NULL;
    uint8_t* new_aes_enc_sym_key = NULL;
    *(salt + 1) = 0xaa; *(salt + 2) = 0xaa;
    EXPECT_TRUE(decrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, lib_its_security_context->private_key, ephemeral_key_compressed, ephemeral_compressed_mode, encrypted_sym_key, authentication_vector, nonce, salt, salt_length, &new_aes_enc_sym_key, &new_plain_text_message, &new_plain_text_message_length) == -1);
    free(new_plain_text_message);
    free(new_aes_enc_sym_key);

    // Postamble
    free(plain_text_message);
    free(salt);
    free(aes_sym_key);
    free(encrypted_sym_key);
    free(authentication_vector);
    free(nonce);
    free(encrypted_secured_message);
    free(ephemeral_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_with_ecies_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);
    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);

    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t salt_length;
    uint8_t* salt = hex_to_bin((const int8_t*)"4739DA8E1723A178CCF278763454DAE55B67208F1D9DCB312BDA08D4402BDEAA", &salt_length);
    /* Encrypt */
    uint8_t* ephemeral_key_compressed = NULL;
    ecc_compressed_mode_t ephemeral_compressed_mode = compressed_y_0;
    uint8_t* aes_sym_key = NULL;
    uint8_t* encrypted_sym_key = NULL;
    uint8_t* authentication_vector = NULL;
    uint8_t* nonce = NULL;
    uint8_t* encrypted_secured_message = NULL;
    size_t encrypted_secured_message_length = 0;
    EXPECT_TRUE(encrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context/*recipient's public keys*/, plain_text_message, plain_text_message_length, lib_its_security_context->public_key_c, lib_its_security_context->compressed_mode, salt, salt_length, &ephemeral_key_compressed, &ephemeral_compressed_mode, &aes_sym_key, &encrypted_sym_key, &authentication_vector, &nonce, &encrypted_secured_message, &encrypted_secured_message_length) == 0);

    // Test body
    size_t new_plain_text_message_length = 0;
    uint8_t* new_plain_text_message = NULL;
    uint8_t* new_aes_enc_sym_key = NULL;
    *(encrypted_sym_key + 1) = 0xaa; *(encrypted_sym_key + 2) = 0xaa;
    EXPECT_TRUE(decrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, lib_its_security_context->private_key, ephemeral_key_compressed, ephemeral_compressed_mode, encrypted_sym_key, authentication_vector, nonce, salt, salt_length, &new_aes_enc_sym_key, &new_plain_text_message, &new_plain_text_message_length) == -1);
    free(new_plain_text_message);
    free(new_aes_enc_sym_key);

    // Postamble
    free(plain_text_message);
    free(salt);
    free(aes_sym_key);
    free(encrypted_sym_key);
    free(authentication_vector);
    free(nonce);
    free(encrypted_secured_message);
    free(ephemeral_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_with_ecies_brainpoolp256r1_with_sha256_5) {
    // 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(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);

    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t salt_length;
    uint8_t* salt = hex_to_bin((const int8_t*)"4739DA8E1723A178CCF278763454DAE55B67208F1D9DCB312BDA08D4402BDEAA", &salt_length);
    /* Encrypt */
    uint8_t* ephemeral_key_compressed = NULL;
    ecc_compressed_mode_t ephemeral_compressed_mode = compressed_y_0;
    uint8_t* aes_sym_key = NULL;
    uint8_t* encrypted_sym_key = NULL;
    uint8_t* authentication_vector = NULL;
    uint8_t* nonce = NULL;
    uint8_t* encrypted_secured_message = NULL;
    size_t encrypted_secured_message_length = 0;
    EXPECT_TRUE(encrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context/*recipient's public keys*/, plain_text_message, plain_text_message_length, lib_its_security_context->public_key_c, lib_its_security_context->compressed_mode, salt, salt_length, &ephemeral_key_compressed, &ephemeral_compressed_mode, &aes_sym_key, &encrypted_sym_key, &authentication_vector, &nonce, &encrypted_secured_message, &encrypted_secured_message_length) == 0);

    // Test body
    size_t new_plain_text_message_length = 0;
    uint8_t* new_plain_text_message = NULL;
    uint8_t* new_aes_enc_sym_key = NULL;
    *(nonce + 1) = 0xaa; *(nonce + 2) = 0xaa;
    EXPECT_TRUE(decrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, lib_its_security_context->private_key, ephemeral_key_compressed, ephemeral_compressed_mode, encrypted_sym_key, authentication_vector, nonce, salt, salt_length, &new_aes_enc_sym_key, &new_plain_text_message, &new_plain_text_message_length) == -1);
    free(new_plain_text_message);
    free(new_aes_enc_sym_key);

    // Postamble
    free(plain_text_message);
    free(salt);
    free(aes_sym_key);
    free(encrypted_sym_key);
    free(authentication_vector);
    free(nonce);
    free(encrypted_secured_message);
    free(ephemeral_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_with_ecies_brainpoolp256r1_with_sha256_6) {
    // 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(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);

    size_t plain_text_message_length;
    uint8_t* plain_text_message = hex_to_bin((const int8_t*)"03810040038081BC01800381004003806400104553435259505400000000000000001101008082671439CBFB6E69370113B14E077A6097AACC62945C122D402A6975AF6FF3DAA77C8110455343525950540000000000000000111DCCE0F98400788301028000FA80017C00010180012481030201C04002026F0001C6B773D2F2B0828080217B7AA6442D85721A9DB6F0C2E307BEC1795B33E6957055F504F8F7A5DD1A956788F6A1146998DA44EC4756C8DB2AB46EBD1D3BAB6894FE8667594FAE2B24374002026F0001C6B773D33130828080AE1B9F9D16A35646C4C84CE4A4C3B50C84125356A74A94B009750941DC94A9DB6D91A2B75633AB573B3369C0DE7CCBD44EC08ABB268EA341FCBB53757E5B7589", &plain_text_message_length);
    size_t salt_length;
    uint8_t* salt = hex_to_bin((const int8_t*)"4739DA8E1723A178CCF278763454DAE55B67208F1D9DCB312BDA08D4402BDEAA", &salt_length);
    /* Encrypt */
    uint8_t* ephemeral_key_compressed = NULL;
    ecc_compressed_mode_t ephemeral_compressed_mode = compressed_y_0;
    uint8_t* aes_sym_key = NULL;
    uint8_t* encrypted_sym_key = NULL;
    uint8_t* authentication_vector = NULL;
    uint8_t* nonce = NULL;
    uint8_t* encrypted_secured_message = NULL;
    size_t encrypted_secured_message_length = 0;
    EXPECT_TRUE(encrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context/*recipient's public keys*/, plain_text_message, plain_text_message_length, lib_its_security_context->public_key_c, lib_its_security_context->compressed_mode, salt, salt_length, &ephemeral_key_compressed, &ephemeral_compressed_mode, &aes_sym_key, &encrypted_sym_key, &authentication_vector, &nonce, &encrypted_secured_message, &encrypted_secured_message_length) == 0);

    // Test body
    size_t new_plain_text_message_length = 0;
    uint8_t* new_plain_text_message = NULL;
    uint8_t* new_aes_enc_sym_key = NULL;
    *(ephemeral_key_compressed + 1) = 0xaa; *(ephemeral_key_compressed + 2) = 0xaa;
    EXPECT_TRUE(decrypt_with_ecies_brainpoolp256r1_with_sha256(lib_its_security_context, encrypted_secured_message, encrypted_secured_message_length, lib_its_security_context->private_key, ephemeral_key_compressed, ephemeral_compressed_mode, encrypted_sym_key, authentication_vector, nonce, salt, salt_length, &new_aes_enc_sym_key, &new_plain_text_message, &new_plain_text_message_length) == -1);
    free(new_plain_text_message);
    free(new_aes_enc_sym_key);

    // Postamble
    free(plain_text_message);
    free(salt);
    free(aes_sym_key);
    free(encrypted_sym_key);
    free(authentication_vector);
    free(nonce);
    free(encrypted_secured_message);
    free(ephemeral_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);
}

/**
 * @brief Main test program
 * @param[in] p_argc Number of argumrnt
 * @param[in] p_argv List of the arguments
 */
int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}