2025-10-17 16:50:21 +02:00
|
|
|
open Types
|
|
|
|
|
|
2025-10-16 08:23:40 +02:00
|
|
|
type t = {
|
2025-10-17 15:09:47 +02:00
|
|
|
stamp_start: Ptime.t;
|
|
|
|
|
stamp_expire: Ptime.t;
|
|
|
|
|
stamp_end: Ptime.t;
|
2025-10-17 16:50:21 +02:00
|
|
|
pub: EddsaPublicKey.t;
|
|
|
|
|
sign: string -> EddsaSignature.t;
|
2025-10-16 08:23:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let make ~name =
|
|
|
|
|
let finally _key = () in
|
|
|
|
|
Vif.Device.v ~name ~finally [] @@ fun () ->
|
|
|
|
|
(* TODO
|
|
|
|
|
- look if it exists
|
|
|
|
|
- if not, create it (TOFU initialization scheme)
|
|
|
|
|
- write it *)
|
2025-10-17 15:09:47 +02:00
|
|
|
(* TODO time
|
|
|
|
|
correctly set those: *)
|
|
|
|
|
let stamp_start = Ptime_clock.now () in
|
|
|
|
|
let stamp_expire =
|
|
|
|
|
match Ptime.add_span stamp_start Config.Exchange.signkey_legal_duration with
|
|
|
|
|
| None ->
|
|
|
|
|
Fmt.failwith "Ptime.add_span: result is not in the range [min;max]"
|
|
|
|
|
| Some v -> v
|
|
|
|
|
in
|
|
|
|
|
let stamp_end = stamp_expire in
|
2025-10-16 08:23:40 +02:00
|
|
|
let priv, pub = Mirage_crypto_ec.Ed25519.generate () in
|
2025-10-17 16:50:21 +02:00
|
|
|
let sign s = EddsaSignature.sign ~key:priv s in
|
|
|
|
|
{ stamp_start; stamp_expire; stamp_end; pub; sign }
|
2025-10-16 08:23:40 +02:00
|
|
|
|
|
|
|
|
let signkey_device = make ~name:"signkey"
|
|
|
|
|
|
|
|
|
|
(* the actual exchange's signing key
|
|
|
|
|
signed by the secmod signkey *)
|
|
|
|
|
let exchange_device = make ~name:"exchange"
|
|
|
|
|
let denom_device = make ~name:"denom"
|