mirror of
https://github.com/cuberite/polarssl.git
synced 2025-09-29 08:24:11 -04:00
Test extra inputs and outputs at the end of J-PAKE
Add tests for supplying inputs or requesting outputs when a J-PAKE computation has already completed Signed-off-by: David Horstmann <david.horstmann@arm.com>
This commit is contained in:
parent
a62d712cf8
commit
25c907071f
@ -218,6 +218,14 @@ PSA PAKE: inject ERR_INJECT_EXTRA_INPUT
|
|||||||
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR:PSA_WANT_ECC_SECP_R1_256:PSA_WANT_ALG_SHA_256
|
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR:PSA_WANT_ECC_SECP_R1_256:PSA_WANT_ALG_SHA_256
|
||||||
ecjpake_rounds_inject:PSA_ALG_JPAKE:PSA_PAKE_PRIMITIVE(PSA_PAKE_PRIMITIVE_TYPE_ECC, PSA_ECC_FAMILY_SECP_R1, 256):PSA_ALG_SHA_256:1:"abcdef":ERR_INJECT_EXTRA_INPUT:PSA_ERROR_BAD_STATE
|
ecjpake_rounds_inject:PSA_ALG_JPAKE:PSA_PAKE_PRIMITIVE(PSA_PAKE_PRIMITIVE_TYPE_ECC, PSA_ECC_FAMILY_SECP_R1, 256):PSA_ALG_SHA_256:1:"abcdef":ERR_INJECT_EXTRA_INPUT:PSA_ERROR_BAD_STATE
|
||||||
|
|
||||||
|
PSA PAKE: inject ERR_INJECT_EXTRA_OUTPUT_AT_END
|
||||||
|
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR:PSA_WANT_ECC_SECP_R1_256:PSA_WANT_ALG_SHA_256
|
||||||
|
ecjpake_rounds_inject_second:PSA_ALG_JPAKE:PSA_PAKE_PRIMITIVE(PSA_PAKE_PRIMITIVE_TYPE_ECC, PSA_ECC_FAMILY_SECP_R1, 256):PSA_ALG_SHA_256:1:"abcdef":ERR_INJECT_EXTRA_OUTPUT_AT_END:PSA_ERROR_BAD_STATE
|
||||||
|
|
||||||
|
PSA PAKE: inject ERR_INJECT_EXTRA_INPUT_AT_END
|
||||||
|
depends_on:PSA_WANT_KEY_TYPE_ECC_KEY_PAIR:PSA_WANT_ECC_SECP_R1_256:PSA_WANT_ALG_SHA_256
|
||||||
|
ecjpake_rounds_inject_second:PSA_ALG_JPAKE:PSA_PAKE_PRIMITIVE(PSA_PAKE_PRIMITIVE_TYPE_ECC, PSA_ECC_FAMILY_SECP_R1, 256):PSA_ALG_SHA_256:0:"abcdef":ERR_INJECT_EXTRA_INPUT_AT_END:PSA_ERROR_BAD_STATE
|
||||||
|
|
||||||
PSA PAKE: ecjpake size macros
|
PSA PAKE: ecjpake size macros
|
||||||
depends_on:MBEDTLS_PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_LEGACY:PSA_WANT_ECC_SECP_R1_256
|
depends_on:MBEDTLS_PSA_WANT_KEY_TYPE_ECC_KEY_PAIR_LEGACY:PSA_WANT_ECC_SECP_R1_256
|
||||||
ecjpake_size_macros:
|
ecjpake_size_macros:
|
||||||
|
@ -42,6 +42,8 @@ typedef enum {
|
|||||||
ERR_INJECT_ROUND2_SERVER_ZK_PROOF,
|
ERR_INJECT_ROUND2_SERVER_ZK_PROOF,
|
||||||
ERR_INJECT_EXTRA_OUTPUT,
|
ERR_INJECT_EXTRA_OUTPUT,
|
||||||
ERR_INJECT_EXTRA_INPUT,
|
ERR_INJECT_EXTRA_INPUT,
|
||||||
|
ERR_INJECT_EXTRA_OUTPUT_AT_END,
|
||||||
|
ERR_INJECT_EXTRA_INPUT_AT_END,
|
||||||
/* erros issued from the .data file */
|
/* erros issued from the .data file */
|
||||||
ERR_IN_SETUP,
|
ERR_IN_SETUP,
|
||||||
ERR_IN_SET_USER,
|
ERR_IN_SET_USER,
|
||||||
@ -466,6 +468,16 @@ static void ecjpake_do_round(psa_algorithm_t alg, unsigned int primitive,
|
|||||||
buffer1 + buffer1_off);
|
buffer1 + buffer1_off);
|
||||||
DO_ROUND_UPDATE_OFFSETS(buffer1_off, c_x2s_pr_off, c_x2s_pr_len);
|
DO_ROUND_UPDATE_OFFSETS(buffer1_off, c_x2s_pr_off, c_x2s_pr_len);
|
||||||
|
|
||||||
|
if (client_input_first == 1) {
|
||||||
|
size_t extra_output_at_end_len;
|
||||||
|
DO_ROUND_CONDITIONAL_CHECK_FAILURE(
|
||||||
|
ERR_INJECT_EXTRA_OUTPUT_AT_END,
|
||||||
|
psa_pake_output(client, PSA_PAKE_STEP_KEY_SHARE,
|
||||||
|
buffer1 + c_a_off, 512 - c_a_off,
|
||||||
|
&extra_output_at_end_len));
|
||||||
|
(void) extra_output_at_end_len;
|
||||||
|
}
|
||||||
|
|
||||||
if (client_input_first == 0) {
|
if (client_input_first == 0) {
|
||||||
/* Client second round Input */
|
/* Client second round Input */
|
||||||
status = psa_pake_input(client, PSA_PAKE_STEP_KEY_SHARE,
|
status = psa_pake_input(client, PSA_PAKE_STEP_KEY_SHARE,
|
||||||
@ -503,6 +515,12 @@ static void ecjpake_do_round(psa_algorithm_t alg, unsigned int primitive,
|
|||||||
buffer1 + c_x2s_pr_off, c_x2s_pr_len);
|
buffer1 + c_x2s_pr_off, c_x2s_pr_len);
|
||||||
DO_ROUND_CHECK_FAILURE();
|
DO_ROUND_CHECK_FAILURE();
|
||||||
|
|
||||||
|
DO_ROUND_CONDITIONAL_CHECK_FAILURE(
|
||||||
|
ERR_INJECT_EXTRA_INPUT_AT_END,
|
||||||
|
psa_pake_input(server, PSA_PAKE_STEP_KEY_SHARE,
|
||||||
|
buffer1 + c_a_off, c_a_len));
|
||||||
|
|
||||||
|
|
||||||
/* Error didn't trigger, make test fail */
|
/* Error didn't trigger, make test fail */
|
||||||
if ((err_stage >= ERR_INJECT_ROUND2_CLIENT_KEY_SHARE) &&
|
if ((err_stage >= ERR_INJECT_ROUND2_CLIENT_KEY_SHARE) &&
|
||||||
(err_stage <= ERR_INJECT_ROUND2_CLIENT_ZK_PROOF)) {
|
(err_stage <= ERR_INJECT_ROUND2_CLIENT_ZK_PROOF)) {
|
||||||
@ -810,6 +828,63 @@ exit:
|
|||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
|
/* BEGIN_CASE depends_on:PSA_WANT_ALG_JPAKE */
|
||||||
|
/* Inject errors during the second round of J-PAKE */
|
||||||
|
void ecjpake_rounds_inject_second(int alg_arg, int primitive_arg, int hash_arg,
|
||||||
|
int client_input_first,
|
||||||
|
data_t *pw_data,
|
||||||
|
int err_stage_arg,
|
||||||
|
int expected_error_arg)
|
||||||
|
{
|
||||||
|
psa_pake_cipher_suite_t cipher_suite = psa_pake_cipher_suite_init();
|
||||||
|
psa_pake_operation_t server = psa_pake_operation_init();
|
||||||
|
psa_pake_operation_t client = psa_pake_operation_init();
|
||||||
|
psa_algorithm_t alg = alg_arg;
|
||||||
|
psa_algorithm_t hash_alg = hash_arg;
|
||||||
|
mbedtls_svc_key_id_t key = MBEDTLS_SVC_KEY_ID_INIT;
|
||||||
|
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
|
||||||
|
ecjpake_error_stage_t err_stage = err_stage_arg;
|
||||||
|
|
||||||
|
PSA_INIT();
|
||||||
|
|
||||||
|
psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_DERIVE);
|
||||||
|
psa_set_key_algorithm(&attributes, alg);
|
||||||
|
psa_set_key_type(&attributes, PSA_KEY_TYPE_PASSWORD);
|
||||||
|
|
||||||
|
PSA_ASSERT(psa_import_key(&attributes, pw_data->x, pw_data->len,
|
||||||
|
&key));
|
||||||
|
|
||||||
|
psa_pake_cs_set_algorithm(&cipher_suite, alg);
|
||||||
|
psa_pake_cs_set_primitive(&cipher_suite, primitive_arg);
|
||||||
|
psa_pake_cs_set_hash(&cipher_suite, hash_alg);
|
||||||
|
|
||||||
|
PSA_ASSERT(psa_pake_setup(&server, &cipher_suite));
|
||||||
|
PSA_ASSERT(psa_pake_setup(&client, &cipher_suite));
|
||||||
|
|
||||||
|
PSA_ASSERT(psa_pake_set_user(&server, jpake_server_id, sizeof(jpake_server_id)));
|
||||||
|
PSA_ASSERT(psa_pake_set_peer(&server, jpake_client_id, sizeof(jpake_client_id)));
|
||||||
|
PSA_ASSERT(psa_pake_set_user(&client, jpake_client_id, sizeof(jpake_client_id)));
|
||||||
|
PSA_ASSERT(psa_pake_set_peer(&client, jpake_server_id, sizeof(jpake_server_id)));
|
||||||
|
|
||||||
|
PSA_ASSERT(psa_pake_set_password_key(&server, key));
|
||||||
|
PSA_ASSERT(psa_pake_set_password_key(&client, key));
|
||||||
|
|
||||||
|
ecjpake_do_round(alg, primitive_arg, &server, &client,
|
||||||
|
client_input_first, PAKE_ROUND_ONE,
|
||||||
|
ERR_NONE, expected_error_arg);
|
||||||
|
|
||||||
|
ecjpake_do_round(alg, primitive_arg, &server, &client,
|
||||||
|
client_input_first, PAKE_ROUND_TWO,
|
||||||
|
err_stage, expected_error_arg);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
psa_destroy_key(key);
|
||||||
|
psa_pake_abort(&server);
|
||||||
|
psa_pake_abort(&client);
|
||||||
|
PSA_DONE();
|
||||||
|
}
|
||||||
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:PSA_WANT_ALG_JPAKE */
|
/* BEGIN_CASE depends_on:PSA_WANT_ALG_JPAKE */
|
||||||
void ecjpake_rounds(int alg_arg, int primitive_arg, int hash_arg,
|
void ecjpake_rounds(int alg_arg, int primitive_arg, int hash_arg,
|
||||||
int derive_alg_arg, data_t *pw_data,
|
int derive_alg_arg, data_t *pw_data,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user