[@@unboxed] type sig_

This commit is contained in:
swrup 2026-03-21 09:50:04 +01:00 committed by Swrup
parent ec4e166173
commit 6d73af2169
3 changed files with 61 additions and 63 deletions

View file

@ -1,21 +1,19 @@
open Syntax
module Mirage_eddsa = Mirage_crypto_ec.Ed25519
type priv = Mirage_crypto_ec.Ed25519.priv
type pub = Mirage_crypto_ec.Ed25519.pub
let pp_error = Mirage_crypto_ec.pp_error
(* transmitted as 64-bytes base32
binary-encoded objects with just the R and S values *)
type sig_ = Sig of string
type priv = Mirage_eddsa.priv
type pub = Mirage_eddsa.pub
type sig_ = S of string [@@unboxed]
let generate = Mirage_crypto_ec.Ed25519.generate
let pub_of_priv = Mirage_crypto_ec.Ed25519.pub_of_priv
let priv_to_octets t = Mirage_crypto_ec.Ed25519.priv_to_octets t
let generate = Mirage_eddsa.generate
let pub_of_priv = Mirage_eddsa.pub_of_priv
let priv_to_octets t = Mirage_eddsa.priv_to_octets t
let priv_of_octets t =
Mirage_crypto_ec.Ed25519.priv_of_octets t |> function
| Error err ->
let err = Fmt.str "%a" Mirage_crypto_ec.pp_error err in
Error err
Mirage_eddsa.priv_of_octets t |> function
| Error err -> Fmt.error "%a" pp_error err
| Ok v -> Ok v
let priv_bin =
@ -30,11 +28,11 @@ let priv_jsont =
let to_b32 t = B32.encode (priv_to_octets t) in
Jsont.of_of_string ~kind:"EddsaPrivateKey" of_b32 ~enc:to_b32
let pub_to_octets t = Mirage_crypto_ec.Ed25519.pub_to_octets t
let pub_to_octets t = Mirage_eddsa.pub_to_octets t
let pub_of_octets t =
Mirage_crypto_ec.Ed25519.pub_of_octets t |> function
| Error e -> Fmt.error "%a" Mirage_crypto_ec.pp_error e
Mirage_eddsa.pub_of_octets t |> function
| Error e -> Fmt.error "%a" pp_error e
| Ok v -> Ok v
let pub_bin =
@ -57,25 +55,19 @@ let pub_caqti =
Caqti_type.octets
let sign ~key s =
let sig_ = Mirage_crypto_ec.Ed25519.sign ~key s in
Sig sig_
let sig_ = Mirage_eddsa.sign ~key s in
S sig_
let verify ~key (Sig s) ~msg =
let b = Mirage_crypto_ec.Ed25519.verify ~key s ~msg in
match b with
| false -> Error "EddsaSignature verification: invalid signature"
| true -> Ok ()
let verify ~key (S s) ~msg =
let b = Mirage_eddsa.verify ~key s ~msg in
match b with false -> Error "Eddsa verify: not valid" | true -> Ok ()
let sig_to_octets (Sig s) = s
let check_size s =
match String.length s = 64 with
| false -> Error "EddsaSignature of_octets: data is not 64 bytes."
| true -> Ok ()
let sig_to_octets (S s) = s
let sig_of_octets s =
let+ () = check_size s in
Sig s
match String.length s = 64 with
| false -> Error "Eddsa decode signature (binary): invalid data"
| true -> Ok (S s)
let sig_bin =
let sig_of_octets_exn t = sig_of_octets t |> Result.get_ok in
@ -86,7 +78,7 @@ let sig_jsont =
let* s = B32.decode s in
sig_of_octets s
in
let sig_to_b32 (Sig s) = B32.encode s in
let sig_to_b32 (S s) = B32.encode s in
Jsont.of_of_string ~kind:"EddsaSignature" sig_of_b32 ~enc:sig_to_b32
let sig_caqti =