Hacl.K256ECDSA on the K-256 curve
Buffers have the following size constraints:
pk: 64 bytes, corresponding to the "raw" representation of an elliptic curve point (see Point representation and conversions)sk, k, msg: 32 bytessignature: 64 bytesElliptic curve points have two 32-byte coordinates (x, y) and can be represented in 3 ways:
x || y0x02 + (y % 2), followed by x0x04, followed by the "raw" formThese functions convert points between these representations:
raw_to_compressed p converts a "raw" point p (64 bytes) to a "compressed" point (33 bytes).
raw_to_uncompressed p converts a "raw" point p (64 bytes) to an "uncompressed" point (65 bytes).
compressed_to_raw p attempts to convert a "compressed" point p (33 bytes) to a "raw" point (64 bytes) and returns it if successful.
uncompressed_to_raw p attempts to convert an "uncompressed" point p (65 bytes) to a "raw" point (64 bytes) and returns it if successful.
val valid_sk : sk:bytes -> boolvalid_sk sk checks if the contents of sk can be used as a secret key or as a signing secret. This is the case if:
sk is 32 bytes longsk < the order of the curveval valid_pk : pk:bytes -> boolvalid_pk pk checks if the contents of pk is a valid public key. This is the case if:
pk is 64 bytes long (it is in the "raw" form)x and the last 32 bytes encode y such that (x, y) is on the curve and both x and y are greater than 0 and less than the order of the curveECDSA signing and signature verification functions
For the sign and verify functions included in this module, msg is the 32-byte digest of the message to be signed, requiring users to use a cryptographic hash function of their choosing before calling them.
secret_to_public sk checks if sk is a valid secret key and, if it is, returns its corresponding public key.
sign sk msg k attempts to sign the message msg with secret key sk and signing secret k and returns the signature if successful.
verify pk msg signature checks the signature of msg using public key pk and returns true if it is valid.
module Libsecp256k1 : sig ... endVersions of the ECDSA functions which work on low-S normalized signatures. These functions can be used when compatibility with libsecp256k1 is required.
module Noalloc : sig ... endVersions of these functions which write their output in a buffer passed in as an argument