fixed scalarmultKey() calls in Carrot-specific CLSAG code; added new signing function for T terms in CLSAG
This commit is contained in:
@@ -237,6 +237,7 @@ namespace hw {
|
||||
virtual bool clsag_sign(const rct::key &c, const rct::key &a, const rct::key &p, const rct::key &z, const rct::key &mu_P, const rct::key &mu_C, rct::key &s) = 0;
|
||||
|
||||
virtual bool clsag_prepare_carrot(const rct::key &p, const rct::key &z, rct::key &I, rct::key &D, const rct::key &H, rct::key &a, rct::key &aG, rct::key &b, rct::key &bT, rct::key &aH) = 0;
|
||||
virtual bool clsag_sign_y(const rct::key &c, const rct::key &b, const rct::key &y, const rct::key &mu_P, rct::key &s) = 0;
|
||||
|
||||
virtual bool close_tx(void) = 0;
|
||||
|
||||
|
||||
@@ -433,7 +433,7 @@ namespace hw {
|
||||
|
||||
// bT = b*T
|
||||
rct::skGen(b);
|
||||
bT = rct::scalarmultKey(b, rct::pk2rct(crypto::get_T()));
|
||||
bT = rct::scalarmultKey(rct::pk2rct(crypto::get_T()), b);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -454,6 +454,17 @@ namespace hw {
|
||||
return true;
|
||||
}
|
||||
|
||||
// In device_default.cpp (implementation)
|
||||
bool device_default::clsag_sign_y(const rct::key &c, const rct::key &b, const rct::key &y, const rct::key &mu_P, rct::key &s) {
|
||||
rct::key y_mu_P;
|
||||
sc_mul(y_mu_P.bytes, mu_P.bytes, y.bytes); // y_mu_P = y * mu_P
|
||||
|
||||
// s = b - c * (y * mu_P)
|
||||
// This is equivalent to: sc_sub(s.bytes, b.bytes, temp.bytes); where temp = c * y_mu_P
|
||||
sc_mulsub(s.bytes, c.bytes, y_mu_P.bytes, b.bytes);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool device_default::close_tx() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -141,6 +141,8 @@ namespace hw {
|
||||
bool clsag_sign(const rct::key &c, const rct::key &a, const rct::key &p, const rct::key &z, const rct::key &mu_P, const rct::key &mu_C, rct::key &s) override;
|
||||
|
||||
bool clsag_prepare_carrot(const rct::key &p, const rct::key &z, rct::key &I, rct::key &D, const rct::key &H, rct::key &a, rct::key &aG, rct::key &b, rct::key &bT, rct::key &aH);
|
||||
bool clsag_sign_y(const rct::key &c, const rct::key &b, const rct::key &y, const rct::key &mu_P, rct::key &s);
|
||||
|
||||
bool close_tx(void) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -2350,6 +2350,9 @@ namespace hw {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool device_ledger::clsag_sign_y(const rct::key &c, const rct::key &b, const rct::key &y, const rct::key &mu_P, rct::key &s) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool device_ledger::close_tx() {
|
||||
AUTO_LOCK_CMD();
|
||||
|
||||
@@ -283,7 +283,7 @@ namespace hw {
|
||||
bool clsag_sign(const rct::key &c, const rct::key &a, const rct::key &p, const rct::key &z, const rct::key &mu_P, const rct::key &mu_C, rct::key &s) override;
|
||||
|
||||
bool clsag_prepare_carrot(const rct::key &p, const rct::key &z, rct::key &I, rct::key &D, const rct::key &H, rct::key &a, rct::key &aG, rct::key &b, rct::key &bT, rct::key &aH) override;
|
||||
|
||||
bool clsag_sign_y(const rct::key &c, const rct::key &b, const rct::key &y, const rct::key &mu_P, rct::key &s) override;
|
||||
|
||||
bool close_tx(void) override;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user