diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tests/test_pkcs11.h | 7 | ||||
-rw-r--r-- | src/tests/test_pkcs11_high_level.cpp | 125 | ||||
-rw-r--r-- | src/tests/test_pkcs11_low_level.cpp | 78 |
3 files changed, 90 insertions, 120 deletions
diff --git a/src/tests/test_pkcs11.h b/src/tests/test_pkcs11.h index d3922f635..696fcc6ae 100644 --- a/src/tests/test_pkcs11.h +++ b/src/tests/test_pkcs11.h @@ -8,8 +8,6 @@ #ifndef BOTAN_TESTS_PKCS11_H_ #define BOTAN_TESTS_PKCS11_H_ -#define STRING_AND_FUNCTION(x) #x, x - #include "tests.h" #if defined(BOTAN_HAS_PKCS11) @@ -23,6 +21,8 @@ namespace Botan_Tests { #if defined(BOTAN_HAS_PKCS11) +#define STRING_AND_FUNCTION(x) #x, x + // PIN is expected to be set to "123456" prior to running the tests const std::string PKCS11_USER_PIN = "123456"; // SO PIN is expected to be set to "12345678" prior to running the tests @@ -57,6 +57,9 @@ inline Botan::PKCS11::secure_string TEST_SO_PIN() return to_sec_string(PKCS11_TEST_SO_PIN); } +std::vector<Test::Result> run_pkcs11_tests(const std::string& name, + std::vector<std::pair<std::string, std::function<Test::Result()>>>& fns); + #endif } diff --git a/src/tests/test_pkcs11_high_level.cpp b/src/tests/test_pkcs11_high_level.cpp index 2d6fd947f..0b25ad415 100644 --- a/src/tests/test_pkcs11_high_level.cpp +++ b/src/tests/test_pkcs11_high_level.cpp @@ -57,10 +57,40 @@ namespace Botan_Tests { -namespace { - #if defined(BOTAN_HAS_PKCS11) +std::vector<Test::Result> run_pkcs11_tests( + const std::string& name, + std::vector<std::pair<std::string, std::function<Test::Result()>>>& fns) + { + std::vector<Test::Result> results; + + for(size_t i = 0; i != fns.size(); ++i) + { + try + { + results.push_back(fns[i].second()); + } + catch(Botan::PKCS11::PKCS11_ReturnError& e) + { + results.push_back(Test::Result::Failure(name + " test " + fns[i].first, e.what())); + + if(e.get_return_value() == Botan::PKCS11::ReturnValue::PinIncorrect) + { + break; // Do not continue to not potentially lock the token + } + } + catch(std::exception& e) + { + results.push_back(Test::Result::Failure(name + " test " + fns[i].first, e.what())); + } + } + + return results; + } + +namespace { + using namespace Botan; using namespace PKCS11; @@ -146,36 +176,6 @@ Test::Result test_module_get_info() return result; } -std::vector<Test::Result> run_pkcs11_tests( - const std::string& name, - std::vector<std::pair<std::string, std::function<Test::Result()>>>& fns) - { - std::vector<Test::Result> results; - - for(size_t i = 0; i != fns.size(); ++i) - { - try - { - results.push_back(fns[i].second()); - } - catch(Botan::PKCS11::PKCS11_ReturnError& e) - { - results.push_back(Test::Result::Failure(name + " test " + fns[i].first, e.what())); - - if(e.get_return_value() == Botan::PKCS11::ReturnValue::PinIncorrect) - { - break; // Do not continue to not potentially lock the token - } - } - catch(std::exception& e) - { - results.push_back(Test::Result::Failure(name + " test " + fns[i].first, e.what())); - } - } - - return results; - } - class Module_Tests final : public Test { public: @@ -318,15 +318,14 @@ class Slot_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { - {STRING_AND_FUNCTION(test_slot_get_available_slots)}, - {STRING_AND_FUNCTION(test_slot_ctor)}, - {STRING_AND_FUNCTION(test_get_slot_info)}, - {STRING_AND_FUNCTION(test_slot_invalid_id)}, - {STRING_AND_FUNCTION(test_get_token_info)}, - {STRING_AND_FUNCTION(test_get_mechanism_list)}, - {STRING_AND_FUNCTION(test_get_mechanisms_info)} + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { + {STRING_AND_FUNCTION(test_slot_get_available_slots)}, + {STRING_AND_FUNCTION(test_slot_ctor)}, + {STRING_AND_FUNCTION(test_get_slot_info)}, + {STRING_AND_FUNCTION(test_slot_invalid_id)}, + {STRING_AND_FUNCTION(test_get_token_info)}, + {STRING_AND_FUNCTION(test_get_mechanism_list)}, + {STRING_AND_FUNCTION(test_get_mechanisms_info)} }; return run_pkcs11_tests("Slot", fns); @@ -453,14 +452,13 @@ class Session_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { {STRING_AND_FUNCTION(test_session_ctor)}, {STRING_AND_FUNCTION(test_session_ctor_invalid_slot)}, {STRING_AND_FUNCTION(test_session_release)}, {STRING_AND_FUNCTION(test_session_login_logout)}, {STRING_AND_FUNCTION(test_session_info)} - }; + }; return run_pkcs11_tests("Session", fns); } @@ -649,8 +647,7 @@ class Object_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { {STRING_AND_FUNCTION(test_attribute_container)} #if defined(BOTAN_HAS_ASN1) , {STRING_AND_FUNCTION(test_create_destroy_data_object)} @@ -658,7 +655,7 @@ class Object_Tests final : public Test , {STRING_AND_FUNCTION(test_object_finder)} , {STRING_AND_FUNCTION(test_object_copy)} #endif - }; + }; return run_pkcs11_tests("Object", fns); } @@ -910,8 +907,7 @@ class PKCS11_RSA_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { {STRING_AND_FUNCTION(test_rsa_privkey_import)}, {STRING_AND_FUNCTION(test_rsa_pubkey_import)}, {STRING_AND_FUNCTION(test_rsa_privkey_export)}, @@ -919,7 +915,7 @@ class PKCS11_RSA_Tests final : public Test {STRING_AND_FUNCTION(test_rsa_generate_key_pair)}, {STRING_AND_FUNCTION(test_rsa_encrypt_decrypt)}, {STRING_AND_FUNCTION(test_rsa_sign_verify)} - }; + }; return run_pkcs11_tests("PKCS11 RSA", fns); } @@ -1184,8 +1180,7 @@ class PKCS11_ECDSA_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { {STRING_AND_FUNCTION(test_ecdsa_privkey_import)}, {STRING_AND_FUNCTION(test_ecdsa_privkey_export)}, {STRING_AND_FUNCTION(test_ecdsa_pubkey_import)}, @@ -1194,7 +1189,7 @@ class PKCS11_ECDSA_Tests final : public Test {STRING_AND_FUNCTION(test_ecdsa_generate_keypair)}, {STRING_AND_FUNCTION(test_ecdsa_sign_verify)}, {STRING_AND_FUNCTION(test_ecdsa_curve_import)} - }; + }; return run_pkcs11_tests("PKCS11 ECDSA", fns); } @@ -1416,8 +1411,7 @@ class PKCS11_ECDH_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { {STRING_AND_FUNCTION(test_ecdh_privkey_import)}, {STRING_AND_FUNCTION(test_ecdh_privkey_export)}, {STRING_AND_FUNCTION(test_ecdh_pubkey_import)}, @@ -1425,7 +1419,7 @@ class PKCS11_ECDH_Tests final : public Test {STRING_AND_FUNCTION(test_ecdh_generate_private_key)}, {STRING_AND_FUNCTION(test_ecdh_generate_keypair)}, {STRING_AND_FUNCTION(test_ecdh_derive)} - }; + }; return run_pkcs11_tests("PKCS11 ECDH", fns); } @@ -1505,13 +1499,12 @@ class PKCS11_RNG_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { - {STRING_AND_FUNCTION(test_rng_generate_random)} - , {STRING_AND_FUNCTION(test_rng_add_entropy)} + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { #if defined(BOTAN_HAS_HMAC_DRBG )&& defined(BOTAN_HAS_SHA2_64) - , {STRING_AND_FUNCTION(test_pkcs11_hmac_drbg)} + {STRING_AND_FUNCTION(test_pkcs11_hmac_drbg)}, #endif + {STRING_AND_FUNCTION(test_rng_generate_random)}, + {STRING_AND_FUNCTION(test_rng_add_entropy)} }; return run_pkcs11_tests("PKCS11 RNG", fns); @@ -1592,13 +1585,12 @@ class PKCS11_Token_Management_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { {STRING_AND_FUNCTION(test_set_pin)}, {STRING_AND_FUNCTION(test_initialize)}, {STRING_AND_FUNCTION(test_change_pin)}, {STRING_AND_FUNCTION(test_change_so_pin)} - }; + }; return run_pkcs11_tests("PKCS11 token management", fns); } @@ -1640,10 +1632,9 @@ class PKCS11_X509_Tests final : public Test public: std::vector<Test::Result> run() override { - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { {STRING_AND_FUNCTION(test_x509_import)} - }; + }; return run_pkcs11_tests("PKCS11 X509", fns); } diff --git a/src/tests/test_pkcs11_low_level.cpp b/src/tests/test_pkcs11_low_level.cpp index 1b033433f..6cf3dcdd0 100644 --- a/src/tests/test_pkcs11_low_level.cpp +++ b/src/tests/test_pkcs11_low_level.cpp @@ -794,57 +794,33 @@ class LowLevelTests final : public Test public: std::vector<Test::Result> run() override { - std::vector<Test::Result> results; - - std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = - { - {STRING_AND_FUNCTION(test_c_get_function_list)} - , {STRING_AND_FUNCTION(test_low_level_ctor)} - , {STRING_AND_FUNCTION(test_initialize_finalize)} - , {STRING_AND_FUNCTION(test_c_get_info)} - , {STRING_AND_FUNCTION(test_c_get_slot_list)} - , {STRING_AND_FUNCTION(test_c_get_slot_info)} - , {STRING_AND_FUNCTION(test_c_get_token_info)} - , {STRING_AND_FUNCTION(test_c_wait_for_slot_event)} - , {STRING_AND_FUNCTION(test_c_get_mechanism_list)} - , {STRING_AND_FUNCTION(test_c_get_mechanism_info)} - , {STRING_AND_FUNCTION(test_open_close_session)} - , {STRING_AND_FUNCTION(test_c_close_all_sessions)} - , {STRING_AND_FUNCTION(test_c_get_session_info)} - , {STRING_AND_FUNCTION(test_c_init_token)} - , {STRING_AND_FUNCTION(test_c_login_logout_security_officier)} /* only possible if token is initialized */ - , {STRING_AND_FUNCTION(test_c_init_pin)} - , {STRING_AND_FUNCTION(test_c_login_logout_user)} /* only possible if token is initialized and user pin is set */ - , {STRING_AND_FUNCTION(test_c_set_pin)} - , {STRING_AND_FUNCTION(test_c_create_object_c_destroy_object)} - , {STRING_AND_FUNCTION(test_c_get_object_size)} - , {STRING_AND_FUNCTION(test_c_get_attribute_value)} - , {STRING_AND_FUNCTION(test_c_set_attribute_value)} - , {STRING_AND_FUNCTION(test_c_copy_object)} - }; - - for(size_t i = 0; i != fns.size(); ++i) - { - try - { - results.push_back(fns[i].second()); - } - catch(PKCS11_ReturnError& e) - { - results.push_back(Test::Result::Failure("PKCS11 low level test " + fns[i].first, e.what())); - - if(e.get_return_value() == ReturnValue::PinIncorrect) - { - break; // Do not continue to not potentially lock the token - } - } - catch(std::exception& e) - { - results.push_back(Test::Result::Failure("PKCS11 low level test " + fns[i].first, e.what())); - } - } - - return results; + std::vector<std::pair<std::string, std::function<Test::Result()>>> fns = { + {STRING_AND_FUNCTION(test_c_get_function_list)}, + {STRING_AND_FUNCTION(test_low_level_ctor)}, + {STRING_AND_FUNCTION(test_initialize_finalize)}, + {STRING_AND_FUNCTION(test_c_get_info)}, + {STRING_AND_FUNCTION(test_c_get_slot_list)}, + {STRING_AND_FUNCTION(test_c_get_slot_info)}, + {STRING_AND_FUNCTION(test_c_get_token_info)}, + {STRING_AND_FUNCTION(test_c_wait_for_slot_event)}, + {STRING_AND_FUNCTION(test_c_get_mechanism_list)}, + {STRING_AND_FUNCTION(test_c_get_mechanism_info)}, + {STRING_AND_FUNCTION(test_open_close_session)}, + {STRING_AND_FUNCTION(test_c_close_all_sessions)}, + {STRING_AND_FUNCTION(test_c_get_session_info)}, + {STRING_AND_FUNCTION(test_c_init_token)}, + {STRING_AND_FUNCTION(test_c_login_logout_security_officier)}, /* only possible if token is initialized */ + {STRING_AND_FUNCTION(test_c_init_pin)}, + {STRING_AND_FUNCTION(test_c_login_logout_user)}, /* only possible if token is initialized and user pin is set */ + {STRING_AND_FUNCTION(test_c_set_pin)}, + {STRING_AND_FUNCTION(test_c_create_object_c_destroy_object)}, + {STRING_AND_FUNCTION(test_c_get_object_size)}, + {STRING_AND_FUNCTION(test_c_get_attribute_value)}, + {STRING_AND_FUNCTION(test_c_set_attribute_value)}, + {STRING_AND_FUNCTION(test_c_copy_object)} + }; + + return run_pkcs11_tests("PKCS11 low level", fns); } }; |