UNIX version of BLS12-381 primitives. Not implementating the virtual package bls12-381
Library bls12-381-legacy
include Bls12_381_gen.G2.BASE with type Scalar.t = Fr.t
include Bls12_381_gen.Elliptic_curve_sig.T with type Scalar.t = Fr.t
exception Not_on_curve of Bytes.t
type t

The type of the element in the elliptic curve

val size_in_bytes : int

The size of a point representation, in bytes

module Scalar : Ff_sig.BASE with type t = Fr.t
val empty : unit -> t

Create an empty value to store an element of the curve. DO NOT USE THIS TO DO COMPUTATIONS WITH, UNDEFINED BEHAVIORS MAY HAPPEN

val check_bytes : Bytes.t -> bool

Check if a point, represented as a byte array, is on the curve *

val of_bytes_opt : Bytes.t -> t option

Attempt to construct a point from a byte array

val of_bytes_exn : Bytes.t -> t

Attempt to construct a point from a byte array. Raise Not_on_curve if the point is not on the curve

val to_bytes : t -> Bytes.t

Return a representation in bytes

val zero : t

Zero of the elliptic curve

val one : t

A fixed generator of the elliptic curve

val is_zero : t -> bool

Return true if the given element is zero

val random : ?state:Random.State.t -> unit -> t

Generate a random element

val add : t -> t -> t

Return the addition of two element

val double : t -> t

double g returns 2g

val negate : t -> t

Return the opposite of the element

val eq : t -> t -> bool

Return true if the two elements are algebraically the same

val mul : t -> Scalar.t -> t

Multiply an element by a scalar

val of_z_opt : x:(Z.t * Z.t) -> y:(Z.t * Z.t) -> t option

Create a point from the coordinates. If the point is not on the curve, None is return. The points must be given modulo the order of Fq. The points are in the form (c0, c1) where x = c1 * X + c0 and y = c1 * X + c0. To create the point at infinity, use zero ()