Skip to content

Commit 07afb63

Browse files
committed
Relax Arc requirement for parameters
1 parent 078b0b7 commit 07afb63

File tree

13 files changed

+40
-61
lines changed

13 files changed

+40
-61
lines changed

benches/parallel.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55

66
#[macro_use]
77
extern crate criterion;
8-
extern crate alloc;
9-
10-
use alloc::sync::Arc;
118

129
use criterion::{BatchSize, Criterion};
1310
use curve25519_dalek::{RistrettoPoint, Scalar};
@@ -33,7 +30,7 @@ const BATCH_SIZES: [usize; 1] = [2];
3330
#[allow(non_snake_case)]
3431
#[allow(clippy::arithmetic_side_effects)]
3532
fn generate_data<R: CryptoRngCore>(
36-
params: &Arc<TriptychParameters>,
33+
params: &TriptychParameters,
3734
b: usize,
3835
rng: &mut R,
3936
) -> (Vec<TriptychWitness>, Vec<TriptychStatement>, Vec<Transcript>) {
@@ -94,7 +91,7 @@ fn generate_proof(c: &mut Criterion) {
9491
for n in N_VALUES {
9592
for m in M_VALUES {
9693
// Generate parameters
97-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
94+
let params = TriptychParameters::new(n, m).unwrap();
9895

9996
let label = format!("Generate proof: n = {}, m = {} (N = {})", n, m, params.get_N());
10097
group.bench_function(&label, |b| {
@@ -125,7 +122,7 @@ fn generate_proof_vartime(c: &mut Criterion) {
125122
for n in N_VALUES {
126123
for m in M_VALUES {
127124
// Generate parameters
128-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
125+
let params = TriptychParameters::new(n, m).unwrap();
129126

130127
let label = format!(
131128
"Generate proof (variable time): n = {}, m = {} (N = {})",
@@ -161,7 +158,7 @@ fn verify_proof(c: &mut Criterion) {
161158
for n in N_VALUES {
162159
for m in M_VALUES {
163160
// Generate parameters
164-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
161+
let params = TriptychParameters::new(n, m).unwrap();
165162

166163
let label = format!("Verify proof: n = {}, m = {} (N = {})", n, m, params.get_N());
167164
group.bench_function(&label, |b| {
@@ -197,7 +194,7 @@ fn verify_batch_proof(c: &mut Criterion) {
197194
for n in N_VALUES {
198195
for m in M_VALUES {
199196
// Generate parameters
200-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
197+
let params = TriptychParameters::new(n, m).unwrap();
201198

202199
for batch in BATCH_SIZES {
203200
let label = format!(

benches/triptych.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55

66
#[macro_use]
77
extern crate criterion;
8-
extern crate alloc;
9-
10-
use alloc::sync::Arc;
118

129
use criterion::{BatchSize, Criterion};
1310
use curve25519_dalek::{RistrettoPoint, Scalar};
@@ -31,7 +28,7 @@ const BATCH_SIZES: [usize; 1] = [2];
3128
#[allow(non_snake_case)]
3229
#[allow(clippy::arithmetic_side_effects)]
3330
fn generate_data<R: CryptoRngCore>(
34-
params: &Arc<TriptychParameters>,
31+
params: &TriptychParameters,
3532
b: usize,
3633
rng: &mut R,
3734
) -> (Vec<TriptychWitness>, Vec<TriptychStatement>, Vec<Transcript>) {
@@ -84,7 +81,7 @@ fn generate_proof(c: &mut Criterion) {
8481
for n in N_VALUES {
8582
for m in M_VALUES {
8683
// Generate parameters
87-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
84+
let params = TriptychParameters::new(n, m).unwrap();
8885

8986
let label = format!("Generate proof: n = {}, m = {} (N = {})", n, m, params.get_N());
9087
group.bench_function(&label, |b| {
@@ -115,7 +112,7 @@ fn generate_proof_vartime(c: &mut Criterion) {
115112
for n in N_VALUES {
116113
for m in M_VALUES {
117114
// Generate parameters
118-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
115+
let params = TriptychParameters::new(n, m).unwrap();
119116

120117
let label = format!(
121118
"Generate proof (variable time): n = {}, m = {} (N = {})",
@@ -151,7 +148,7 @@ fn verify_proof(c: &mut Criterion) {
151148
for n in N_VALUES {
152149
for m in M_VALUES {
153150
// Generate parameters
154-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
151+
let params = TriptychParameters::new(n, m).unwrap();
155152

156153
let label = format!("Verify proof: n = {}, m = {} (N = {})", n, m, params.get_N());
157154
group.bench_function(&label, |b| {
@@ -187,7 +184,7 @@ fn verify_batch_proof(c: &mut Criterion) {
187184
for n in N_VALUES {
188185
for m in M_VALUES {
189186
// Generate parameters
190-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
187+
let params = TriptychParameters::new(n, m).unwrap();
191188

192189
for batch in BATCH_SIZES {
193190
let label = format!(

examples/ringct.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
//! This example shows how to use Triptych.
1111
#[cfg(test)]
1212
mod test {
13-
use std::sync::Arc;
14-
1513
use curve25519_dalek::{RistrettoPoint, Scalar};
1614
use merlin::Transcript;
1715
use rand_chacha::ChaCha12Rng;
@@ -25,10 +23,9 @@ mod test {
2523
let mut rng = ChaCha12Rng::seed_from_u64(8675309);
2624

2725
// Parameters that will define the number of outputs used in the proof: 2^4 == 16
28-
// The parameters are `Arc`-wrapped since it's likely they could be reused
2926
let n = 2;
3027
let m = 4;
31-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
28+
let params = TriptychParameters::new(n, m).unwrap();
3229
let number_outputs = params.get_N();
3330

3431
// Value commitments use the Triptych `G` generator for masks, and need another component for values

src/lib.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,16 @@
6767
//! ```
6868
//! # #[cfg(feature = "rand")]
6969
//! # {
70-
//! # extern crate alloc;
71-
//! use alloc::sync::Arc;
72-
//!
7370
//! use curve25519_dalek::RistrettoPoint;
7471
//! use rand_core::OsRng;
7572
//! use triptych::*;
7673
//!
7774
//! let mut rng = OsRng;
7875
//!
7976
//! // Generate parameters
80-
//! // This is `Arc`-wrapped to facilitate efficient reuse!
8177
//! const n: u32 = 2;
8278
//! const m: u32 = 3;
83-
//! let params = Arc::new(TriptychParameters::new(n, m).unwrap());
79+
//! let params = TriptychParameters::new(n, m).unwrap();
8480
//!
8581
//! // Generate a random witness, which includes the signing key and an index where it will appear
8682
//! let witness = TriptychWitness::random(&params, &mut rng);

src/parallel/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,16 @@
2121
//! ```
2222
//! # #[cfg(feature = "rand")]
2323
//! # {
24-
//! # extern crate alloc;
25-
//! use alloc::sync::Arc;
26-
//!
2724
//! use curve25519_dalek::{RistrettoPoint, Scalar};
2825
//! use rand_core::OsRng;
2926
//! use triptych::{parallel::*, Transcript};
3027
//!
3128
//! let mut rng = OsRng;
3229
//!
3330
//! // Generate parameters
34-
//! // This is `Arc`-wrapped to facilitate efficient reuse!
3531
//! const n: u32 = 2;
3632
//! const m: u32 = 3;
37-
//! let params = Arc::new(TriptychParameters::new(n, m).unwrap());
33+
//! let params = TriptychParameters::new(n, m).unwrap();
3834
//!
3935
//! // Generate a random witness, which includes the signing key, auxiliary key, and an index where they will appear
4036
//! let witness = TriptychWitness::random(&params, &mut rng);

src/parallel/parameters.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2024, The Tari Project
22
// SPDX-License-Identifier: BSD-3-Clause
33

4-
use alloc::{vec, vec::Vec};
4+
use alloc::{sync::Arc, vec, vec::Vec};
55
use core::iter::once;
66

77
use blake3::Hasher;
@@ -29,7 +29,7 @@ pub struct TriptychParameters {
2929
G: RistrettoPoint,
3030
G1: RistrettoPoint,
3131
U: RistrettoPoint,
32-
CommitmentG: Vec<RistrettoPoint>,
32+
CommitmentG: Arc<Vec<RistrettoPoint>>,
3333
CommitmentH: RistrettoPoint,
3434
hash: Vec<u8>,
3535
}
@@ -149,7 +149,7 @@ impl TriptychParameters {
149149
G: *G,
150150
G1: *G1,
151151
U: *U,
152-
CommitmentG,
152+
CommitmentG: Arc::new(CommitmentG),
153153
CommitmentH,
154154
hash,
155155
})

src/parallel/proof.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ impl BorshDeserialize for TriptychProof {
10221022

10231023
#[cfg(test)]
10241024
mod test {
1025-
use alloc::{sync::Arc, vec::Vec};
1025+
use alloc::vec::Vec;
10261026

10271027
use curve25519_dalek::{traits::Identity, RistrettoPoint, Scalar};
10281028
use itertools::izip;
@@ -1061,7 +1061,7 @@ mod test {
10611061
rng: &mut R,
10621062
) -> (Vec<TriptychWitness>, Vec<TriptychStatement>, Vec<Transcript>) {
10631063
// Generate parameters
1064-
let params = Arc::new(TriptychParameters::new(n, m).unwrap());
1064+
let params = TriptychParameters::new(n, m).unwrap();
10651065

10661066
// Generate witnesses; for this test, we use adjacent indexes for simplicity
10671067
// This means the batch size must not exceed the input set size!
@@ -1090,7 +1090,7 @@ mod test {
10901090
offsets.push(r_offset * params.get_G1());
10911091
M1[witness.get_l() as usize] = witness.compute_auxiliary_verification_key() + offsets.last().unwrap();
10921092
}
1093-
let input_set = Arc::new(TriptychInputSet::new(&M, &M1).unwrap());
1093+
let input_set = TriptychInputSet::new(&M, &M1).unwrap();
10941094

10951095
// Generate statements
10961096
let mut statements = Vec::with_capacity(b);
@@ -1375,7 +1375,7 @@ mod test {
13751375
let M1 = statements[0].get_input_set().get_auxiliary_keys().to_vec();
13761376
let index = ((witnesses[0].get_l() + 1) % witnesses[0].get_params().get_N()) as usize;
13771377
M[index] = RistrettoPoint::random(&mut rng);
1378-
let evil_input_set = Arc::new(TriptychInputSet::new(&M, &M1).unwrap());
1378+
let evil_input_set = TriptychInputSet::new(&M, &M1).unwrap();
13791379
let evil_statement = TriptychStatement::new(
13801380
statements[0].get_params(),
13811381
&evil_input_set,
@@ -1407,7 +1407,7 @@ mod test {
14071407
let mut M1 = statements[0].get_input_set().get_auxiliary_keys().to_vec();
14081408
let index = ((witnesses[0].get_l() + 1) % witnesses[0].get_params().get_N()) as usize;
14091409
M1[index] = RistrettoPoint::random(&mut rng);
1410-
let evil_input_set = Arc::new(TriptychInputSet::new(&M, &M1).unwrap());
1410+
let evil_input_set = TriptychInputSet::new(&M, &M1).unwrap();
14111411
let evil_statement = TriptychStatement::new(
14121412
statements[0].get_params(),
14131413
&evil_input_set,

src/parallel/statement.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ impl TriptychInputSet {
129129
#[allow(non_snake_case)]
130130
#[derive(Clone, Eq, PartialEq)]
131131
pub struct TriptychStatement {
132-
params: Arc<TriptychParameters>,
132+
params: TriptychParameters,
133133
input_set: TriptychInputSet,
134134
offset: RistrettoPoint,
135135
J: RistrettoPoint,
@@ -161,7 +161,7 @@ impl TriptychStatement {
161161
/// otherwise provided externally.
162162
#[allow(non_snake_case)]
163163
pub fn new(
164-
params: &Arc<TriptychParameters>,
164+
params: &TriptychParameters,
165165
input_set: &TriptychInputSet,
166166
offset: &RistrettoPoint,
167167
J: &RistrettoPoint,
@@ -203,7 +203,7 @@ impl TriptychStatement {
203203
}
204204

205205
/// Get the parameters for this [`TriptychStatement`].
206-
pub fn get_params(&self) -> &Arc<TriptychParameters> {
206+
pub fn get_params(&self) -> &TriptychParameters {
207207
&self.params
208208
}
209209

src/parallel/witness.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// Copyright (c) 2024, The Tari Project
22
// SPDX-License-Identifier: BSD-3-Clause
33

4-
use alloc::sync::Arc;
5-
64
use curve25519_dalek::{RistrettoPoint, Scalar};
75
use rand_core::CryptoRngCore;
86
use snafu::prelude::*;
@@ -18,7 +16,7 @@ use crate::parallel::TriptychParameters;
1816
#[derive(Zeroize, ZeroizeOnDrop)]
1917
pub struct TriptychWitness {
2018
#[zeroize(skip)]
21-
params: Arc<TriptychParameters>,
19+
params: TriptychParameters,
2220
l: u32,
2321
r: Scalar,
2422
r1: Scalar,
@@ -40,7 +38,7 @@ impl TriptychWitness {
4038
///
4139
/// If you'd like a [`TriptychWitness`] generated securely for you, use [`TriptychWitness::random`] instead.
4240
#[allow(non_snake_case)]
43-
pub fn new(params: &Arc<TriptychParameters>, l: u32, r: &Scalar, r1: &Scalar) -> Result<Self, WitnessError> {
41+
pub fn new(params: &TriptychParameters, l: u32, r: &Scalar, r1: &Scalar) -> Result<Self, WitnessError> {
4442
if r == &Scalar::ZERO || r1 == &Scalar::ZERO {
4543
return Err(WitnessError::InvalidParameter);
4644
}
@@ -63,7 +61,7 @@ impl TriptychWitness {
6361
///
6462
/// If you'd rather provide your own secret data, use [`TriptychWitness::new`] instead.
6563
#[allow(clippy::cast_possible_truncation)]
66-
pub fn random<R: CryptoRngCore>(params: &Arc<TriptychParameters>, rng: &mut R) -> Self {
64+
pub fn random<R: CryptoRngCore>(params: &TriptychParameters, rng: &mut R) -> Self {
6765
// Generate a random index using wide reduction
6866
// This can't truncate since `N` is bounded by `u32`
6967
// It is also defined since `N > 0`
@@ -79,7 +77,7 @@ impl TriptychWitness {
7977
}
8078

8179
/// Get the [`TriptychParameters`] from this [`TriptychWitness`].
82-
pub fn get_params(&self) -> &Arc<TriptychParameters> {
80+
pub fn get_params(&self) -> &TriptychParameters {
8381
&self.params
8482
}
8583

src/parameters.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2024, The Tari Project
22
// SPDX-License-Identifier: BSD-3-Clause
33

4-
use alloc::{vec, vec::Vec};
4+
use alloc::{sync::Arc, vec, vec::Vec};
55
use core::iter::once;
66

77
use blake3::Hasher;
@@ -28,7 +28,7 @@ pub struct TriptychParameters {
2828
m: u32,
2929
G: RistrettoPoint,
3030
U: RistrettoPoint,
31-
CommitmentG: Vec<RistrettoPoint>,
31+
CommitmentG: Arc<Vec<RistrettoPoint>>,
3232
CommitmentH: RistrettoPoint,
3333
hash: Vec<u8>,
3434
}
@@ -132,7 +132,7 @@ impl TriptychParameters {
132132
m,
133133
G: *G,
134134
U: *U,
135-
CommitmentG,
135+
CommitmentG: Arc::new(CommitmentG),
136136
CommitmentH,
137137
hash,
138138
})

0 commit comments

Comments
 (0)