Skip to content

Commit a852b0d

Browse files
committed
Added testing of a protocol with two non-linear relation (translated dleq)
1 parent 4ebf8d8 commit a852b0d

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

src/tests/relations.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rand::rngs::OsRng;
55
use crate::fiat_shamir::NISigmaProtocol;
66
use crate::tests::test_utils::{
77
bbs_blind_commitment_computation, discrete_logarithm, dleq, pedersen_commitment,
8-
pedersen_commitment_dleq, translated_discrete_logarithm,
8+
pedersen_commitment_dleq, translated_discrete_logarithm, translated_dleq,
99
};
1010
use crate::{codec::ShakeCodec, schnorr_protocol::SchnorrProof};
1111

@@ -29,6 +29,12 @@ fn test_dleq() {
2929
dleq(G::random(&mut rng), Scalar::random(&mut rng));
3030
}
3131

32+
#[test]
33+
fn test_translated_dleq() {
34+
let mut rng = OsRng;
35+
dleq(G::random(&mut rng), Scalar::random(&mut rng));
36+
}
37+
3238
#[test]
3339
fn test_pedersen_commitment() {
3440
let mut rng = OsRng;
@@ -111,7 +117,7 @@ fn noninteractive_translated_discrete_logarithm() {
111117
// The SigmaProtocol induced by relation
112118
let protocol = SchnorrProof::from(relation);
113119
// Fiat-Shamir wrapper
114-
let domain_sep = b"test-fiat-shamir-schnorr";
120+
let domain_sep = b"test-fiat-shamir-translated-schnorr";
115121
let nizk = NISigmaProtocol::<SchnorrProof<G>, ShakeCodec<G>>::new(domain_sep, protocol);
116122

117123
// Batchable and compact proofs
@@ -157,6 +163,33 @@ fn noninteractive_dleq() {
157163
);
158164
}
159165

166+
#[test]
167+
fn noninteractive_translated_dleq() {
168+
let mut rng = OsRng;
169+
let (relation, witness) = translated_dleq(G::random(&mut rng), Scalar::random(&mut rng));
170+
171+
// The SigmaProtocol induced by relation
172+
let protocol = SchnorrProof::from(relation);
173+
// Fiat-Shamir wrapper
174+
let domain_sep = b"test-fiat-shamir-translated-DLEQ";
175+
let nizk = NISigmaProtocol::<SchnorrProof<G>, ShakeCodec<G>>::new(domain_sep, protocol);
176+
177+
// Batchable and compact proofs
178+
let proof_batchable_bytes = nizk.prove_batchable(&witness, &mut rng).unwrap();
179+
let proof_compact_bytes = nizk.prove_compact(&witness, &mut rng).unwrap();
180+
// Verify proofs
181+
let verified_batchable = nizk.verify_batchable(&proof_batchable_bytes).is_ok();
182+
let verified_compact = nizk.verify_compact(&proof_compact_bytes).is_ok();
183+
assert!(
184+
verified_batchable,
185+
"Fiat-Shamir Schnorr proof verification failed"
186+
);
187+
assert!(
188+
verified_compact,
189+
"Fiat-Shamir Schnorr proof verification failed"
190+
);
191+
}
192+
160193
#[test]
161194
fn noninteractive_pedersen_commitment() {
162195
let mut rng = OsRng;

src/tests/test_utils.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,31 @@ pub fn dleq<G: Group + GroupEncoding>(H: G, x: G::Scalar) -> (LinearRelation<G>,
6969
(relation, vec![x])
7070
}
7171

72+
/// LinearMap for knowledge of a translated dleq.
73+
#[allow(non_snake_case)]
74+
pub fn translated_dleq<G: Group + GroupEncoding>(
75+
H: G,
76+
x: G::Scalar,
77+
) -> (LinearRelation<G>, Vec<G::Scalar>) {
78+
let mut relation: LinearRelation<G> = LinearRelation::new();
79+
80+
let var_x = relation.allocate_scalar();
81+
let [var_G, var_H] = relation.allocate_elements();
82+
83+
let var_X = relation.allocate_eq(var_x * var_G + var_H);
84+
let var_Y = relation.allocate_eq(var_x * var_H + var_G);
85+
86+
relation.set_elements([(var_G, G::generator()), (var_H, H)]);
87+
relation.compute_image(&[x]).unwrap();
88+
89+
let X = relation.linear_map.group_elements.get(var_X).unwrap();
90+
let Y = relation.linear_map.group_elements.get(var_Y).unwrap();
91+
92+
assert_eq!(X, G::generator() * x + H);
93+
assert_eq!(Y, H * x + G::generator());
94+
(relation, vec![x])
95+
}
96+
7297
/// LinearMap for knowledge of an opening to a Pederson commitment.
7398
#[allow(non_snake_case)]
7499
pub fn pedersen_commitment<G: Group + GroupEncoding>(

0 commit comments

Comments
 (0)