ringct: use Cryptonote serialization to hash non prunable data

This commit is contained in:
moneromooo-monero 2016-08-12 23:11:51 +01:00
parent c3b3260ae5
commit 074e602609
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3
1 changed files with 9 additions and 21 deletions

View File

@ -30,6 +30,8 @@
#include "misc_log_ex.h" #include "misc_log_ex.h"
#include "rctSigs.h" #include "rctSigs.h"
#include "cryptonote_core/cryptonote_format_utils.h"
using namespace crypto; using namespace crypto;
using namespace std; using namespace std;
@ -343,9 +345,12 @@ namespace rct {
key get_pre_mlsag_hash(const rctSig &rv) key get_pre_mlsag_hash(const rctSig &rv)
{ {
keyV hashes;
hashes.push_back(rv.message);
crypto::hash h;
cryptonote::get_blob_hash(cryptonote::t_serializable_object_to_blob((const rctSigBase&)rv), h);
hashes.push_back(hash2rct(h));
keyV kv; keyV kv;
kv.push_back(d2h(rv.type));
kv.push_back(rv.message);
for (auto r: rv.p.rangeSigs) for (auto r: rv.p.rangeSigs)
{ {
for (size_t n = 0; n < 64; ++n) for (size_t n = 0; n < 64; ++n)
@ -356,26 +361,9 @@ namespace rct {
for (size_t n = 0; n < 64; ++n) for (size_t n = 0; n < 64; ++n)
kv.push_back(r.Ci[n]); kv.push_back(r.Ci[n]);
} }
// no MG/MGs, that's what will sign all this hashes.push_back(cn_fast_hash(kv));
// no mixRing, it's part of the vin already
for (auto o: rv.pseudoOuts)
{
kv.push_back(o);
}
for (auto i: rv.ecdhInfo)
{
kv.push_back(i.mask);
kv.push_back(i.amount);
// no senderPk, unused here
}
for (auto o: rv.outPk)
{
kv.push_back(o.dest);
kv.push_back(o.mask);
}
kv.push_back(d2h(rv.txnFee));
return cn_fast_hash(kv); return cn_fast_hash(hashes);
} }
//Ring-ct MG sigs //Ring-ct MG sigs