Skip to content

Commit f5c89f3

Browse files
committed
[#16112] Improve lagrange_commitments_whole_domain
1 parent d556cd9 commit f5c89f3

File tree

5 files changed

+32
-5
lines changed

5 files changed

+32
-5
lines changed

src/lib/crypto/kimchi_backend/pasta/pallas_based_plonk.ml

+4-3
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,11 @@ end
3434
module R1CS_constraint_system =
3535
Kimchi_pasta_constraint_system.Pallas_constraint_system
3636

37-
let lagrange srs domain_log2 : _ Kimchi_types.poly_comm array =
37+
let lagrange (srs : Kimchi_bindings.Protocol.SRS.Fq.t) domain_log2 :
38+
_ Kimchi_types.poly_comm array =
3839
let domain_size = Int.pow 2 domain_log2 in
39-
Array.init domain_size ~f:(fun i ->
40-
Kimchi_bindings.Protocol.SRS.Fq.lagrange_commitment srs domain_size i )
40+
Kimchi_bindings.Protocol.SRS.Fq.lagrange_commitments_whole_domain srs
41+
domain_size
4142

4243
let with_lagrange f (vk : Verification_key.t) =
4344
f (lagrange vk.srs vk.domain.log_size_of_group) vk

src/lib/crypto/kimchi_backend/pasta/vesta_based_plonk.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ module R1CS_constraint_system =
3535

3636
let lagrange srs domain_log2 : _ Kimchi_types.poly_comm array =
3737
let domain_size = Int.pow 2 domain_log2 in
38-
Array.init domain_size ~f:(fun i ->
39-
Kimchi_bindings.Protocol.SRS.Fp.lagrange_commitment srs domain_size i )
38+
Kimchi_bindings.Protocol.SRS.Fp.lagrange_commitments_whole_domain srs
39+
domain_size
4040

4141
let with_lagrange f (vk : Verification_key.t) =
4242
f (lagrange vk.srs vk.domain.log_size_of_group) vk

src/lib/crypto/kimchi_bindings/stubs/kimchi_bindings.ml

+12
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ module Protocol = struct
107107
-> Pasta_bindings.Fq.t Kimchi_types.or_infinity Kimchi_types.poly_comm
108108
= "caml_fp_srs_lagrange_commitment"
109109

110+
external lagrange_commitments_whole_domain :
111+
t
112+
-> int
113+
-> Pasta_bindings.Fq.t Kimchi_types.or_infinity Kimchi_types.poly_comm
114+
array = "caml_fp_srs_lagrange_commitments_whole_domain"
115+
110116
external add_lagrange_basis : t -> int -> unit
111117
= "caml_fp_srs_add_lagrange_basis"
112118

@@ -156,6 +162,12 @@ module Protocol = struct
156162
-> Pasta_bindings.Fp.t Kimchi_types.or_infinity Kimchi_types.poly_comm
157163
= "caml_fq_srs_lagrange_commitment"
158164

165+
external lagrange_commitments_whole_domain :
166+
t
167+
-> int
168+
-> Pasta_bindings.Fp.t Kimchi_types.or_infinity Kimchi_types.poly_comm
169+
array = "caml_fq_srs_lagrange_commitments_whole_domain"
170+
159171
external add_lagrange_basis : t -> int -> unit
160172
= "caml_fq_srs_add_lagrange_basis"
161173

src/lib/crypto/kimchi_bindings/stubs/src/main.rs

+2
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@ fn generate_kimchi_bindings(mut w: impl std::io::Write, env: &mut Env) {
363363
decl_func!(w, env, caml_fp_srs_write => "write");
364364
decl_func!(w, env, caml_fp_srs_read => "read");
365365
decl_func!(w, env, caml_fp_srs_lagrange_commitment => "lagrange_commitment");
366+
decl_func!(w, env, caml_fp_srs_lagrange_commitments_whole_domain => "lagrange_commitments_whole_domain");
366367
decl_func!(w, env, caml_fp_srs_add_lagrange_basis=> "add_lagrange_basis");
367368
decl_func!(w, env, caml_fp_srs_commit_evaluations => "commit_evaluations");
368369
decl_func!(w, env, caml_fp_srs_b_poly_commitment => "b_poly_commitment");
@@ -378,6 +379,7 @@ fn generate_kimchi_bindings(mut w: impl std::io::Write, env: &mut Env) {
378379
decl_func!(w, env, caml_fq_srs_write => "write");
379380
decl_func!(w, env, caml_fq_srs_read => "read");
380381
decl_func!(w, env, caml_fq_srs_lagrange_commitment => "lagrange_commitment");
382+
decl_func!(w, env, caml_fq_srs_lagrange_commitments_whole_domain => "lagrange_commitments_whole_domain");
381383
decl_func!(w, env, caml_fq_srs_add_lagrange_basis=> "add_lagrange_basis");
382384
decl_func!(w, env, caml_fq_srs_commit_evaluations => "commit_evaluations");
383385
decl_func!(w, env, caml_fq_srs_b_poly_commitment => "b_poly_commitment");

src/lib/crypto/kimchi_bindings/stubs/src/srs.rs

+12
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,18 @@ macro_rules! impl_srs {
7272
Ok(Some($name::new(srs)))
7373
}
7474

75+
#[ocaml_gen::func]
76+
#[ocaml::func]
77+
/// This is same as _lagrange_commitments, but returns the result for every
78+
/// i <= domain_size.
79+
pub fn [<$name:snake _lagrange_commitments_whole_domain>](
80+
srs: $name,
81+
domain_size: ocaml::Int,
82+
) -> Result<Vec<CamlPolyComm<$CamlG>>, ocaml::Error> {
83+
Ok(srs.get_lagrange_basis_from_domain_size(domain_size as usize).clone().into_iter().map(|x| x.into()).collect())
84+
}
85+
86+
7587
#[ocaml_gen::func]
7688
#[ocaml::func]
7789
pub fn [<$name:snake _lagrange_commitment>](

0 commit comments

Comments
 (0)