Module Signature.Bls

Tezos - BLS12-381 cryptography

include Tezos_stdlib.Compare.S with type t := Bls12_381_signature.MinPk.signature
val aggregate_check : ({Public_key}34.t * {watermark}37 option * bytes) list -> {t}36 -> bool

aggregate_check pk_msg_list signature returns true if the signature is a valid aggregate signature of the signatures produced by signing message msg (with optional watermark) with the secret key of pk for each element (pk, watermark, msg) of the list pk_msg_list.

val aggregate_signature_opt : ?subgroup_check:bool -> {t}36 list -> {t}36 option

aggregate_signature_opt sig_list creates an aggregated signature using the list of signatures sig_list. If subgroup_check is set, the function also checks if the points are in the prime subgroup.

val aggregate_signature_weighted_opt : ?subgroup_check:bool -> (Z.t * {t}36) list -> {t}36 option

aggregate_signature_weighted_opt [(w_1, s_1);(w_1, s_2);...] aggregates the signatures s_i multiplied by their weights w_i, i.e it returns the sum of w_i * s_i. Return None if deserialization of signatures fails. If subgroup_check is set, the function also checks if the points are in the prime subgroup.

val aggregate_public_key_opt : ?subgroup_check:bool -> {Public_key}34.t list -> {Public_key}34.t option

aggregate_public_key_opt ?subgroup_check pks aggregates the public keys pks. If subgroup_check is set, the function also checks if the points are in the prime subgroup.

val aggregate_public_key_weighted_opt : ?subgroup_check:bool -> (Z.t * {Public_key}34.t) list -> {Public_key}34.t option

aggregate_public_key_weighted_opt [(w_1, pk_1);(w_2, pk_2);...] aggregates the public keys pk_i multiplied by their weights w_i, i.e it returns the sum of w_i * pk_i. If subgroup_check is set, the function also checks if the points are in the prime subgroup.

module Public_key_hash : sig ... end
module Public_key : sig ... end
module Secret_key : sig ... end
type t = {t}4
val pp : Stdlib.Format.formatter -> t -> unit
include Tezos_stdlib.Compare.S with type t := t
val (=) : t -> t -> bool

x = y iff compare x y = 0

val (<>) : t -> t -> bool

x <> y iff compare x y <> 0

val (<) : t -> t -> bool

x < y iff compare x y < 0

val (<=) : t -> t -> bool

x <= y iff compare x y <= 0

val (>=) : t -> t -> bool

x >= y iff compare x y >= 0

val (>) : t -> t -> bool

x > y iff compare x y > 0

val compare : t -> t -> int

compare an alias for the functor parameter's compare function

val equal : t -> t -> bool

equal x y iff compare x y = 0

val max : t -> t -> t

max x y is x if x >= y otherwise it is y

val min : t -> t -> t

min x y is x if x <= y otherwise it is y

val to_b58check : t -> string
val to_short_b58check : t -> string
val of_b58check : string -> t Tezos_error_monad.Error_monad.tzresult
val of_b58check_exn : string -> t
val of_b58check_opt : string -> t option
type Base58.data +=
  1. | Data of t
val b58check_encoding : t Base58.encoding
val encoding : t Data_encoding.t
val rpc_arg : t Tezos_rpc.Arg.t
val zero : t
type watermark = {watermark}25
val sign : ?watermark:watermark -> Secret_key.t -> Stdlib.Bytes.t -> t

sign ?watermark sk message produce the signature of message (with possibly watermark) using sk.

val check : ?watermark:watermark -> Public_key.t -> t -> Stdlib.Bytes.t -> bool

check pk ?watermark signature message check that signature is the signature produced by signing message (with possibly watermark) with the secret key of pk.

val generate_key : ?seed:Stdlib.Bytes.t -> unit -> Public_key_hash.t * Public_key.t * Secret_key.t
val deterministic_nonce : Secret_key.t -> Stdlib.Bytes.t -> Stdlib.Bytes.t

deterministic_nonce sk msg returns a nonce that is determined by sk and msg

val deterministic_nonce_hash : Secret_key.t -> Stdlib.Bytes.t -> Stdlib.Bytes.t

deterministic_nonce_hash sk msg returns the BLAKE2b hash of a nonce that is determined by sk and msg.

In other words, Blake2b.digest (deterministic_nonce sk msg) = deterministic_nonce_hash sk msg

val share_secret_key : Secret_key.t -> m:int -> n:int -> (int * Secret_key.t) list

share_secret_key sk m n shares a secret key sk between n participants so that any m participants can collaboratively sign messages, while fewer than m participants cannot produce a valid signature. Each participant is assigned a unique identifier id_i in range 1; n.

val generate_threshold_key : Secret_key.t -> m:int -> n:int -> Public_key.t * Public_key_hash.t * Stdlib.Bytes.t * (int * Secret_key.t) list

generate_threshold_key sk m n is the same as share_secret_key sk m n but also returns a public key, a public key hash and a proof of possession corresponding to a secret key sk.

val threshold_signature_opt : (int * t) list -> t option

threshold_signature_opt [(id_x, s_x);(id_y, s_y);...] reconstructs a signature if at least m valid signatures s_i produced by participants id_i are provided.

val size : int
val to_hex : t -> Tezos_stdlib.Hex.t
val of_hex_opt : Tezos_stdlib.Hex.t -> t option
val of_hex_exn : Tezos_stdlib.Hex.t -> t
val to_string : t -> string
val of_string : string -> t Tezos_error_monad.Error_monad.tzresult
val of_string_opt : string -> t option
val of_string_exn : string -> t
val to_bytes : t -> Stdlib.Bytes.t
val of_bytes : Stdlib.Bytes.t -> t Tezos_error_monad.Error_monad.tzresult
val of_bytes_opt : Stdlib.Bytes.t -> t option
val of_bytes_exn : Stdlib.Bytes.t -> t
module Primitive : sig ... end

Module to access/expose the primitives of BLS12-381

val sign_aug : ?watermark:watermark -> Bls12_381_signature.sk -> watermark -> t
val check_aug : ?watermark:watermark -> Public_key.t -> t -> watermark -> bool
val pop_prove : ?msg:Public_key.t -> Bls12_381_signature.sk -> Stdlib.Bytes.t
val pop_verify : Public_key.t -> ?msg:Public_key.t -> Stdlib.Bytes.t -> bool