adding signature verification logic for new link signatures to libtalerexchange
This commit is contained in:
parent
3a2f72b4aa
commit
0be3dd4711
@ -1,6 +1,6 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2014-2017 Inria & GNUnet e.V.
|
||||
Copyright (C) 2014-2019 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Affero General Public License as published by the Free Software
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2014-2017 Inria & GNUnet e.V.
|
||||
Copyright (C) 2014-2019 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU Affero General Public License as published by the Free Software
|
||||
@ -730,7 +730,6 @@ handle_refresh_reveal_json (struct MHD_Connection *connection,
|
||||
GNUNET_CRYPTO_hash (rcds[i].coin_ev,
|
||||
rcds[i].coin_ev_size,
|
||||
&ldp.coin_envelope_hash);
|
||||
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_LINK,
|
||||
&ldp.purpose,
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2015, 2016, 2017 Taler Systems SA
|
||||
Copyright (C) 2015, 2016, 2017, 2019 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the Free Software
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2015, 2016 GNUnet e.V.
|
||||
Copyright (C) 2015, 2016, 2019 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the Free Software
|
||||
@ -93,9 +93,11 @@ parse_refresh_link_coin (const struct TALER_EXCHANGE_RefreshLinkHandle *rlh,
|
||||
{
|
||||
struct GNUNET_CRYPTO_RsaSignature *bsig;
|
||||
struct GNUNET_CRYPTO_RsaPublicKey *rpub;
|
||||
struct TALER_CoinSpendSignatureP link_sig;
|
||||
struct GNUNET_JSON_Specification spec[] = {
|
||||
GNUNET_JSON_spec_rsa_public_key ("denom_pub", &rpub),
|
||||
GNUNET_JSON_spec_rsa_signature ("ev_sig", &bsig),
|
||||
GNUNET_JSON_spec_fixed_auto ("link_sig", &link_sig),
|
||||
GNUNET_JSON_spec_end()
|
||||
};
|
||||
struct TALER_TransferSecretP secret;
|
||||
@ -124,6 +126,44 @@ parse_refresh_link_coin (const struct TALER_EXCHANGE_RefreshLinkHandle *rlh,
|
||||
= GNUNET_CRYPTO_rsa_unblind (bsig,
|
||||
&fc.blinding_key.bks,
|
||||
rpub);
|
||||
/* verify link_sig */
|
||||
{
|
||||
struct TALER_LinkDataPS ldp;
|
||||
struct TALER_PlanchetDetail pd;
|
||||
|
||||
ldp.purpose.size = htonl (sizeof (ldp));
|
||||
ldp.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_LINK);
|
||||
GNUNET_CRYPTO_eddsa_key_get_public (&rlh->coin_priv.eddsa_priv,
|
||||
&ldp.old_coin_pub.eddsa_pub);
|
||||
ldp.transfer_pub = *trans_pub;
|
||||
pub->rsa_public_key = rpub;
|
||||
if (GNUNET_OK !=
|
||||
TALER_planchet_prepare (pub,
|
||||
&fc,
|
||||
&pd))
|
||||
{
|
||||
GNUNET_break (0);
|
||||
GNUNET_JSON_parse_free (spec);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
ldp.h_denom_pub = pd.denom_pub_hash;
|
||||
GNUNET_CRYPTO_hash (pd.coin_ev,
|
||||
pd.coin_ev_size,
|
||||
&ldp.coin_envelope_hash);
|
||||
GNUNET_free (pd.coin_ev);
|
||||
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_WALLET_COIN_LINK,
|
||||
&ldp.purpose,
|
||||
&link_sig.eddsa_signature,
|
||||
&ldp.old_coin_pub.eddsa_pub))
|
||||
{
|
||||
GNUNET_break_op (0);
|
||||
GNUNET_JSON_parse_free (spec);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
}
|
||||
|
||||
/* clean up */
|
||||
pub->rsa_public_key = GNUNET_CRYPTO_rsa_public_key_dup (rpub);
|
||||
GNUNET_JSON_parse_free (spec);
|
||||
|
Loading…
Reference in New Issue
Block a user