add checks for /refresh/link result

This commit is contained in:
Christian Grothoff 2015-08-09 16:34:40 +02:00
parent f545cd0c41
commit 94b0b28994

View File

@ -21,7 +21,6 @@
* *
* TODO: * TODO:
* - test /refresh/-operations * - test /refresh/-operations
* - check coins returned by link_cb
*/ */
#include "platform.h" #include "platform.h"
#include "taler_util.h" #include "taler_util.h"
@ -981,6 +980,8 @@ link_cb (void *cls,
{ {
struct InterpreterState *is = cls; struct InterpreterState *is = cls;
struct Command *cmd = &is->commands[is->ip]; struct Command *cmd = &is->commands[is->ip];
const struct Command *ref;
unsigned int i;
cmd->details.refresh_link.rlh = NULL; cmd->details.refresh_link.rlh = NULL;
if (cmd->expected_response_code != http_status) if (cmd->expected_response_code != http_status)
@ -992,10 +993,37 @@ link_cb (void *cls,
fail (is); fail (is);
return; return;
} }
ref = find_command (is,
cmd->details.refresh_link.reveal_ref);
switch (http_status) switch (http_status)
{ {
case MHD_HTTP_OK: case MHD_HTTP_OK:
// FIXME: test returned values... /* check that number of coins returned matches */
if (num_coins != ref->details.refresh_reveal.num_fresh_coins)
{
GNUNET_break (0);
fail (is);
return;
}
/* check that the coins match */
for (i=0;i<num_coins;i++)
{
const struct FreshCoin *fc;
fc = &ref->details.refresh_reveal.fresh_coins[i];
if ( (0 != memcmp (&coin_privs[i],
&fc->coin_priv,
sizeof (struct TALER_CoinSpendPrivateKeyP))) ||
(0 != GNUNET_CRYPTO_rsa_signature_cmp (fc->sig.rsa_signature,
sigs[i].rsa_signature)) ||
(0 != GNUNET_CRYPTO_rsa_public_key_cmp (fc->pk->key.rsa_public_key,
pubs[i].rsa_public_key)) )
{
GNUNET_break (0);
fail (is);
return;
}
}
break; break;
default: default:
break; break;