kimchi_stubs/
pasta_fq_poseidon.rs1use crate::field_vector::fq::CamlFqVector;
2use mina_curves::pasta::Fq;
3use mina_poseidon::{
4 constants::PlonkSpongeConstantsKimchi, permutation::poseidon_block_cipher,
5 poseidon::ArithmeticSpongeParams,
6};
7pub struct CamlPastaFqPoseidonParams(ArithmeticSpongeParams<Fq>);
8pub type CamlPastaFqPoseidonParamsPtr<'a> = ocaml::Pointer<'a, CamlPastaFqPoseidonParams>;
9
10extern "C" fn caml_pasta_fq_poseidon_params_finalize(v: ocaml::Raw) {
11 unsafe {
12 let v: CamlPastaFqPoseidonParamsPtr = v.as_pointer();
13 v.drop_in_place()
14 };
15}
16
17ocaml::custom!(CamlPastaFqPoseidonParams {
18 finalize: caml_pasta_fq_poseidon_params_finalize,
19});
20
21#[ocaml::func]
22pub fn caml_pasta_fq_poseidon_params_create() -> CamlPastaFqPoseidonParams {
23 CamlPastaFqPoseidonParams(mina_poseidon::pasta::fq_kimchi::params())
24}
25
26#[ocaml::func]
27pub fn caml_pasta_fq_poseidon_block_cipher(
28 params: CamlPastaFqPoseidonParamsPtr,
29 mut state: CamlFqVector,
30) {
31 poseidon_block_cipher::<Fq, PlonkSpongeConstantsKimchi>(¶ms.as_ref().0, state.as_mut())
32}