fixed scalarmultKey() calls in Carrot-specific CLSAG code; added new signing function for T terms in CLSAG

This commit is contained in:
Some Random Crypto Guy
2025-05-29 14:12:54 +01:00
parent 3878e389fe
commit f7be7b843b
6 changed files with 32 additions and 12 deletions
+1
View File
@@ -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;
+12 -1
View File
@@ -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;
}
+2
View File
@@ -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;
};
+3
View File
@@ -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();
+1 -1
View File
@@ -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;