diff options
Diffstat (limited to 'src/include/anastasis_testing_lib.h')
-rw-r--r-- | src/include/anastasis_testing_lib.h | 484 |
1 files changed, 136 insertions, 348 deletions
diff --git a/src/include/anastasis_testing_lib.h b/src/include/anastasis_testing_lib.h index a6c1fba..62cde06 100644 --- a/src/include/anastasis_testing_lib.h +++ b/src/include/anastasis_testing_lib.h @@ -3,14 +3,14 @@ Copyright (C) 2020 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -32,231 +32,125 @@ #define ANASTASIS_FAIL() \ do {GNUNET_break (0); return NULL; } while (0) -/** - * Index used in #ANASTASIS_TESTING_get_trait_hash() for the current hash. - */ -#define ANASTASIS_TESTING_TRAIT_HASH_CURRENT 0 - -/** - * Obtain a hash from @a cmd. - * - * @param cmd command to extract the number from. - * @param index the number's index number, use #ANASTASIS_TESTING_TRAIT_HASH_CURRENT - * @param[out] h set to the hash coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_hash (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct GNUNET_HashCode **h); - - -/** - * Offer a hash. - * - * @param index the number's index number. - * @param h the hash to offer. - * @return trait on success. - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_hash (unsigned int index, - const struct GNUNET_HashCode *h); - - -/** - * Obtain a truth decryption key from @a cmd. - * - * @param cmd command to extract the public key from. - * @param index usually 0 - * @param[out] key set to the account public key used in @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_truth_key ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_TruthKeyP **key); - - -/** - * Offer an truth decryption key. - * - * @param index usually zero - * @param h the account_pub to offer. - * @return trait on success. - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_truth_key ( - unsigned int index, - const struct ANASTASIS_CRYPTO_TruthKeyP *h); - - -/** - * Obtain an account public key from @a cmd. - * - * @param cmd command to extract the public key from. - * @param index usually 0 - * @param[out] pub set to the account public key used in @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_account_pub ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_AccountPublicKeyP **pub); - - -/** - * Offer an account public key. - * - * @param index usually zero - * @param h the account_pub to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_account_pub ( - unsigned int index, - const struct ANASTASIS_CRYPTO_AccountPublicKeyP *h); - - -/** - * Obtain an account private key from @a cmd. - * - * @param cmd command to extract the number from. - * @param index must be 0 - * @param[out] priv set to the account private key used in @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_account_priv ( - const struct - TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_AccountPrivateKeyP **priv); - /** - * Offer an account private key. - * - * @param index usually zero - * @param priv the account_priv to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_account_priv ( - unsigned int index, - const struct - ANASTASIS_CRYPTO_AccountPrivateKeyP *priv); - -/** - * Obtain an account public key from @a cmd. - * - * @param cmd command to extract the payment identifier from. - * @param index the payment identifier's index number. - * @param[out] payment_secret set to the payment secret coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_payment_secret ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_PaymentSecretP **payment_secret); - - -/** - * Offer a payment secret. - * - * @param index usually zero - * @param h the payment secret to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_payment_secret ( - unsigned int index, - const struct ANASTASIS_PaymentSecretP *h); + * Create headers for a trait with name @a name for + * statically allocated data of type @a type. + */ +#define ANASTASIS_TESTING_MAKE_DECL_SIMPLE_TRAIT(name,type) \ + enum GNUNET_GenericReturnValue \ + ANASTASIS_TESTING_get_trait_ ## name ( \ + const struct TALER_TESTING_Command *cmd, \ + type **ret); \ + struct TALER_TESTING_Trait \ + ANASTASIS_TESTING_make_trait_ ## name ( \ + type * value); + + +/** + * Create C implementation for a trait with name @a name for statically + * allocated data of type @a type. + */ +#define ANASTASIS_TESTING_MAKE_IMPL_SIMPLE_TRAIT(name,type) \ + enum GNUNET_GenericReturnValue \ + ANASTASIS_TESTING_get_trait_ ## name ( \ + const struct TALER_TESTING_Command *cmd, \ + type **ret) \ + { \ + if (NULL == cmd->traits) return GNUNET_SYSERR; \ + return cmd->traits (cmd->cls, \ + (const void **) ret, \ + TALER_S (name), \ + 0); \ + } \ + struct TALER_TESTING_Trait \ + ANASTASIS_TESTING_make_trait_ ## name ( \ + type * value) \ + { \ + struct TALER_TESTING_Trait ret = { \ + .trait_name = TALER_S (name), \ + .ptr = (const void *) value \ + }; \ + return ret; \ + } /** - * Obtain an truth UUID from @a cmd. - * - * @param cmd command to extract the number from. - * @param index the number's index number. - * @param[out] tpk set to the number coming from @a cmd. - * @return #GNUNET_OK on success. + * Create headers for a trait with name @a name for + * statically allocated data of type @a type. */ -int -ANASTASIS_TESTING_get_trait_truth_uuid ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_TruthUUIDP **tpk); +#define ANASTASIS_TESTING_MAKE_DECL_INDEXED_TRAIT(name,type) \ + enum GNUNET_GenericReturnValue \ + ANASTASIS_TESTING_get_trait_ ## name ( \ + const struct TALER_TESTING_Command *cmd, \ + unsigned int index, \ + type **ret); \ + struct TALER_TESTING_Trait \ + ANASTASIS_TESTING_make_trait_ ## name ( \ + unsigned int index, \ + type * value); /** - * Offer a truth UUID. - * - * @param index the number's index number. - * @param tpk the UUID to offer. - * @return trait on success + * Create C implementation for a trait with name @a name for statically + * allocated data of type @a type. */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_truth_uuid ( - unsigned int index, - const struct ANASTASIS_CRYPTO_TruthUUIDP *tpk); +#define ANASTASIS_TESTING_MAKE_IMPL_INDEXED_TRAIT(name,type) \ + enum GNUNET_GenericReturnValue \ + ANASTASIS_TESTING_get_trait_ ## name ( \ + const struct TALER_TESTING_Command *cmd, \ + unsigned int index, \ + type **ret) \ + { \ + if (NULL == cmd->traits) return GNUNET_SYSERR; \ + return cmd->traits (cmd->cls, \ + (const void **) ret, \ + TALER_S (name), \ + index); \ + } \ + struct TALER_TESTING_Trait \ + ANASTASIS_TESTING_make_trait_ ## name ( \ + unsigned int index, \ + type * value) \ + { \ + struct TALER_TESTING_Trait ret = { \ + .index = index, \ + .trait_name = TALER_S (name), \ + .ptr = (const void *) value \ + }; \ + return ret; \ + } /** - * Obtain an encrypted key share from @a cmd. - * - * @param cmd command to extract the number from. - * @param index the number's index number. - * @param[out] eks set to the key share coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_eks ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_EncryptedKeyShareP **eks); - - -/** - * Offer an encrypted key share. - * - * @param index the number's index number. - * @param eks the encrypted key share to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_eks ( - unsigned int index, - const struct ANASTASIS_CRYPTO_EncryptedKeyShareP *eks); - - -/** - * Obtain a code from @a cmd. - * - * @param cmd command to extract the number from. - * @param index the number's index number. - * @param[out] code set to the number coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_code ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const char **code); - - -/** - * Offer an authentication code. - * - * @param index the number's index number. - * @param code the code to offer. - * @return trait on success + * Call #op on all simple traits. */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_code (unsigned int index, - const char *code); +#define ANASTASIS_TESTING_SIMPLE_TRAITS(op) \ + op (hash, const struct GNUNET_HashCode) \ + op (truth, const struct ANASTASIS_Truth *) \ + op (policy, const struct ANASTASIS_Policy *) \ + op (provider_salt, const struct ANASTASIS_CRYPTO_ProviderSaltP) \ + op (core_secret, const void) \ + op (truth_key, const struct ANASTASIS_CRYPTO_TruthKeyP) \ + op (account_pub, const struct ANASTASIS_CRYPTO_AccountPublicKeyP) \ + op (account_priv, const struct ANASTASIS_CRYPTO_AccountPrivateKeyP) \ + op (payment_secret, const struct ANASTASIS_PaymentSecretP) \ + op (truth_uuid, const struct ANASTASIS_CRYPTO_TruthUUIDP) \ + op (eks, const struct ANASTASIS_CRYPTO_EncryptedKeyShareP) \ + op (code, const char) \ + op (filename, const char) + + +/** + * Call #op on all indexed traits. + */ +#define ANASTASIS_TESTING_INDEXED_TRAITS(op) \ + op (challenges, const struct ANASTASIS_Challenge *) + + +ANASTASIS_TESTING_SIMPLE_TRAITS (ANASTASIS_TESTING_MAKE_DECL_SIMPLE_TRAIT) + +ANASTASIS_TESTING_INDEXED_TRAITS (ANASTASIS_TESTING_MAKE_DECL_INDEXED_TRAIT) /** @@ -480,7 +374,7 @@ ANASTASIS_TESTING_cmd_truth_question ( /** - * Make the "keyshare lookup" command. + * Make a "truth challenge" command. * * @param label command label * @param anastasis_url base URL of the ANASTASIS serving @@ -488,48 +382,41 @@ ANASTASIS_TESTING_cmd_truth_question ( * @param answer (response to challenge) * @param payment_ref reference to the payment request * @param upload_ref reference to upload command - * @param lookup_mode 0 for security question, 1 for - * code-based - * @param ksdd expected status + * @param http_status expected HTTP status * @return the command */ struct TALER_TESTING_Command -ANASTASIS_TESTING_cmd_keyshare_lookup ( +ANASTASIS_TESTING_cmd_truth_challenge ( const char *label, const char *anastasis_url, - const char *answer, const char *payment_ref, const char *upload_ref, - int lookup_mode, - enum ANASTASIS_KeyShareDownloadStatus ksdd); - - -/** - * Obtain a salt from @a cmd. - * - * @param cmd command to extract the salt from. - * @param index the salt's index number. - * @param[out] s set to the salt coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_salt ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_ProviderSaltP **s); + unsigned int http_status); /** - * Offer an salt. + * Make a "truth solve" command. * - * @param index the salt's index number. - * @param s the salt to offer. - * @return trait on success + * @param label command label + * @param anastasis_url base URL of the ANASTASIS serving + * the keyshare lookup request. + * @param answer (response to challenge) + * @param payment_ref reference to the payment request + * @param upload_ref reference to upload command + * @param lookup_mode 0 for security question, 1 for + * code-based + * @param http_status expected HTTP status + * @return the command */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_salt ( - unsigned int index, - const struct ANASTASIS_CRYPTO_ProviderSaltP *s); +struct TALER_TESTING_Command +ANASTASIS_TESTING_cmd_truth_solve ( + const char *label, + const char *anastasis_url, + const char *answer, + const char *payment_ref, + const char *upload_ref, + int lookup_mode, + unsigned int http_status); /** @@ -549,31 +436,6 @@ ANASTASIS_TESTING_cmd_config (const char *label, /* ********************* test truth upload ********************* */ /** - * Obtain a truth from @a cmd. - * - * @param cmd command to extract the truth from. - * @param index the index of the truth - * @param[out] t set to the truth coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_truth (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_Truth **t); - - -/** - * Offer a truth. - * - * @param index the truth's index number. - * @param t the truth to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_truth (unsigned int index, - const struct ANASTASIS_Truth *t); - -/** * Creates a sample of id_data. * * @param id_data some sample data (e.g. AHV, name, surname, ...) @@ -642,31 +504,6 @@ ANASTASIS_TESTING_cmd_truth_upload_question ( /* ********************* test policy create ********************* */ -/** - * Obtain a policy from @a cmd. - * - * @param cmd command to extract the policy from. - * @param index the index of the policy - * @param[out] p set to the policy coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_policy (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_Policy **p); - - -/** - * Offer a policy. - * - * @param index the policy's index number. - * @param p the policy to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_policy (unsigned int index, - const struct ANASTASIS_Policy *p); - /** * Make the "policy create" command. @@ -682,31 +519,6 @@ ANASTASIS_TESTING_cmd_policy_create (const char *label, /* ********************* test secret share ********************* */ -/** - * Obtain the core secret from @a cmd. - * - * @param cmd command to extract the core secret from. - * @param index the index of the core secret (usually 0) - * @param[out] s set to the core secret coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_core_secret (const struct - TALER_TESTING_Command *cmd, - unsigned int index, - const void **s); - - -/** - * Offer the core secret. - * - * @param index the core secret's index number (usually 0). - * @param s the core secret to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_core_secret (unsigned int index, - const void *s); /** * Types of options for performing the secret sharing. Used as a bitmask. @@ -740,7 +552,7 @@ enum ANASTASIS_TESTING_SecretShareOption * @param id_data ID data to generate user identifier * @param core_secret core secret to backup/recover * @param core_secret_size size of @a core_secret - * @param http_status expected HTTP status. + * @param want_status expected status. * @param sso secret share options * @param ... NULL-terminated list of policy create commands * @return the command @@ -754,7 +566,7 @@ ANASTASIS_TESTING_cmd_secret_share ( const json_t *id_data, const void *core_secret, size_t core_secret_size, - unsigned int http_status, + enum ANASTASIS_ShareStatus want_status, enum ANASTASIS_TESTING_SecretShareOption sso, ...); @@ -824,30 +636,6 @@ ANASTASIS_TESTING_cmd_recover_secret_finish ( /* ********************* test challenge answer ********************* */ -/** - * Obtain a challenge from @a cmd. - * - * @param cmd command to extract the challenge from. - * @param index the index of the challenge - * @param[out] c set to the challenge coming from @a cmd. - * @return #GNUNET_OK on success. - */ -int -ANASTASIS_TESTING_get_trait_challenge (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_Challenge **c); - -/** - * Offer a challenge. - * - * @param index the challenge index number. - * @param r the challenge to offer. - * @return trait on success - */ -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_challenge (unsigned int index, - const struct ANASTASIS_Challenge *r); - /** * Create a "challenge start" command. Suitable for the "file" @@ -866,7 +654,7 @@ ANASTASIS_TESTING_cmd_challenge_start ( const char *payment_ref, const char *challenge_ref, unsigned int challenge_index, - enum ANASTASIS_ChallengeStatus expected_cs); + enum ANASTASIS_ChallengeStartStatus expected_cs); /** @@ -890,7 +678,7 @@ ANASTASIS_TESTING_cmd_challenge_answer ( unsigned int challenge_index, const char *answer, unsigned int mode, - enum ANASTASIS_ChallengeStatus expected_cs); + enum ANASTASIS_ChallengeAnswerStatus expected_cs); #endif |