DO NOT USE IN PRODUCTION
Mec provides elliptic curve and finite field based cryptographic primitives and protocols.
The library characteristics are:
written purely in OCaml. No C or assembly code
implementations are modular, focusing on parameters readability for
the different primitive instantiations
can be used to generate test vectors
can be used to create new primitive instantiations
provides tools to generate secure parameters, like for Poseidon hash function
can be used to prototype primitives or protocols
Do not use this library if:
performance is important. Mec is not meant to be efficient, and maybe will never be.
you want to compare the performance between different cryptographic
primitives. As performance is not important in the implementation, it won't make
sense to compare.
Here some suggestions of libraries you can use to get better performances:
ocaml-bls12-381 provides the instance BLS12-381 and also Poseidon128 as implemented here
hacl-star provides different elliptic curves.
Mec.Curve) focuses on implementing elliptic curves like Pallas,
Vesta, Secp256k1, Secp256r1, Ed26619, etc. Computations can happen in
different types of coordinates: affine, projective, jacobian, etc and
conversions are provided.
Mec.Hash) focuses on implementing EC or field based hash functions
like Poseidon, Sinsemilla, Pedersen. We tend to add instances found in
projects like Dusk, Zcash and others.
Mec.Signature) focuses on implementing EC or field signature schemes.
Mec.Protocols) implements different protocols using the
cryptographic primitives. At the moment, this section is poor.
Install and use
There is no plan to release a version of Mec right now as it is not meant to be
used in production. There will maybe be releases from time to time. If not, it
is recommended to pin to a certain commit, or master.
opam pin add mec.dev git+https://gitlab.com/dannywillems/ocaml-ec\#master --no-action opam install mec.dev
To use in your project, simply add
mec in your dependencies.
with-test & >= "2.5"
>= "1.9.1" & < "2.0.0"