ligo/src/lib_base/ed25519.ml
2018-02-08 17:23:29 +01:00

112 lines
3.4 KiB
OCaml

module Public_key_hash = Blake2B.Extend (Tezos_crypto.Ed25519.Public_key_hash)
module Public_key = struct
include Tezos_crypto.Ed25519.Public_key
let encoding =
let open Data_encoding in
splitted
~json:
(describe
~title: "An Ed25519 public key (Tezos_crypto.Base58Check encoded)" @@
conv
(fun s -> to_b58check s)
(fun s ->
match of_b58check_opt s with
| Some x -> x
| None -> Data_encoding.Json.cannot_destruct
"Ed25519 public key: unexpected prefix.")
string)
~binary:
(conv
to_bytes
of_bytes_exn
(Fixed.bytes size))
let of_b58check s =
match of_b58check_opt s with
| Some x -> Ok x
| None ->
Error_monad.generic_error
"Failed to read a base58-encoded Ed25519 public key"
let param
?(name="ed25519-public")
?(desc="Ed25519 public key (b58check-encoded)") t =
Cli_entries.(param ~name ~desc
(parameter (fun _ str -> Lwt.return (of_b58check str))) t)
end
module Secret_key = struct
include Tezos_crypto.Ed25519.Secret_key
let encoding =
let open Data_encoding in
splitted
~json:
(describe
~title: "An Ed25519 secret key (Tezos_crypto.Base58Check encoded)" @@
conv
(fun s -> to_b58check s)
(fun s ->
match of_b58check_opt s with
| Some x -> x
| None -> Data_encoding.Json.cannot_destruct
"Ed25519 secret key: unexpected prefix.")
string)
~binary:
(conv
to_bytes
of_bytes_exn
(Fixed.bytes size))
let of_b58check s =
match of_b58check_opt s with
| Some x -> Ok x
| None ->
Error_monad.generic_error
"Failed to read a base58-encoded Ed25519 secret key"
let param
?(name="ed25519-secret")
?(desc="Ed25519 secret key (b58check-encoded)") t =
Cli_entries.(param ~name ~desc
(parameter (fun _ str -> Lwt.return (of_b58check str))) t)
end
module Signature = struct
include Tezos_crypto.Ed25519.Signature
let encoding =
let open Data_encoding in
splitted
~json:
(describe
~title: "An Ed25519 signature (Base58Check encoded)" @@
conv
(fun s -> to_b58check s)
(fun s ->
match of_b58check_opt s with
| Some x -> x
| None -> Data_encoding.Json.cannot_destruct
"Ed25519 signature: unexpected prefix.")
string)
~binary:
(conv
to_bytes
of_bytes_exn
(Fixed.bytes size))
let of_b58check s =
match of_b58check_opt s with
| Some x -> Ok x
| None ->
Error_monad.generic_error
"Failed to read a base58-encoded Ed25519 signature"
let param
?(name="ed25519-signature")
?(desc="Ed25519 signature (b58check-encoded)") t =
Cli_entries.(param ~name ~desc
(parameter (fun _ str -> Lwt.return (of_b58check str))) t)
end
include (Tezos_crypto.Ed25519 : (module type of Tezos_crypto.Ed25519)
with module Public_key_hash := Public_key_hash
and module Public_key := Public_key
and module Secret_key := Secret_key
and module Signature := Signature)