package bls12-381

  1. Overview
  2. Docs

Follow https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-3.3

A proof of possession scheme uses a separate public key validation step, called a proof of possession, to defend against rogue key attacks. This enables an optimization to aggregate signature verification for the case that all signatures are on the same message.

type proof = Bytes.t
val sign : sk -> Bytes.t -> signature

Equivalent to core_sign with the DST given in the specification https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-4.2.3

val verify : pk -> Bytes.t -> signature -> bool

Equivalent to core_verify with the DST given in the specification https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-4.2.3

val pop_prove : sk -> proof

pop_proof sk implements https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-3.3.2

val pop_verify : pk -> proof -> bool

pop_verify pk proof implements https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-3.3.3

val aggregate_verify : (pk * proof) list -> Bytes.t -> signature -> bool

aggregate_verify pks msg aggregated_signature performs a aggregate signature verification. It supposes the same message msg has been signed. It implements the FastAggregateVerify algorithm specified in https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-04#section-3.3.4