revert Preserve commitment format inside transactions #8277

This commit is contained in:
wowario 2023-02-03 01:14:11 +03:00
parent 4f53308b8a
commit 5c42087ec3
No known key found for this signature in database
GPG Key ID: 24DCBE762DE9C111
4 changed files with 28 additions and 6 deletions

View File

@ -241,8 +241,15 @@ void BlockchainDB::add_transaction(const crypto::hash& blk_hash, const std::pair
}
else
{
rct::key commitment;
if (tx.version > 1)
{
commitment = tx.rct_signatures.outPk[i].mask;
if (rct::is_rct_bulletproof_plus(tx.rct_signatures.type))
commitment = rct::scalarmult8(commitment);
}
amount_output_indices[i] = add_output(tx_hash, tx.vout[i], i, tx.unlock_time,
tx.version > 1 ? &tx.rct_signatures.outPk[i].mask : NULL);
tx.version > 1 ? &commitment : NULL);
}
}
add_tx_amount_output_indices(tx_id, amount_output_indices);

View File

@ -190,7 +190,7 @@ namespace cryptonote
CHECK_AND_ASSERT_MES(n_amounts == rv.outPk.size(), false, "Internal error filling out V");
rv.p.bulletproofs_plus[0].V.resize(n_amounts);
for (size_t i = 0; i < n_amounts; ++i)
rv.p.bulletproofs_plus[0].V[i] = rct::scalarmultKey(rv.outPk[i].mask, rct::INV_EIGHT);
rv.p.bulletproofs_plus[0].V[i] = rv.outPk[i].mask;
}
else if (bulletproof)
{

View File

@ -1196,6 +1196,9 @@ namespace rct {
}
for (i = 0; i < outamounts.size(); ++i)
{
if (plus)
rv.outPk[i].mask = C[i];
else
rv.outPk[i].mask = rct::scalarmult8(C[i]);
outSk[i].mask = masks[i];
}
@ -1234,6 +1237,9 @@ namespace rct {
}
for (i = 0; i < batch_size; ++i)
{
if (plus)
rv.outPk[i + amounts_proved].mask = C[i];
else
rv.outPk[i + amounts_proved].mask = rct::scalarmult8(C[i]);
outSk[i + amounts_proved].mask = masks[i];
}
@ -1440,6 +1446,9 @@ namespace rct {
rct::keyV masks(rv.outPk.size());
for (size_t i = 0; i < rv.outPk.size(); i++) {
if (bulletproof_plus)
masks[i] = rct::scalarmult8(rv.outPk[i].mask);
else
masks[i] = rv.outPk[i].mask;
}
key sumOutpks = addKeys(masks);
@ -1636,6 +1645,8 @@ namespace rct {
mask = ecdh_info.mask;
key amount = ecdh_info.amount;
key C = rv.outPk[i].mask;
if (is_rct_bulletproof_plus(rv.type))
C = scalarmult8(C);
DP("C");
DP(C);
key Ctmp;
@ -1667,6 +1678,8 @@ namespace rct {
mask = ecdh_info.mask;
key amount = ecdh_info.amount;
key C = rv.outPk[i].mask;
if (is_rct_bulletproof_plus(rv.type))
C = scalarmult8(C);
DP("C");
DP(C);
key Ctmp;

View File

@ -11637,7 +11637,9 @@ void wallet2::check_tx_key_helper(const cryptonote::transaction &tx, const crypt
crypto::derivation_to_scalar(found_derivation, n, scalar1);
rct::ecdhTuple ecdh_info = tx.rct_signatures.ecdhInfo[n];
rct::ecdhDecode(ecdh_info, rct::sk2rct(scalar1), tx.rct_signatures.type == rct::RCTTypeBulletproof2 || tx.rct_signatures.type == rct::RCTTypeCLSAG || tx.rct_signatures.type == rct::RCTTypeBulletproofPlus);
const rct::key C = tx.rct_signatures.outPk[n].mask;
rct::key C = tx.rct_signatures.outPk[n].mask;
if (rct::is_rct_bulletproof_plus(tx.rct_signatures.type))
C = rct::scalarmult8(C);
rct::key Ctmp;
THROW_WALLET_EXCEPTION_IF(sc_check(ecdh_info.mask.bytes) != 0, error::wallet_internal_error, "Bad ECDH input mask");
THROW_WALLET_EXCEPTION_IF(sc_check(ecdh_info.amount.bytes) != 0, error::wallet_internal_error, "Bad ECDH input amount");