mirror of
https://github.com/monero-project/monero.git
synced 2026-01-02 07:50:16 -08:00
rct: make the amount key derivable by a third party with the tx key
Scheme design from luigi1114.
This commit is contained in:
@@ -741,22 +741,28 @@ void fe_mul(fe h,const fe f,const fe g)
|
||||
|
||||
//Elliptic Curve Diffie Helman: encodes and decodes the amount b and mask a
|
||||
// where C= aG + bH
|
||||
void ecdhEncode(ecdhTuple & unmasked, const key & receiverPk) {
|
||||
key esk;
|
||||
//compute shared secret
|
||||
skpkGen(esk, unmasked.senderPk);
|
||||
key sharedSec1 = hash_to_scalar(scalarmultKey(receiverPk, esk));
|
||||
void ecdhEncodeFromSharedSecret(ecdhTuple & unmasked, const key & sharedSec1) {
|
||||
key sharedSec2 = hash_to_scalar(sharedSec1);
|
||||
//encode
|
||||
sc_add(unmasked.mask.bytes, unmasked.mask.bytes, sharedSec1.bytes);
|
||||
sc_add(unmasked.amount.bytes, unmasked.amount.bytes, sharedSec2.bytes);
|
||||
}
|
||||
void ecdhDecode(ecdhTuple & masked, const key & receiverSk) {
|
||||
void ecdhEncode(ecdhTuple & unmasked, const key & receiverPk) {
|
||||
key esk;
|
||||
//compute shared secret
|
||||
key sharedSec1 = hash_to_scalar(scalarmultKey(masked.senderPk, receiverSk));
|
||||
skpkGen(esk, unmasked.senderPk);
|
||||
key sharedSec1 = hash_to_scalar(scalarmultKey(receiverPk, esk));
|
||||
ecdhEncodeFromSharedSecret(unmasked, sharedSec1);
|
||||
}
|
||||
void ecdhDecodeFromSharedSecret(ecdhTuple & masked, const key & sharedSec1) {
|
||||
key sharedSec2 = hash_to_scalar(sharedSec1);
|
||||
//encode
|
||||
//decode
|
||||
sc_sub(masked.mask.bytes, masked.mask.bytes, sharedSec1.bytes);
|
||||
sc_sub(masked.amount.bytes, masked.amount.bytes, sharedSec2.bytes);
|
||||
}
|
||||
void ecdhDecode(ecdhTuple & masked, const key & receiverSk) {
|
||||
//compute shared secret
|
||||
key sharedSec1 = hash_to_scalar(scalarmultKey(masked.senderPk, receiverSk));
|
||||
ecdhDecodeFromSharedSecret(masked, sharedSec1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user