diff --git a/src/bin_sig.ml b/src/bin_sig.ml index 1c95cdcc..fda9762a 100644 --- a/src/bin_sig.ml +++ b/src/bin_sig.ml @@ -77,13 +77,17 @@ module MK (R : sig val bin : r Bin.t end) : sig + open Crypto + type r = R.r type t - val sign : key:Crypto.EddsaPrivateKey.t -> r -> t + val signf : r -> key:EddsaPrivateKey.t -> t + val sign : key:EddsaPrivateKey.t -> r -> t + val sign' : r -> (string -> EddsaSignature.t) -> t r -> (r -> string) -> t (* Ok () on verification success *) - val verify : key:Crypto.EddsaPublicKey.t -> t -> r -> (unit, string) result + val verify : key:EddsaPublicKey.t -> t -> r -> (unit, string) result val jsont : t Jsont.t val caqti : t Caqti_type.t end = struct @@ -93,7 +97,9 @@ end = struct type t = EddsaSignature.t let bin = R.bin + let signf = EddsaSignature.mk_signf (Bin.to_string bin) let sign ~key r = EddsaSignature.sign ~key (Bin.to_string bin r) + let sign' r signf = signf (Bin.to_string bin r) let verify ~key t r = let b = EddsaSignature.verify ~key t ~msg:(Bin.to_string bin r) in diff --git a/src/crypto.ml b/src/crypto.ml index 6abf3849..bb3a4466 100644 --- a/src/crypto.ml +++ b/src/crypto.ml @@ -74,6 +74,7 @@ end module EddsaSignature : sig type t + val mk_signf : ('r -> string) -> 'r -> key:EddsaPrivateKey.t -> t val sign : key:EddsaPrivateKey.t -> string -> t val verify : key:EddsaPublicKey.t -> t -> msg:string -> bool val to_octets : t -> string @@ -88,6 +89,9 @@ end = struct binary-encoded objects with just the R and S values *) type t = string + let mk_signf to_string = + fun r ~key -> Mirage_crypto_ec.Ed25519.sign ~key (to_string r) + (* mirage_crypto: "The result is the concatenation of r and s, as specified in RFC 8032." *) let sign ~key s = Mirage_crypto_ec.Ed25519.sign ~key s let verify ~key s ~msg = Mirage_crypto_ec.Ed25519.verify ~key s ~msg