1use arkworks::{WasmPastaFp, WasmPastaFq};
12use mina_curves::pasta::{Fp, Fq};
13use mina_poseidon::{constants::PlonkSpongeConstantsKimchi, permutation::poseidon_block_cipher};
14use wasm_bindgen::prelude::*;
15use wasm_types::FlatVector as WasmFlatVector;
16
17#[wasm_bindgen]
20pub fn caml_pasta_fp_poseidon_block_cipher(
21 state: WasmFlatVector<WasmPastaFp>,
22) -> WasmFlatVector<WasmPastaFp> {
23 let mut state_vec: Vec<Fp> = state.into_iter().map(Into::into).collect();
24 poseidon_block_cipher::<Fp, PlonkSpongeConstantsKimchi>(
25 mina_poseidon::pasta::fp_kimchi::static_params(),
26 &mut state_vec,
27 );
28 state_vec
29 .iter()
30 .map(|f| WasmPastaFp(*f))
31 .collect::<Vec<WasmPastaFp>>()
32 .into()
33}
34
35#[wasm_bindgen]
38pub fn caml_pasta_fq_poseidon_block_cipher(
39 state: WasmFlatVector<WasmPastaFq>,
40) -> WasmFlatVector<WasmPastaFq> {
41 let mut state_vec: Vec<Fq> = state.into_iter().map(Into::into).collect();
42 poseidon_block_cipher::<Fq, PlonkSpongeConstantsKimchi>(
43 mina_poseidon::pasta::fq_kimchi::static_params(),
44 &mut state_vec,
45 );
46 state_vec
47 .iter()
48 .map(|f| WasmPastaFq(*f))
49 .collect::<Vec<WasmPastaFq>>()
50 .into()
51}