Skip to content
This repository was archived by the owner on Dec 15, 2025. It is now read-only.

Commit 971a021

Browse files
authored
PVSS trait refactoring (aptos-labs#18303)
* Merged HasAggregatableSubtranscript and NonaggregatableTranscript traits * Implemented HasAggregatableSubtranscript for GenericSigning<T: HasAggregatableSubtranscript> * Changed trait Aggregatable<C>: to trait Aggregatable: ... type SecretSharingConfig; * Renamed SubTranscript to Subtranscript
1 parent 7748a7a commit 971a021

File tree

24 files changed

+613
-545
lines changed

24 files changed

+613
-545
lines changed

crates/aptos-batch-encryption/src/schemes/fptx.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::{
2121
use anyhow::{anyhow, Result};
2222
use aptos_crypto::SecretSharingConfig as _;
2323
use aptos_dkg::pvss::{
24-
traits::{Reconstructable as _, SubTranscript},
24+
traits::{Reconstructable as _, Subtranscript},
2525
Player,
2626
};
2727
use ark_ec::AffineRepr as _;
@@ -84,13 +84,13 @@ impl BatchThresholdEncryption for FPTX {
8484

8585
fn setup(
8686
digest_key: &Self::DigestKey,
87-
pvss_public_params: &<Self::SubTranscript as SubTranscript>::PublicParameters,
87+
pvss_public_params: &<Self::SubTranscript as Subtranscript>::PublicParameters,
8888
subtranscript_happypath: &Self::SubTranscript,
8989
subtranscript_slowpath: &Self::SubTranscript,
9090
tc_happypath: &Self::ThresholdConfig,
9191
tc_slowpath: &Self::ThresholdConfig,
9292
current_player: Player,
93-
msk_share_decryption_key: &<Self::SubTranscript as SubTranscript>::DecryptPrivKey,
93+
msk_share_decryption_key: &<Self::SubTranscript as Subtranscript>::DecryptPrivKey,
9494
) -> Result<(
9595
Self::EncryptionKey,
9696
Vec<Self::VerificationKey>,

crates/aptos-batch-encryption/src/schemes/fptx_weighted.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use crate::{
2424
use anyhow::{anyhow, Result};
2525
use aptos_crypto::{weighted_config::WeightedConfigArkworks, SecretSharingConfig as _};
2626
use aptos_dkg::pvss::{
27-
traits::{Reconstructable as _, SubTranscript},
27+
traits::{Reconstructable as _, Subtranscript},
2828
Player,
2929
};
3030
use ark_ec::AffineRepr;
@@ -228,13 +228,13 @@ impl BatchThresholdEncryption for FPTXWeighted {
228228

229229
fn setup(
230230
digest_key: &Self::DigestKey,
231-
pvss_public_params: &<Self::SubTranscript as SubTranscript>::PublicParameters,
231+
pvss_public_params: &<Self::SubTranscript as Subtranscript>::PublicParameters,
232232
subtranscript_happypath: &Self::SubTranscript,
233233
subtranscript_slowpath: &Self::SubTranscript,
234234
tc_happypath: &Self::ThresholdConfig,
235235
tc_slowpath: &Self::ThresholdConfig,
236236
current_player: Player,
237-
msk_share_decryption_key: &<Self::SubTranscript as SubTranscript>::DecryptPrivKey,
237+
msk_share_decryption_key: &<Self::SubTranscript as Subtranscript>::DecryptPrivKey,
238238
) -> Result<(
239239
Self::EncryptionKey,
240240
Vec<Self::VerificationKey>,

crates/aptos-batch-encryption/src/tests/fptx_weighted_smoke.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ fn weighted_smoke_with_setup_for_testing() {
110110
);
111111
}
112112

113-
type T = aptos_dkg::pvss::chunky::UnsignedWeightedTranscript<crate::group::Pairing>;
114-
type C = WeightedConfigArkworks<Fr>;
115-
use crate::group::{Fr, G2Affine};
113+
type T = aptos_dkg::pvss::chunky::SignedWeightedTranscript<crate::group::Pairing>;
114+
// type C = WeightedConfigArkworks<Fr>;
115+
use crate::group::G2Affine;
116116
use aptos_crypto::{SigningKey, Uniform};
117117
use aptos_dkg::pvss::{
118118
test_utils::NoAux,
@@ -158,7 +158,7 @@ fn weighted_smoke_with_pvss() {
158158
.collect();
159159

160160
// Test dealing
161-
let subtrx_happypaths: Vec<<T as HasAggregatableSubtranscript<C>>::SubTranscript> = secrets
161+
let subtrx_happypaths: Vec<<T as HasAggregatableSubtranscript>::Subtranscript> = secrets
162162
.iter()
163163
.enumerate()
164164
.map(|(i, s)| {
@@ -177,7 +177,7 @@ fn weighted_smoke_with_pvss() {
177177
})
178178
.collect();
179179

180-
let subtrx_slowpaths: Vec<<T as HasAggregatableSubtranscript<C>>::SubTranscript> = secrets
180+
let subtrx_slowpaths: Vec<<T as HasAggregatableSubtranscript>::Subtranscript> = secrets
181181
.iter()
182182
.enumerate()
183183
.map(|(i, s)| {

crates/aptos-batch-encryption/src/traits.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
// Licensed pursuant to the Innovation-Enabling Source Code License, available at https://github.com/aptos-labs/aptos-core/blob/main/LICENSE
33
use anyhow::Result;
44
use aptos_crypto::player::Player;
5-
use aptos_dkg::pvss::traits::SubTranscript;
5+
use aptos_dkg::pvss::traits::Subtranscript;
66
use ark_std::rand::{CryptoRng, RngCore};
77
use serde::{de::DeserializeOwned, Serialize};
88
use std::hash::Hash;
99

1010
pub trait BatchThresholdEncryption {
1111
type ThresholdConfig: aptos_crypto::SecretSharingConfig;
12-
type SubTranscript: SubTranscript;
12+
type SubTranscript: Subtranscript;
1313

1414
/// An encryption key for the scheme. Allows for generating ciphertexts. If we want to actually
1515
/// deploy this scheme, the functionality here will have to be implemented in the SDK.
@@ -58,13 +58,13 @@ pub trait BatchThresholdEncryption {
5858

5959
fn setup(
6060
digest_key: &Self::DigestKey,
61-
pvss_public_params: &<Self::SubTranscript as SubTranscript>::PublicParameters,
61+
pvss_public_params: &<Self::SubTranscript as Subtranscript>::PublicParameters,
6262
subtranscript_happypath: &Self::SubTranscript,
6363
subtranscript_slowpath: &Self::SubTranscript,
6464
tc_happypath: &Self::ThresholdConfig,
6565
tc_slowpath: &Self::ThresholdConfig,
6666
current_player: Player,
67-
sk_share_decryption_key: &<Self::SubTranscript as SubTranscript>::DecryptPrivKey,
67+
sk_share_decryption_key: &<Self::SubTranscript as Subtranscript>::DecryptPrivKey,
6868
) -> Result<(
6969
Self::EncryptionKey,
7070
Vec<Self::VerificationKey>,

crates/aptos-dkg/benches/pvss.rs

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use aptos_dkg::{
1616
},
1717
traits::transcript::{
1818
Aggregatable, AggregatableTranscript, HasAggregatableSubtranscript,
19-
MalleableTranscript, NonAggregatableTranscript, Transcript, WithMaxNumShares,
19+
MalleableTranscript, Transcript, WithMaxNumShares,
2020
},
2121
LowDegreeTest, WeightedConfigBlstrs,
2222
},
@@ -33,10 +33,7 @@ use rand::{rngs::ThreadRng, thread_rng, Rng};
3333
pub fn all_groups(c: &mut Criterion) {
3434
// unweighted BN254 PVSS with aggregatable subtranscript; only doing 2 because large configs are a bit slow and not relevant anyway
3535
for tc in get_threshold_configs_for_benchmarking().into_iter().take(2) {
36-
subaggregatable_pvss_group::<
37-
<ChunkyTranscript<Bn254> as Transcript>::SecretSharingConfig,
38-
ChunkyTranscript<Bn254>,
39-
>(&tc, c);
36+
subaggregatable_pvss_group::<ChunkyTranscript<Bn254>>(&tc, c);
4037
}
4138

4239
// unweighted aggregatable PVSS
@@ -80,7 +77,7 @@ pub fn ldt_group(c: &mut Criterion) {
8077
}
8178

8279
pub fn aggregatable_pvss_group<T: AggregatableTranscript + MalleableTranscript>(
83-
sc: &T::SecretSharingConfig,
80+
sc: &<T as Transcript>::SecretSharingConfig,
8481
c: &mut Criterion,
8582
) -> DealingArgs<T> {
8683
let name = T::scheme_name();
@@ -104,15 +101,18 @@ pub fn aggregatable_pvss_group<T: AggregatableTranscript + MalleableTranscript>(
104101
}
105102

106103
// TODO: combine with function above, rather than copy-paste
107-
pub fn subaggregatable_pvss_group<
108-
C: SecretSharingConfig,
109-
T: NonAggregatableTranscript
110-
+ HasAggregatableSubtranscript<C>
111-
+ MalleableTranscript<SecretSharingConfig = C>,
112-
>(
104+
pub fn subaggregatable_pvss_group<T>(
113105
sc: &T::SecretSharingConfig,
114106
c: &mut Criterion,
115-
) -> DealingArgs<T> {
107+
) -> DealingArgs<T>
108+
where
109+
T: MalleableTranscript
110+
+ HasAggregatableSubtranscript<
111+
Subtranscript: Aggregatable<
112+
SecretSharingConfig = <T as Transcript>::SecretSharingConfig,
113+
>,
114+
>,
115+
{
116116
let name = T::scheme_name();
117117
let mut group = c.benchmark_group(format!("pvss/{}", name));
118118
let mut rng = thread_rng();
@@ -122,7 +122,7 @@ pub fn subaggregatable_pvss_group<
122122

123123
// pvss_transcript_random::<T, WallTime>(sc, &mut group);
124124
pvss_deal::<T, WallTime>(sc, &d.pp, &d.ssks, &d.spks, &d.eks, &mut group);
125-
pvss_subaggregate::<C, T, WallTime>(sc, &mut group);
125+
pvss_subaggregate::<T, WallTime>(sc, &mut group);
126126
pvss_nonaggregate_verify::<T, WallTime>(sc, &d.pp, &d.ssks, &d.spks, &d.eks, &mut group);
127127
pvss_decrypt_own_share::<T, WallTime>(
128128
sc, &d.pp, &d.ssks, &d.spks, &d.dks, &d.eks, &d.s, &mut group,
@@ -136,7 +136,7 @@ pub fn subaggregatable_pvss_group<
136136
pub fn weighted_pvss_group<
137137
T: AggregatableTranscript + MalleableTranscript<SecretSharingConfig = WeightedConfigBlstrs>,
138138
>(
139-
sc: &T::SecretSharingConfig,
139+
sc: &<T as Transcript>::SecretSharingConfig,
140140
d: DealingArgs<T>,
141141
c: &mut Criterion,
142142
) {
@@ -195,7 +195,7 @@ fn pvss_deal<T: Transcript, M: Measurement>(
195195
}
196196

197197
fn pvss_aggregate<T: AggregatableTranscript, M: Measurement>(
198-
sc: &T::SecretSharingConfig,
198+
sc: &<T as Transcript>::SecretSharingConfig,
199199
g: &mut BenchmarkGroup<M>,
200200
) {
201201
g.throughput(Throughput::Elements(sc.get_total_num_shares() as u64));
@@ -218,14 +218,12 @@ fn pvss_aggregate<T: AggregatableTranscript, M: Measurement>(
218218
});
219219
}
220220

221-
fn pvss_subaggregate<
222-
C: SecretSharingConfig,
223-
T: Transcript<SecretSharingConfig = C> + HasAggregatableSubtranscript<C>,
224-
M: Measurement,
225-
>(
226-
sc: &T::SecretSharingConfig,
227-
g: &mut BenchmarkGroup<M>,
228-
) {
221+
fn pvss_subaggregate<T, M: Measurement>(sc: &T::SecretSharingConfig, g: &mut BenchmarkGroup<M>)
222+
where
223+
T: HasAggregatableSubtranscript<
224+
Subtranscript: Aggregatable<SecretSharingConfig = <T as Transcript>::SecretSharingConfig>,
225+
>,
226+
{
229227
g.throughput(Throughput::Elements(sc.get_total_num_shares() as u64));
230228
let mut rng = thread_rng();
231229

@@ -250,7 +248,7 @@ fn pvss_subaggregate<
250248
}
251249

252250
fn pvss_verify<T: AggregatableTranscript, M: Measurement>(
253-
sc: &T::SecretSharingConfig,
251+
sc: &<T as Transcript>::SecretSharingConfig,
254252
pp: &T::PublicParameters,
255253
ssks: &[T::SigningSecretKey],
256254
spks: &[T::SigningPubKey],
@@ -285,7 +283,7 @@ fn pvss_verify<T: AggregatableTranscript, M: Measurement>(
285283
});
286284
}
287285

288-
fn pvss_nonaggregate_verify<T: NonAggregatableTranscript, M: Measurement>(
286+
fn pvss_nonaggregate_verify<T: HasAggregatableSubtranscript, M: Measurement>(
289287
sc: &T::SecretSharingConfig,
290288
pp: &T::PublicParameters,
291289
ssks: &[T::SigningSecretKey],
@@ -322,7 +320,7 @@ fn pvss_nonaggregate_verify<T: NonAggregatableTranscript, M: Measurement>(
322320
}
323321

324322
fn pvss_aggregate_verify<T: AggregatableTranscript + MalleableTranscript, M: Measurement>(
325-
sc: &T::SecretSharingConfig,
323+
sc: &<T as Transcript>::SecretSharingConfig,
326324
pp: &T::PublicParameters,
327325
ssks: &[T::SigningSecretKey],
328326
spks: &Vec<T::SigningPubKey>,

crates/aptos-dkg/src/pvss/chunky/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,3 @@ pub use weighted_transcript::{
2323

2424
#[allow(type_alias_bounds)]
2525
pub type SignedWeightedTranscript<E: Pairing> = GenericSigning<UnsignedWeightedTranscript<E>>;
26-
#[allow(type_alias_bounds)]
27-
pub type SignedUnweightedTranscript<E: Pairing> = GenericSigning<UnsignedUnweightedTranscript<E>>;

0 commit comments

Comments
 (0)