ff
Play with Finite Field in OCaml
This library provides functors to instantiate finite field of arbitrary orders (in the limit of Zarith, the dependency to handle arbitrary integers).
module F13 = Ff.MakeFp (struct let prime_order = Z.of_string "13" end)
module BLSFr = Ff.MakeFp (
struct
let prime_order = Z.of_string "52435875175126190479447740508185965837690552500527637822603658699938581184513"
end
)
JavaScript compatibility
This library can be transpiled in JavaScript using js_of_ocaml.
An example is provided in js/test_js.ml
, with the corresponding dune
file.
It instantiates Fp with p = 53. dune
will compile this into a FiniteField.js
file, exporting methods like add
, toString
, random
, etc. FiniteField
can
be used as a Node module. See js/test/test_js.js
for an example.
# Generate FiniteField.js
dune build js
cp _build/default/js/FiniteField.js ./
node
var FF = require("./FiniteField.js");
let x = FF.random();
let y = FF.random();
let x_plus_y = FF.add(x, y);
Install
opam install ff
For a specific version (from 0.2.1), use
opam install ff.0.3.0
Replace 0.3.0 with the version you want, see tags.
Documentation
See here
PBT testing
A package ff-pbt
is also included and published providing Property Based
Testing of finite fields based on the generic finite fields interface given inff
.
If you have a library implementing finite fields, but not using the functors
provided by ff
, you can use:
(* You module is MyField *)
module MyFieldProperties = Ff_pbt.MakeFieldProperties (MyField)
let () =
let open Alcotest in
run "MyField" [MyFieldProperties.get_tests()]
It is stronly relying on the random
function implemented by the finite field module.
Benchmark
ff-bench
is a benchmark library (using Core_bench
) for finite fields, respecting the signature Ff_sig.BASE
.
Here how to use:
module F337 = Ff.Make (struct let prime_order = Z.of_string "337" end)
module Bench = Ff_bench.MakeBench (F337)
let () =
let commands = Bench.get_benches "F337" in
Core.Command.run (Core.Bench.make_command commands)
md5=fa68c430de8cba04fb8b7819e4cc4b38
sha512=2046126f30704c16bd2dcd735b7eb9b8a6c8751892f895e6c992b0ebb921f7d2c824b9507b74368e3b66b53330dc70a57e70633105b642d021710b34fbc54a5c
with-test & >= "2.5"
= version & with-test
with-test
= version
>= "1.9.1" & < "2.0"
>= "2.7"
>= "4.08"