package fiat-p256

  1. Overview
  2. Docs
Primitives for Elliptic Curve Cryptography taken from Fiat

Install

Dune Dependency

Authors

Maintainers

Sources

fiat-p256-v0.2.1.tbz
sha256=899f6ebfb2e2edb20368c09d3e8eb429984f4a9c0bf7cc14aa0edb3d71820601
sha512=f745b0c5844cb79615e61ed8524cb54c52152ec96c5e1615e4ca21feac6621a020ff46df33b77cb50b98e414efd6a12474d26a3e426e6f9e234b880b70ea7c43

Description

This is an implementation of the ECDH over P-256 key exchange algorithm, using code from Fiat (https://github.com/mit-plv/fiat-crypto).

Cryptographic primitives should not be used in end applications, they are better used as part of a cryptographic library.

Tags

org:mirage

Published: 09 May 2020

README

Fiat-p256

fiat-p256 contains primitives for ECDH key exchange algorithm over NIST curve P-256.

It internally uses bindings to C code generated using the correct-by-construction implementations from fiat-crypto.

Please be aware that cryptographic primitives should not be used in end applications, they are better used as part of a higher level cryptographic library.

Installation

fiat-p256 is available on opam and can be install as follows:

opam install fiat-p256

Usage

The entry point to this library is the Fiat_p256 module and the main function is dh which let you perform a key exchange given your private key scalar and the other party's public key point:

let secret = Fiat_p256.dh ~scalar ~point

Note that the point values built or parsed using Fiat_p256's interface are checked according to NIST's Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography section 5.6.2.3.2 so that you shouldn't be able to provide an invalid point or the point at infinity to the functions exposed in this module.

You can also compute the public P-256 key corresponding to your private key scalar using the public function:

let public_key = Fiat_p256.public ~scalar

Note that the scalar values parsed using Fiat_p256's interface must be within P-256's generator subgroup order range so that your public key can't be the point at infinity. Any scalar not in the range [1 - (n-1)], n being the group order, will be rejected.

Dependencies (6)

  1. hex >= "1.4.0"
  2. eqaf >= "0.7" & < "0.10"
  3. dune-configurator
  4. dune >= "1.10.0"
  5. cstruct >= "3.5.0" & < "6.1.0"
  6. bigarray-compat

Dev Dependencies (7)

  1. yojson with-test & >= "1.6.0"
  2. stdlib-shims with-test
  3. rresult with-test
  4. ppx_deriving_yojson with-test
  5. benchmark with-test
  6. asn1-combinators with-test & < "0.3.0"
  7. alcotest with-test & < "1.4.0"

Used by (2)

  1. tls >= "0.12.0" & < "0.13.0"
  2. tls-mirage >= "0.12.0" & < "0.13.0"

Conflicts (2)

  1. ocaml-freestanding < "0.4.1"
  2. mirage-xen-posix < "3.1.0"
OCaml

Innovation. Community. Security.