mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-09 04:39:24 +00:00
Implement a CLSAG algorithm extension which also does key images
Practically, this should be mergeable. There's little reason to do a CLSAG and not also a key image. Keeps them isolated for now.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use rand::{RngCore, rngs::OsRng};
|
||||
|
||||
use curve25519_dalek::{constants::ED25519_BASEPOINT_TABLE, scalar::Scalar};
|
||||
use curve25519_dalek::{constants::ED25519_BASEPOINT_TABLE, scalar::Scalar, edwards::EdwardsPoint};
|
||||
|
||||
use monero_serai::{random_scalar, Commitment, frost::MultisigError, key_image, clsag};
|
||||
|
||||
@@ -39,17 +39,27 @@ fn test_single() {
|
||||
&vec![(
|
||||
secrets[0],
|
||||
clsag::Input::new(
|
||||
image,
|
||||
ring.clone(),
|
||||
RING_INDEX,
|
||||
Commitment::new(secrets[1], AMOUNT)
|
||||
).unwrap()
|
||||
).unwrap(),
|
||||
image
|
||||
)],
|
||||
Scalar::zero()
|
||||
).unwrap().swap_remove(0);
|
||||
assert!(clsag::verify(&clsag, &msg, image, &ring, pseudo_out));
|
||||
}
|
||||
|
||||
#[cfg(feature = "multisig")]
|
||||
#[derive(Clone, Debug)]
|
||||
struct Msg([u8; 32]);
|
||||
#[cfg(feature = "multisig")]
|
||||
impl clsag::Msg for Msg {
|
||||
fn msg(&self, _: EdwardsPoint) -> [u8; 32] {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "multisig")]
|
||||
#[test]
|
||||
fn test_multisig() -> Result<(), MultisigError> {
|
||||
@@ -58,8 +68,6 @@ fn test_multisig() -> Result<(), MultisigError> {
|
||||
|
||||
let msg = [1; 32];
|
||||
|
||||
let image = key_image::generate(&group_private.0);
|
||||
|
||||
let randomness = random_scalar(&mut OsRng);
|
||||
let mut ring = vec![];
|
||||
for i in 0 .. RING_LEN {
|
||||
@@ -79,13 +87,13 @@ fn test_multisig() -> Result<(), MultisigError> {
|
||||
}
|
||||
|
||||
let mut algorithms = Vec::with_capacity(t);
|
||||
for i in 1 ..= t {
|
||||
for _ in 1 ..= t {
|
||||
algorithms.push(
|
||||
clsag::Multisig::new(
|
||||
clsag::Input::new(image, ring.clone(), RING_INDEX, Commitment::new(randomness, AMOUNT)).unwrap()
|
||||
clsag::InputMultisig::new(
|
||||
clsag::Input::new(ring.clone(), RING_INDEX, Commitment::new(randomness, AMOUNT)).unwrap(),
|
||||
Msg(msg)
|
||||
).unwrap()
|
||||
);
|
||||
algorithms[i - 1].set_msg(msg);
|
||||
}
|
||||
|
||||
let mut signatures = sign(algorithms, keys);
|
||||
|
||||
Reference in New Issue
Block a user