Hacl.K256
ECDSA 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 || y
0x02 + (y % 2)
, followed by x
0x04
, 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 -> bool
valid_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 -> bool
valid_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 ... end
Versions 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 ... end
Versions of these functions which write their output in a buffer passed in as an argument