diff options
author | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-06-16 21:37:17 -0400 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-07-05 16:50:14 +0200 |
commit | 33e7b1f6627edde22ce547a7fd6f330f6856a53f (patch) | |
tree | 08b27da7bce50f31d42bff38fdf18ca7c6ea91c7 /src | |
parent | 6b85ad04fef6c956955ee179f5eb4f28841048db (diff) |
TALER_TESTING_cmd_admin_add_incoming_with_ref finds reserve_pub if reserve_priv doesn't exist
Diffstat (limited to 'src')
-rw-r--r-- | src/include/taler_testing_lib.h | 2 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_bank_admin_add_incoming.c | 112 |
2 files changed, 82 insertions, 32 deletions
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h index 53a004c8c..0cab44d94 100644 --- a/src/include/taler_testing_lib.h +++ b/src/include/taler_testing_lib.h @@ -1089,7 +1089,7 @@ TALER_TESTING_cmd_admin_add_incoming ( * @param payto_debit_account which account sends money. * @param auth authentication data * @param ref reference to a command that can offer a reserve - * private key. + * private key or public key. * @return the command. */ struct TALER_TESTING_Command diff --git a/src/testing/testing_api_cmd_bank_admin_add_incoming.c b/src/testing/testing_api_cmd_bank_admin_add_incoming.c index 2399825d9..d8b1d7b02 100644 --- a/src/testing/testing_api_cmd_bank_admin_add_incoming.c +++ b/src/testing/testing_api_cmd_bank_admin_add_incoming.c @@ -82,6 +82,11 @@ struct AdminAddIncomingState struct TALER_ReservePrivateKeyP reserve_priv; /** + * Whether we know the private key or not. + */ + bool reserve_priv_known; + + /** * Reserve public key matching @e reserve_priv. */ struct TALER_ReservePublicKeyP reserve_pub; @@ -271,6 +276,7 @@ admin_add_incoming_run (void *cls, struct TALER_TESTING_Interpreter *is) { struct AdminAddIncomingState *fts = cls; + bool have_public = false; (void) cmd; /* Use reserve public key as subject */ @@ -278,6 +284,7 @@ admin_add_incoming_run (void *cls, { const struct TALER_TESTING_Command *ref; const struct TALER_ReservePrivateKeyP *reserve_priv; + const struct TALER_ReservePublicKeyP *reserve_pub; ref = TALER_TESTING_interpreter_lookup_command (is, fts->reserve_reference); @@ -292,11 +299,23 @@ admin_add_incoming_run (void *cls, 0, &reserve_priv)) { - GNUNET_break (0); - TALER_TESTING_interpreter_fail (is); - return; + if (GNUNET_OK != TALER_TESTING_get_trait_reserve_pub (ref, + 0, + &reserve_pub)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (is); + return; + } + have_public = true; + fts->reserve_pub.eddsa_pub = reserve_pub->eddsa_pub; + fts->reserve_priv_known = false; + } + else + { + fts->reserve_priv.eddsa_priv = reserve_priv->eddsa_priv; + fts->reserve_priv_known = true; } - fts->reserve_priv.eddsa_priv = reserve_priv->eddsa_priv; } else { @@ -349,6 +368,7 @@ admin_add_incoming_run (void *cls, TALER_TESTING_interpreter_fail (is); return; } + fts->reserve_priv_known = true; GNUNET_free (keys); GNUNET_free (section); GNUNET_CONFIGURATION_destroy (cfg); @@ -358,10 +378,12 @@ admin_add_incoming_run (void *cls, /* No referenced reserve, no instance to take priv * from, no explicit subject given: create new key! */ GNUNET_CRYPTO_eddsa_key_create (&fts->reserve_priv.eddsa_priv); + fts->reserve_priv_known = true; } } - GNUNET_CRYPTO_eddsa_key_get_public (&fts->reserve_priv.eddsa_priv, - &fts->reserve_pub.eddsa_pub); + if (! have_public) + GNUNET_CRYPTO_eddsa_key_get_public (&fts->reserve_priv.eddsa_priv, + &fts->reserve_pub.eddsa_pub); fts->reserve_history.type = TALER_EXCHANGE_RTT_CREDIT; fts->reserve_history.amount = fts->amount; fts->reserve_history.details.in_details.sender_url @@ -432,30 +454,58 @@ admin_add_incoming_traits (void *cls, unsigned int index) { struct AdminAddIncomingState *fts = cls; - struct TALER_TESTING_Trait traits[] = { - TALER_TESTING_make_trait_bank_row (&fts->serial_id), - TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT, - fts->payto_debit_account), - /* Used as a marker, content does not matter */ - TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT, - "payto://void/the-exchange"), - TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL, - fts->exchange_credit_url), - TALER_TESTING_make_trait_amount_obj (0, &fts->amount), - TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp), - TALER_TESTING_make_trait_reserve_priv (0, - &fts->reserve_priv), - TALER_TESTING_make_trait_reserve_pub (0, - &fts->reserve_pub), - TALER_TESTING_make_trait_reserve_history (0, - &fts->reserve_history), - TALER_TESTING_trait_end () - }; - - return TALER_TESTING_get_trait (traits, - ret, - trait, - index); + if (fts->reserve_priv_known) + { + struct TALER_TESTING_Trait traits[] = { + TALER_TESTING_make_trait_bank_row (&fts->serial_id), + TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT, + fts->payto_debit_account), + /* Used as a marker, content does not matter */ + TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT, + "payto://void/the-exchange"), + TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL, + fts->exchange_credit_url), + TALER_TESTING_make_trait_amount_obj (0, &fts->amount), + TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp), + TALER_TESTING_make_trait_reserve_priv (0, + &fts->reserve_priv), + TALER_TESTING_make_trait_reserve_pub (0, + &fts->reserve_pub), + TALER_TESTING_make_trait_reserve_history (0, + &fts->reserve_history), + TALER_TESTING_trait_end () + }; + + return TALER_TESTING_get_trait (traits, + ret, + trait, + index); + } + else + { + struct TALER_TESTING_Trait traits[] = { + TALER_TESTING_make_trait_bank_row (&fts->serial_id), + TALER_TESTING_make_trait_payto (TALER_TESTING_PT_DEBIT, + fts->payto_debit_account), + /* Used as a marker, content does not matter */ + TALER_TESTING_make_trait_payto (TALER_TESTING_PT_CREDIT, + "payto://void/the-exchange"), + TALER_TESTING_make_trait_url (TALER_TESTING_UT_EXCHANGE_BANK_ACCOUNT_URL, + fts->exchange_credit_url), + TALER_TESTING_make_trait_amount_obj (0, &fts->amount), + TALER_TESTING_make_trait_absolute_time (0, &fts->timestamp), + TALER_TESTING_make_trait_reserve_pub (0, + &fts->reserve_pub), + TALER_TESTING_make_trait_reserve_history (0, + &fts->reserve_history), + TALER_TESTING_trait_end () + }; + + return TALER_TESTING_get_trait (traits, + ret, + trait, + index); + } } @@ -548,7 +598,7 @@ TALER_TESTING_cmd_admin_add_incoming (const char *label, * @param payto_debit_account which account sends money * @param auth authentication data * @param ref reference to a command that can offer a reserve - * private key. + * private key or public key. * @return the command. */ struct TALER_TESTING_Command |