@@ -24,6 +24,10 @@ pub const WHIR_INITIAL_FOLDING_FACTOR: usize = 7;
2424pub const WHIR_SUBSEQUENT_FOLDING_FACTOR : usize = 5 ;
2525pub const RS_DOMAIN_INITIAL_REDUCTION_FACTOR : usize = 5 ;
2626
27+ pub const SNARK_DOMAIN_SEP : [ F ; 8 ] = F :: new_array ( [
28+ 1315460930 , 529218348 , 108777370 , 1613857347 , 1651741419 , 1909799493 , 1515625756 , 1569520942 ,
29+ ] ) ;
30+
2731pub fn default_whir_config ( starting_log_inv_rate : usize ) -> WhirConfigBuilder {
2832 WhirConfigBuilder {
2933 folding_factor : FoldingFactor :: new ( WHIR_INITIAL_FOLDING_FACTOR , WHIR_SUBSEQUENT_FOLDING_FACTOR ) ,
@@ -39,3 +43,38 @@ pub fn default_whir_config(starting_log_inv_rate: usize) -> WhirConfigBuilder {
3943 starting_log_inv_rate,
4044 }
4145}
46+
47+ #[ cfg( test) ]
48+ mod tests {
49+ use backend:: default_koalabear_poseidon2_16;
50+ use backend:: { PrimeCharacteristicRing , hash_slice} ;
51+ use lean_vm:: F ;
52+ use rec_aggregation:: { get_aggregation_bytecode, init_aggregation_bytecode} ;
53+ use utils:: poseidon16_compress_pair;
54+
55+ use crate :: SNARK_DOMAIN_SEP ;
56+
57+ #[ test]
58+ fn verify_snark_domain_sep ( ) {
59+ init_aggregation_bytecode ( ) ;
60+ let recursion_bytecode_hash = get_aggregation_bytecode ( ) . hash ;
61+ let name_fe = "leanMultisig-0.6.0"
62+ . as_bytes ( )
63+ . iter ( )
64+ . map ( |b| F :: from_u8 ( * b) )
65+ . collect :: < Vec < _ > > ( ) ;
66+ let mut prefix_free_name_fe = vec ! [ F :: ZERO ; 8 ] ;
67+ let len = name_fe. len ( ) ;
68+ prefix_free_name_fe. extend ( name_fe) ;
69+ while prefix_free_name_fe. len ( ) % 8 != 7 {
70+ prefix_free_name_fe. push ( F :: ZERO ) ;
71+ }
72+ prefix_free_name_fe. push ( F :: from_u64 ( len as u64 ) ) ;
73+ let comp = default_koalabear_poseidon2_16 ( ) ;
74+ let name_hash = hash_slice :: < _ , _ , _ , 8 , 8 > ( & comp, & prefix_free_name_fe) ;
75+
76+ let expected_domain_sep = poseidon16_compress_pair ( & name_hash, & recursion_bytecode_hash) ;
77+
78+ assert_eq ! ( expected_domain_sep, SNARK_DOMAIN_SEP ) ;
79+ }
80+ }
0 commit comments