From 516ce7998e0cf1280ade97c4d972ca53dac69803 Mon Sep 17 00:00:00 2001 From: Martin Schanzenbach Date: Fri, 6 Dec 2024 14:52:16 +0100 Subject: [PATCH] tests: start separating tests by cipher suite --- test/CMakeLists.txt | 16 +++- test/bbs_fix_generators.c | 135 +++++++++++++++----------------- test/bbs_fix_keygen.c | 88 ++++++++++----------- test/bbs_fix_msg_scalars.c | 22 ++---- test/bbs_fix_sign.c | 155 ++++++++++++++++++------------------- 5 files changed, 203 insertions(+), 213 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3cd9b37..2d00432 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,8 +16,13 @@ create_test_sourcelist(fixture-tests bbs-test-fixtures.c ${BBS_FIX_TESTS}) create_test_sourcelist(e2e-tests bbs-test-e2e.c ${BBS_E2E_TESTS}) create_test_sourcelist(bench-tests bbs-test-bench.c ${BBS_BENCH_TESTS}) -add_executable(bbs-test-fixtures ${fixture-tests} fixtures.c) -target_link_libraries(bbs-test-fixtures PRIVATE bbs) +add_executable(bbs-test-fixtures-suite-bls12-381-shake-256 ${fixture-tests} fixtures.c) +target_compile_definitions(bbs-test-fixtures-suite-bls12-381-shake-256 PUBLIC LIBBBS_TEST_SUITE_SHAKE256) +add_executable(bbs-test-fixtures-suite-bls12-381-sha-256 ${fixture-tests} fixtures.c) +target_compile_definitions(bbs-test-fixtures-suite-bls12-381-sha-256 PUBLIC LIBBBS_TEST_SUITE_SHA256) +#add_executable(bbs-test-fixtures ${fixture-tests} fixtures.c) +target_link_libraries(bbs-test-fixtures-suite-bls12-381-sha-256 PRIVATE bbs) +target_link_libraries(bbs-test-fixtures-suite-bls12-381-shake-256 PRIVATE bbs) add_executable(bbs-test-e2e ${e2e-tests}) target_link_libraries(bbs-test-e2e PRIVATE bbs) @@ -29,8 +34,13 @@ add_custom_target(bench COMMAND bbs-test-bench) foreach(test ${BBS_FIX_TESTS}) get_filename_component(TName ${test} NAME_WE) - add_test(NAME ${TName} COMMAND bbs-test-fixtures ${TName}) + add_test(NAME ${TName}-suite-bls12-381-shake-256 COMMAND bbs-test-fixtures-suite-bls12-381-shake-256 ${TName}) endforeach() +foreach(test ${BBS_FIX_TESTS}) + get_filename_component(TName ${test} NAME_WE) + add_test(NAME ${TName}-suite-bls12-381-sha-256 COMMAND bbs-test-fixtures-suite-bls12-381-sha-256 ${TName}) +endforeach() + foreach(test ${BBS_E2E_TESTS}) get_filename_component(TName ${test} NAME_WE) diff --git a/test/bbs_fix_generators.c b/test/bbs_fix_generators.c index 8abed13..0007350 100644 --- a/test/bbs_fix_generators.c +++ b/test/bbs_fix_generators.c @@ -10,97 +10,90 @@ typedef struct int bbs_fix_generators () { - bbs_cipher_suite_t *cipher_suites[] = { - bbs_sha256_cipher_suite, bbs_shake256_cipher_suite - }; - - bbs_fix_generators_fixture_t test_cases[] = { - { - .q_1 = fixture_bls12_381_sha_256_Q_1, - .hs = { - fixture_bls12_381_sha_256_H_1, fixture_bls12_381_sha_256_H_2, - fixture_bls12_381_sha_256_H_3, fixture_bls12_381_sha_256_H_4, - fixture_bls12_381_sha_256_H_5, fixture_bls12_381_sha_256_H_6, - fixture_bls12_381_sha_256_H_7, fixture_bls12_381_sha_256_H_8, - fixture_bls12_381_sha_256_H_9, fixture_bls12_381_sha_256_H_10 - }, +#ifdef LIBBBS_TEST_SUITE_SHAKE256 + bbs_cipher_suite_t *cipher_suite = bbs_shake256_cipher_suite; + bbs_fix_generators_fixture_t fixture = { + .q_1 = fixture_bls12_381_shake_256_Q_1, + .hs = { + fixture_bls12_381_shake_256_H_1, fixture_bls12_381_shake_256_H_2, + fixture_bls12_381_shake_256_H_3, fixture_bls12_381_shake_256_H_4, + fixture_bls12_381_shake_256_H_5, fixture_bls12_381_shake_256_H_6, + fixture_bls12_381_shake_256_H_7, fixture_bls12_381_shake_256_H_8, + fixture_bls12_381_shake_256_H_9, fixture_bls12_381_shake_256_H_10 }, - { - .q_1 = fixture_bls12_381_shake_256_Q_1, - .hs = { - fixture_bls12_381_shake_256_H_1, fixture_bls12_381_shake_256_H_2, - fixture_bls12_381_shake_256_H_3, fixture_bls12_381_shake_256_H_4, - fixture_bls12_381_shake_256_H_5, fixture_bls12_381_shake_256_H_6, - fixture_bls12_381_shake_256_H_7, fixture_bls12_381_shake_256_H_8, - fixture_bls12_381_shake_256_H_9, fixture_bls12_381_shake_256_H_10 - }, + }; +#elif LIBBBS_TEST_SUITE_SHA256 + bbs_cipher_suite_t *cipher_suite = bbs_sha256_cipher_suite; + bbs_fix_generators_fixture_t fixture = { + .q_1 = fixture_bls12_381_sha_256_Q_1, + .hs = { + fixture_bls12_381_sha_256_H_1, fixture_bls12_381_sha_256_H_2, + fixture_bls12_381_sha_256_H_3, fixture_bls12_381_sha_256_H_4, + fixture_bls12_381_sha_256_H_5, fixture_bls12_381_sha_256_H_6, + fixture_bls12_381_sha_256_H_7, fixture_bls12_381_sha_256_H_8, + fixture_bls12_381_sha_256_H_9, fixture_bls12_381_sha_256_H_10 }, }; +#endif + + printf("Testing %s\n", cipher_suite->cipher_suite_id); - for (int i = 0; i < 2; i++) + if (core_init () != RLC_OK) + { + core_clean (); + return 1; + } + if (pc_param_set_any () != RLC_OK) { - bbs_cipher_suite_t *cipher_suite = cipher_suites[i]; - bbs_fix_generators_fixture_t fixture = test_cases[i]; + core_clean (); + return 1; + } - printf("Testing %s\n", cipher_suite->cipher_suite_id); + uint8_t state[48 + 8]; + uint8_t bin[BBS_G1_ELEM_LEN]; + ep_t generator; + ep_null (generator); + RLC_TRY { + ep_new (generator); // Yes, this might leak. This is a test and thus + // short lived + } + RLC_CATCH_ANY { puts ("Internal Error"); return 1; } - if (core_init () != RLC_OK) - { - core_clean (); - return 1; - } - if (pc_param_set_any () != RLC_OK) - { - core_clean (); - return 1; - } + const uint8_t *api_id = (uint8_t *) cipher_suite->api_id; + const uint8_t api_id_len = cipher_suite->api_id_len; - uint8_t state[48 + 8]; - uint8_t bin[BBS_G1_ELEM_LEN]; - ep_t generator; - ep_null (generator); - RLC_TRY { - ep_new (generator); // Yes, this might leak. This is a test and thus - // short lived - } - RLC_CATCH_ANY { puts ("Internal Error"); return 1; } + if (BBS_OK != create_generator_init (cipher_suite, state, api_id, api_id_len)) + { + puts ("Error during generator initialization"); + return 1; + } - const uint8_t *api_id = (uint8_t *) cipher_suite->api_id; - const uint8_t api_id_len = cipher_suite->api_id_len; + DEBUG("TEST", state, 56); - if (BBS_OK != create_generator_init (cipher_suite, state, api_id, api_id_len)) - { - puts ("Error during generator initialization"); - return 1; - } + if (BBS_OK != create_generator_next (cipher_suite, state, generator, api_id, + api_id_len)) + { + puts ("Error during generator Q_1 creation"); + return 1; + } + RLC_TRY { + ep_write_bbs (bin, generator); + } RLC_CATCH_ANY { puts ("Internal Error"); return 1; } - DEBUG("TEST", state, 56); + ASSERT_EQ_PTR ("generator Q_1 creation", bin, fixture.q_1, BBS_G1_ELEM_LEN); + for (int j = 0; j < 10; j++) { if (BBS_OK != create_generator_next (cipher_suite, state, generator, api_id, - api_id_len)) + api_id_len)) { - puts ("Error during generator Q_1 creation"); + printf ("Error during generator %d creation", j + 1); return 1; } RLC_TRY { ep_write_bbs (bin, generator); } RLC_CATCH_ANY { puts ("Internal Error"); return 1; } - - ASSERT_EQ_PTR ("generator Q_1 creation", bin, fixture.q_1, BBS_G1_ELEM_LEN); - - for (int j = 0; j < 10; j++) { - if (BBS_OK != create_generator_next (cipher_suite, state, generator, api_id, - api_id_len)) - { - printf ("Error during generator %d creation", j + 1); - return 1; - } - RLC_TRY { - ep_write_bbs (bin, generator); - } RLC_CATCH_ANY { puts ("Internal Error"); return 1; } - ASSERT_EQ_PTR ("generator creation", bin, fixture.hs[j], BBS_G1_ELEM_LEN); - } + ASSERT_EQ_PTR ("generator creation", bin, fixture.hs[j], BBS_G1_ELEM_LEN); } return 0; } diff --git a/test/bbs_fix_keygen.c b/test/bbs_fix_keygen.c index 0c117fc..36422cd 100644 --- a/test/bbs_fix_keygen.c +++ b/test/bbs_fix_keygen.c @@ -5,11 +5,11 @@ typedef struct { bbs_cipher_suite_t *cipher_suite; uint8_t *key_material; - uint16_t key_material_len; + uint16_t key_material_len; uint8_t *key_info; - uint16_t key_info_len; + uint16_t key_info_len; uint8_t *key_dst; - uint16_t key_dst_len; + uint16_t key_dst_len; uint8_t *expected_SK; uint8_t *expected_PK; } bbs_fix_keygen_fixture_t; @@ -17,30 +17,31 @@ typedef struct int bbs_fix_keygen () { - bbs_fix_keygen_fixture_t test_cases[] = { - { - .cipher_suite = bbs_sha256_cipher_suite, - .key_material = fixture_bls12_381_sha_256_key_material, - .key_material_len = sizeof(fixture_bls12_381_sha_256_key_material), - .key_info = fixture_bls12_381_sha_256_key_info, - .key_info_len = sizeof(fixture_bls12_381_sha_256_key_info), - .key_dst = fixture_bls12_381_sha_256_key_dst, - .key_dst_len = sizeof(fixture_bls12_381_sha_256_key_dst), - .expected_SK = fixture_bls12_381_sha_256_SK, - .expected_PK = fixture_bls12_381_sha_256_PK, - },{ - .cipher_suite = bbs_shake256_cipher_suite, - .key_material = fixture_bls12_381_shake_256_key_material, - .key_material_len = sizeof(fixture_bls12_381_shake_256_key_material), - .key_info = fixture_bls12_381_shake_256_key_info, - .key_info_len = sizeof(fixture_bls12_381_shake_256_key_info), - .key_dst = fixture_bls12_381_shake_256_key_dst, - .key_dst_len = sizeof(fixture_bls12_381_shake_256_key_dst), - .expected_SK = fixture_bls12_381_shake_256_SK, - .expected_PK = fixture_bls12_381_shake_256_PK, - } +#ifdef LIBBBS_TEST_SUITE_SHAKE256 + bbs_fix_keygen_fixture_t fixture = { + .cipher_suite = bbs_shake256_cipher_suite, + .key_material = fixture_bls12_381_shake_256_key_material, + .key_material_len = sizeof(fixture_bls12_381_shake_256_key_material), + .key_info = fixture_bls12_381_shake_256_key_info, + .key_info_len = sizeof(fixture_bls12_381_shake_256_key_info), + .key_dst = fixture_bls12_381_shake_256_key_dst, + .key_dst_len = sizeof(fixture_bls12_381_shake_256_key_dst), + .expected_SK = fixture_bls12_381_shake_256_SK, + .expected_PK = fixture_bls12_381_shake_256_PK, }; - +#elif LIBBBS_TEST_SUITE_SHA256 + bbs_fix_keygen_fixture_t fixture = { + .cipher_suite = bbs_sha256_cipher_suite, + .key_material = fixture_bls12_381_sha_256_key_material, + .key_material_len = sizeof(fixture_bls12_381_sha_256_key_material), + .key_info = fixture_bls12_381_sha_256_key_info, + .key_info_len = sizeof(fixture_bls12_381_sha_256_key_info), + .key_dst = fixture_bls12_381_sha_256_key_dst, + .key_dst_len = sizeof(fixture_bls12_381_sha_256_key_dst), + .expected_SK = fixture_bls12_381_sha_256_SK, + .expected_PK = fixture_bls12_381_sha_256_PK, + }; +#endif if (core_init () != RLC_OK) { core_clean (); @@ -52,28 +53,23 @@ bbs_fix_keygen () return 1; } - for (int i = 0; i < 2; i++) + bbs_secret_key sk; + if (BBS_OK != bbs_keygen(fixture.cipher_suite, sk, fixture.key_material, fixture.key_material_len + , fixture.key_info, + fixture.key_info_len, fixture.key_dst, + fixture.key_dst_len)) { - bbs_fix_keygen_fixture_t fixture = test_cases[i]; - - bbs_secret_key sk; - if (BBS_OK != bbs_keygen(fixture.cipher_suite, sk, fixture.key_material, fixture.key_material_len - , fixture.key_info, - fixture.key_info_len, fixture.key_dst, - fixture.key_dst_len)) - { - puts ("Error during secret key generation"); - return 1; - } - ASSERT_EQ_PTR ("secret key generation", sk, fixture.expected_SK, BBS_SK_LEN); + puts ("Error during secret key generation"); + return 1; + } + ASSERT_EQ_PTR ("secret key generation", sk, fixture.expected_SK, BBS_SK_LEN); - bbs_public_key pk; - if (BBS_OK != bbs_sk_to_pk (fixture.cipher_suite, fixture.expected_SK, pk)) - { - puts ("Error during public key generation"); - return 1; - } - ASSERT_EQ_PTR ("public key generation", pk, fixture.expected_PK, BBS_PK_LEN); + bbs_public_key pk; + if (BBS_OK != bbs_sk_to_pk (fixture.cipher_suite, fixture.expected_SK, pk)) + { + puts ("Error during public key generation"); + return 1; } + ASSERT_EQ_PTR ("public key generation", pk, fixture.expected_PK, BBS_PK_LEN); return 0; } diff --git a/test/bbs_fix_msg_scalars.c b/test/bbs_fix_msg_scalars.c index a33b8b8..75d65dd 100644 --- a/test/bbs_fix_msg_scalars.c +++ b/test/bbs_fix_msg_scalars.c @@ -11,9 +11,9 @@ typedef struct int bbs_fix_msg_scalars () { - fixture_msg_scalar test_cases[] = { - { - .cipher_suite = bbs_sha256_cipher_suite, + fixture_msg_scalar fixture = { +#ifdef LIBBBS_TEST_SUITE_SHA256 + .cipher_suite = bbs_sha256_cipher_suite, .msg = { fixture_bls12_381_sha_256_msg_scalar_1, fixture_bls12_381_sha_256_msg_scalar_2, @@ -25,11 +25,10 @@ bbs_fix_msg_scalars () fixture_bls12_381_sha_256_msg_scalar_8, fixture_bls12_381_sha_256_msg_scalar_9, fixture_bls12_381_sha_256_msg_scalar_10, - }, + }, .msg_len = sizeof(fixture_bls12_381_sha_256_msg_scalar_1) - }, - { - .cipher_suite = bbs_shake256_cipher_suite, +#elif LIBBBS_TEST_SUITE_SHAKE256 + .cipher_suite = bbs_shake256_cipher_suite, .msg = { fixture_bls12_381_shake_256_msg_scalar_1, fixture_bls12_381_shake_256_msg_scalar_2, @@ -41,9 +40,9 @@ bbs_fix_msg_scalars () fixture_bls12_381_shake_256_msg_scalar_8, fixture_bls12_381_shake_256_msg_scalar_9, fixture_bls12_381_shake_256_msg_scalar_10, - }, + }, .msg_len = sizeof(fixture_bls12_381_shake_256_msg_scalar_1) - } +#endif }; uint8_t *fixture_ms[10] = { @@ -56,9 +55,6 @@ bbs_fix_msg_scalars () sizeof(fixture_m_9), sizeof(fixture_m_10) }; - for (int cipher_suite_index = 0; cipher_suite_index < 2; cipher_suite_index++) - { - fixture_msg_scalar fixture = test_cases[cipher_suite_index]; if (core_init () != RLC_OK) { core_clean (); @@ -96,8 +92,6 @@ bbs_fix_msg_scalars () } RLC_CATCH_ANY { puts ("Internal Error"); return 1; } ASSERT_EQ_PTR ("scalar 1 generation", bin, fixture.msg[i], fixture.msg_len); } - } - bn_free (scalar); return 0; } diff --git a/test/bbs_fix_sign.c b/test/bbs_fix_sign.c index bb94df2..7f7c16c 100644 --- a/test/bbs_fix_sign.c +++ b/test/bbs_fix_sign.c @@ -7,46 +7,46 @@ typedef struct uint8_t *signature1_SK; uint8_t *signature1_PK; uint8_t *signature1_header; - uint32_t signature1_header_len; + uint32_t signature1_header_len; uint8_t *signature1_m_1; - uint32_t signature1_m_1_len; + uint32_t signature1_m_1_len; uint8_t *signature1_signature; - uint32_t signature1_signature_len; + uint32_t signature1_signature_len; uint8_t *signature2_SK; uint8_t *signature2_PK; uint8_t *signature2_header; - uint32_t signature2_header_len; + uint32_t signature2_header_len; uint8_t *signature2_m_1; - uint32_t signature2_m_1_len; + uint32_t signature2_m_1_len; uint8_t *signature2_m_2; - uint32_t signature2_m_2_len; + uint32_t signature2_m_2_len; uint8_t *signature2_m_3; - uint32_t signature2_m_3_len; + uint32_t signature2_m_3_len; uint8_t *signature2_m_4; - uint32_t signature2_m_4_len; + uint32_t signature2_m_4_len; uint8_t *signature2_m_5; - uint32_t signature2_m_5_len; + uint32_t signature2_m_5_len; uint8_t *signature2_m_6; - uint32_t signature2_m_6_len; + uint32_t signature2_m_6_len; uint8_t *signature2_m_7; - uint32_t signature2_m_7_len; + uint32_t signature2_m_7_len; uint8_t *signature2_m_8; - uint32_t signature2_m_8_len; + uint32_t signature2_m_8_len; uint8_t *signature2_m_9; - uint32_t signature2_m_9_len; + uint32_t signature2_m_9_len; uint8_t *signature2_m_10; - uint32_t signature2_m_10_len; + uint32_t signature2_m_10_len; uint8_t *signature2_signature; - uint32_t signature2_signature_len; + uint32_t signature2_signature_len; } bbs_fix_sign_fixture_t; int bbs_fix_sign () { // *INDENT-OFF* - Preserve formatting - bbs_fix_sign_fixture_t fixtures[] = { - { +#ifdef LIBBBS_TEST_SUITE_SHAKE256 + bbs_fix_sign_fixture_t fixture = { .cipher_suite = bbs_shake256_cipher_suite, .signature1_SK = fixture_bls12_381_shake_256_signature1_SK, .signature1_PK = fixture_bls12_381_shake_256_signature1_PK, @@ -83,8 +83,9 @@ bbs_fix_sign () .signature2_m_10_len = sizeof(fixture_bls12_381_shake_256_signature2_m_10), .signature2_signature = fixture_bls12_381_shake_256_signature2_signature, .signature2_signature_len = sizeof(fixture_bls12_381_shake_256_signature2_signature), - }, - { + }; +#elif LIBBBS_TEST_SUITE_SHA256 + bbs_fix_sign_fixture_t fixture = { .cipher_suite = bbs_sha256_cipher_suite, .signature1_SK = fixture_bls12_381_sha_256_signature1_SK, .signature1_PK = fixture_bls12_381_sha_256_signature1_PK, @@ -121,72 +122,68 @@ bbs_fix_sign () .signature2_m_10_len = sizeof(fixture_bls12_381_sha_256_signature2_m_10), .signature2_signature = fixture_bls12_381_sha_256_signature2_signature, .signature2_signature_len = sizeof(fixture_bls12_381_sha_256_signature2_signature), - } }; +#endif // *INDENT-ON* - Preserve formatting - for (int cipher_suite_index = 0; cipher_suite_index < 2; cipher_suite_index++ ) + printf("Testing cipher suite %s\n", fixture.cipher_suite->cipher_suite_id); + if (core_init () != RLC_OK) + { + core_clean (); + return 1; + } + if (pc_param_set_any () != RLC_OK) { - bbs_fix_sign_fixture_t test_case = fixtures[cipher_suite_index]; - printf("Testing cipher suite %s\n", test_case.cipher_suite->cipher_suite_id); - if (core_init () != RLC_OK) - { - core_clean (); - return 1; - } - if (pc_param_set_any () != RLC_OK) - { - core_clean (); - return 1; - } + core_clean (); + return 1; + } - bbs_signature sig; - if (BBS_OK != bbs_sign(test_case.cipher_suite, test_case.signature1_SK, test_case.signature1_PK, sig, - test_case.signature1_header, - test_case.signature1_header_len, 1, // num_messages - test_case.signature1_m_1, - test_case.signature1_m_1_len)) - { - puts ("Error during signature 1 generation"); - return 1; - } - ASSERT_EQ_PTR ("signature 1 generation", - sig, - test_case.signature1_signature, - test_case.signature1_signature_len); + bbs_signature sig; + if (BBS_OK != bbs_sign(fixture.cipher_suite, fixture.signature1_SK, fixture.signature1_PK, sig, + fixture.signature1_header, + fixture.signature1_header_len, 1, // num_messages + fixture.signature1_m_1, + fixture.signature1_m_1_len)) + { + puts ("Error during signature 1 generation"); + return 1; + } + ASSERT_EQ_PTR ("signature 1 generation", + sig, + fixture.signature1_signature, + fixture.signature1_signature_len); - if (BBS_OK != bbs_sign(test_case.cipher_suite, test_case.signature2_SK, test_case.signature2_PK, sig, - test_case.signature2_header, - test_case.signature2_header_len, 10, - // num_messages - test_case.signature2_m_1, - test_case.signature2_m_1_len, - test_case.signature2_m_2, - test_case.signature2_m_2_len, - test_case.signature2_m_3, - test_case.signature2_m_3_len, - test_case.signature2_m_4, - test_case.signature2_m_4_len, - test_case.signature2_m_5, - test_case.signature2_m_5_len, - test_case.signature2_m_6, - test_case.signature2_m_6_len, - test_case.signature2_m_7, - test_case.signature2_m_7_len, - test_case.signature2_m_8, - test_case.signature2_m_8_len, - test_case.signature2_m_9, - test_case.signature2_m_9_len, - test_case.signature2_m_10, - test_case.signature2_m_10_len)) - { - puts ("Error during signature 2 generation"); - return 1; - } - ASSERT_EQ_PTR ("signature 2 generation", - sig, - test_case.signature2_signature, - test_case.signature2_signature_len); + if (BBS_OK != bbs_sign(fixture.cipher_suite, fixture.signature2_SK, fixture.signature2_PK, sig, + fixture.signature2_header, + fixture.signature2_header_len, 10, + // num_messages + fixture.signature2_m_1, + fixture.signature2_m_1_len, + fixture.signature2_m_2, + fixture.signature2_m_2_len, + fixture.signature2_m_3, + fixture.signature2_m_3_len, + fixture.signature2_m_4, + fixture.signature2_m_4_len, + fixture.signature2_m_5, + fixture.signature2_m_5_len, + fixture.signature2_m_6, + fixture.signature2_m_6_len, + fixture.signature2_m_7, + fixture.signature2_m_7_len, + fixture.signature2_m_8, + fixture.signature2_m_8_len, + fixture.signature2_m_9, + fixture.signature2_m_9_len, + fixture.signature2_m_10, + fixture.signature2_m_10_len)) + { + puts ("Error during signature 2 generation"); + return 1; } + ASSERT_EQ_PTR ("signature 2 generation", + sig, + fixture.signature2_signature, + fixture.signature2_signature_len); return 0; }