Skip to content

Commit d2da239

Browse files
committed
simplify poseidon permutation calls
1 parent 0d16a57 commit d2da239

File tree

10 files changed

+36
-37
lines changed

10 files changed

+36
-37
lines changed

Cargo.lock

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/air/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ p3-uni-stark.workspace = true
1515
p3-matrix.workspace = true
1616
p3-util.workspace = true
1717
multilinear-toolkit.workspace = true
18-
p3-symmetric.workspace = true
1918
p3-koala-bear.workspace = true
2019
rand.workspace = true
2120
whir-p3.workspace = true

crates/air/src/examples/prove_poseidon2.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use multilinear_toolkit::prelude::*;
33
use p3_air::BaseAir;
44
use p3_field::PrimeField64;
55
use p3_koala_bear::{KoalaBear, QuinticExtensionFieldKB};
6-
use p3_symmetric::Permutation;
76
use packed_pcs::{
87
ColDims, packed_pcs_commit, packed_pcs_global_statements_for_prover,
98
packed_pcs_global_statements_for_verifier, packed_pcs_parse_commitment,
@@ -16,7 +15,7 @@ use utils::{
1615
MyChallenger, Poseidon16Air, Poseidon24Air, build_poseidon_16_air,
1716
build_poseidon_16_air_packed, build_poseidon_24_air, build_poseidon_24_air_packed,
1817
build_prover_state, build_verifier_state, generate_trace_poseidon_16,
19-
generate_trace_poseidon_24, get_poseidon16, get_poseidon24, init_tracing,
18+
generate_trace_poseidon_24, init_tracing, poseidon16_permute, poseidon24_permute,
2019
};
2120
use whir_p3::{
2221
FoldingFactor, SecurityAssumption, WhirConfig, WhirConfigBuilder, precompute_dft_twiddles,
@@ -111,11 +110,11 @@ fn prepare_poseidon(config: &Poseidon2Config) -> PoseidonSetup {
111110

112111
assert_eq!(
113112
&witness_matrix_16.values[n_columns_16 - 16..n_columns_16 - 8],
114-
&get_poseidon16().permute(witness_matrix_16.values[0..16].try_into().unwrap())[..8]
113+
&poseidon16_permute(witness_matrix_16.values[0..16].try_into().unwrap())[..8]
115114
);
116115
assert_eq!(
117116
&witness_matrix_24.values[n_columns_24 - 8..n_columns_24],
118-
&get_poseidon24().permute(witness_matrix_24.values[0..24].try_into().unwrap())[16..]
117+
&poseidon24_permute(witness_matrix_24.values[0..24].try_into().unwrap())[16..]
119118
);
120119

121120
let witness_matrix_16_transposed = witness_matrix_16.transpose();

crates/lean_compiler/tests/test_compiler.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use lean_compiler::*;
22
use lean_vm::*;
3-
use p3_symmetric::Permutation;
4-
use utils::{get_poseidon16, get_poseidon24};
3+
use utils::{poseidon16_permute, poseidon24_permute};
54

65
const DEFAULT_NO_VEC_RUNTIME_MEMORY: usize = 1 << 15;
76

@@ -327,16 +326,15 @@ fn test_mini_program_3() {
327326
return;
328327
}
329328
"#;
330-
let mut public_input: [F; 16] = (0..16).map(F::new).collect::<Vec<F>>().try_into().unwrap();
329+
let public_input: [F; 16] = (0..16).map(F::new).collect::<Vec<F>>().try_into().unwrap();
331330
compile_and_run(
332331
program.to_string(),
333332
(&public_input, &[]),
334333
DEFAULT_NO_VEC_RUNTIME_MEMORY,
335334
false,
336335
);
337336

338-
get_poseidon16().permute_mut(&mut public_input);
339-
let _ = public_input;
337+
let _ = dbg!(poseidon16_permute(public_input));
340338
}
341339

342340
#[test]
@@ -355,16 +353,15 @@ fn test_mini_program_4() {
355353
return;
356354
}
357355
"#;
358-
let mut public_input: [F; 24] = (0..24).map(F::new).collect::<Vec<F>>().try_into().unwrap();
356+
let public_input: [F; 24] = (0..24).map(F::new).collect::<Vec<F>>().try_into().unwrap();
359357
compile_and_run(
360358
program.to_string(),
361359
(&public_input, &[]),
362360
DEFAULT_NO_VEC_RUNTIME_MEMORY,
363361
false,
364362
);
365363

366-
get_poseidon24().permute_mut(&mut public_input);
367-
dbg!(&public_input[16..]);
364+
dbg!(&poseidon24_permute(public_input)[16..]);
368365
}
369366

370367
#[test]

crates/lean_vm/src/execution/runner.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ use crate::witness::{
1313
};
1414
use crate::{CodeAddress, HintExecutionContext, SourceLineNumber};
1515
use p3_field::PrimeCharacteristicRing;
16-
use p3_symmetric::Permutation;
1716
use std::collections::BTreeMap;
18-
use utils::{get_poseidon16, get_poseidon24, pretty_integer};
17+
use utils::{poseidon16_permute, poseidon24_permute, pretty_integer};
1918
use xmss::{Poseidon16History, Poseidon24History};
2019

2120
/// Number of instructions to show in stack trace
@@ -51,10 +50,10 @@ pub fn build_public_memory(public_input: &[F]) -> Vec<F> {
5150

5251
public_memory
5352
[POSEIDON_16_NULL_HASH_PTR * VECTOR_LEN..(POSEIDON_16_NULL_HASH_PTR + 2) * VECTOR_LEN]
54-
.copy_from_slice(&get_poseidon16().permute([F::ZERO; 16]));
53+
.copy_from_slice(&poseidon16_permute([F::ZERO; 16]));
5554
public_memory
5655
[POSEIDON_24_NULL_HASH_PTR * VECTOR_LEN..(POSEIDON_24_NULL_HASH_PTR + 1) * VECTOR_LEN]
57-
.copy_from_slice(&get_poseidon24().permute([F::ZERO; 24])[16..]);
56+
.copy_from_slice(&poseidon24_permute([F::ZERO; 24])[16..]);
5857
public_memory
5958
}
6059

crates/lean_vm/src/isa/instruction.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@ use crate::witness::{
1212
};
1313
use multilinear_toolkit::prelude::*;
1414
use p3_field::{BasedVectorSpace, PrimeCharacteristicRing, dot_product};
15-
use p3_symmetric::Permutation;
1615
use p3_util::log2_ceil_usize;
1716
use std::fmt::{Display, Formatter};
18-
use utils::{ToUsize, get_poseidon16, get_poseidon24};
17+
use utils::{ToUsize, poseidon16_permute, poseidon24_permute};
1918

2019
/// Complete set of VM instruction types with comprehensive operation support
2120
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
@@ -236,11 +235,7 @@ impl Instruction {
236235
*ctx.n_poseidon16_precomputed_used += 1;
237236
precomputed.1
238237
}
239-
_ => {
240-
let mut output = input;
241-
get_poseidon16().permute_mut(&mut output);
242-
output
243-
}
238+
_ => poseidon16_permute(input),
244239
};
245240

246241
let res0: [F; VECTOR_LEN] = output[..VECTOR_LEN].try_into().unwrap();
@@ -292,8 +287,7 @@ impl Instruction {
292287
precomputed.1
293288
}
294289
_ => {
295-
let mut output = input;
296-
get_poseidon24().permute_mut(&mut output);
290+
let output = poseidon24_permute(input);
297291
output[2 * VECTOR_LEN..].try_into().unwrap()
298292
}
299293
};

crates/utils/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ p3-matrix.workspace = true
1414
p3-challenger.workspace = true
1515
p3-koala-bear.workspace = true
1616
tracing-forest.workspace = true
17+
p3-symmetric.workspace = true
1718
p3-poseidon2.workspace = true
1819
p3-poseidon2-air.workspace = true
1920
tracing-subscriber.workspace = true

crates/utils/src/poseidon2.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use p3_poseidon2_air::p24::Poseidon2Air24;
1919
use p3_poseidon2_air::p24::RoundConstants24;
2020
use p3_poseidon2_air::p24::generate_trace_rows_24;
2121
use p3_poseidon2_air::{p16, p24};
22+
use p3_symmetric::Permutation;
2223

2324
pub type Poseidon16 = Poseidon2KoalaBear<16>;
2425
pub type Poseidon24 = Poseidon2KoalaBear<24>;
@@ -81,7 +82,8 @@ pub type MyRoundConstants24<F> = RoundConstants24<F, 24, HALF_FULL_ROUNDS_24, PA
8182

8283
static POSEIDON16_INSTANCE: OnceLock<Poseidon16> = OnceLock::new();
8384

84-
pub fn get_poseidon16() -> &'static Poseidon16 {
85+
#[inline(always)]
86+
pub(crate) fn get_poseidon16() -> &'static Poseidon16 {
8587
POSEIDON16_INSTANCE.get_or_init(|| {
8688
let round_constants = build_poseidon16_constants();
8789
let external_constants = ExternalLayerConstants::new(
@@ -95,9 +97,15 @@ pub fn get_poseidon16() -> &'static Poseidon16 {
9597
})
9698
}
9799

100+
#[inline(always)]
101+
pub fn poseidon16_permute(input: [KoalaBear; 16]) -> [KoalaBear; 16] {
102+
get_poseidon16().permute(input)
103+
}
104+
98105
static POSEIDON24_INSTANCE: OnceLock<Poseidon24> = OnceLock::new();
99106

100-
pub fn get_poseidon24() -> &'static Poseidon24 {
107+
#[inline(always)]
108+
pub(crate) fn get_poseidon24() -> &'static Poseidon24 {
101109
POSEIDON24_INSTANCE.get_or_init(|| {
102110
let round_constants = build_poseidon24_constants();
103111
let external_constants = ExternalLayerConstants::new(
@@ -111,6 +119,11 @@ pub fn get_poseidon24() -> &'static Poseidon24 {
111119
})
112120
}
113121

122+
#[inline(always)]
123+
pub fn poseidon24_permute(input: [KoalaBear; 24]) -> [KoalaBear; 24] {
124+
get_poseidon24().permute(input)
125+
}
126+
114127
pub fn build_poseidon_16_air() -> Poseidon16Air<KoalaBear> {
115128
Poseidon16Air::new(build_poseidon16_constants())
116129
}

crates/xmss/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,4 @@ p3-koala-bear.workspace = true
1111
p3-field.workspace = true
1212
rand.workspace = true
1313
utils.workspace = true
14-
p3-symmetric.workspace = true
1514
p3-util.workspace = true

crates/xmss/src/lib.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
22
use p3_koala_bear::KoalaBear;
3-
use p3_symmetric::Permutation;
4-
use utils::{get_poseidon16, get_poseidon24};
53

64
mod wots;
5+
use utils::{poseidon16_permute, poseidon24_permute};
76
pub use wots::*;
87
mod xmss;
98
pub use xmss::*;
@@ -24,7 +23,7 @@ pub type Poseidon16History = Vec<([F; 16], [F; 16])>;
2423
pub type Poseidon24History = Vec<([F; 24], [F; 8])>;
2524

2625
fn poseidon16_compress(a: &Digest, b: &Digest) -> Digest {
27-
get_poseidon16().permute([*a, *b].concat().try_into().unwrap())[0..8]
26+
poseidon16_permute([*a, *b].concat().try_into().unwrap())[0..8]
2827
.try_into()
2928
.unwrap()
3029
}
@@ -35,13 +34,13 @@ fn poseidon16_compress_with_trace(
3534
poseidon_16_trace: &mut Vec<([F; 16], [F; 16])>,
3635
) -> Digest {
3736
let input: [F; 16] = [*a, *b].concat().try_into().unwrap();
38-
let output = get_poseidon16().permute(input);
37+
let output = poseidon16_permute(input);
3938
poseidon_16_trace.push((input, output));
4039
output[0..8].try_into().unwrap()
4140
}
4241

4342
fn poseidon24_compress(a: &Digest, b: &Digest, c: &Digest) -> Digest {
44-
get_poseidon24().permute([*a, *b, *c].concat().try_into().unwrap())[16..24]
43+
poseidon24_permute([*a, *b, *c].concat().try_into().unwrap())[16..24]
4544
.try_into()
4645
.unwrap()
4746
}
@@ -53,7 +52,7 @@ fn poseidon24_compress_with_trace(
5352
poseidon_24_trace: &mut Vec<([F; 24], [F; 8])>,
5453
) -> Digest {
5554
let input: [F; 24] = [*a, *b, *c].concat().try_into().unwrap();
56-
let output = get_poseidon24().permute(input)[16..24].try_into().unwrap();
55+
let output = poseidon24_permute(input)[16..24].try_into().unwrap();
5756
poseidon_24_trace.push((input, output));
5857
output
5958
}

0 commit comments

Comments
 (0)