From d8eea725259fa6b837fcdd4658edcb80d31026eb Mon Sep 17 00:00:00 2001 From: swrup Date: Thu, 26 Feb 2026 17:04:48 +0100 Subject: [PATCH] --- src/http_info.ml | 12 ++++++++---- src/signkey.ml | 3 +++ src/time.ml | 4 ++++ src/time.mli | 4 ++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/http_info.ml b/src/http_info.ml index 53039402..af03b278 100644 --- a/src/http_info.ml +++ b/src/http_info.ml @@ -83,14 +83,18 @@ let mk_keys ~db_conn (module Keys : Keys.S) ~last_issue_date = let* denominations = Denomination.make_denom_group_sorted denom_l in let* signkeys = Keys.signkeys () in - let signkeys = List.map Api.SignKey.of_signkey signkeys in (* the eddsa pub key used to sign exchange_sig *) let* exchange_pub = - match signkeys with - | [] -> Fmt.error "exchange has no active signkey" - | sk :: _ -> Ok sk.SignKey.key + let now = Timestamp.of_ptime (Ptime_clock.now ()) in + let opt = + List.find_opt (fun sk -> Signkey.is_valid_at ~timestamp:now sk) signkeys + in + match opt with + | None -> Fmt.error "exchange has no active signkey" + | Some sk -> Ok sk.pub in + let signkeys = List.map Api.SignKey.of_signkey signkeys in (* ! depends on denominations order *) let exchange_sig = diff --git a/src/signkey.ml b/src/signkey.ml index f0035e1f..8d58e117 100644 --- a/src/signkey.ml +++ b/src/signkey.ml @@ -7,3 +7,6 @@ type t = { stamp_end: Timestamp.t; master_sig: Signatures.ExchangeSigningKeyValidity.t; } + +let is_valid_at ~timestamp sk = + Timestamp.geq sk.stamp_start timestamp && Timestamp.lt timestamp sk.stamp_end diff --git a/src/time.ml b/src/time.ml index e65cad41..cf2d2093 100644 --- a/src/time.ml +++ b/src/time.ml @@ -97,6 +97,10 @@ module Timestamp = struct let never = uint64_max let zero = 0L let compare = Int64.unsigned_compare + let gt a b = compare a b > 0 + let geq a b = compare a b >= 0 + let lt a b = compare a b < 0 + let leq a b = compare a b <= 0 let min a b = if compare a b < 0 then a else b let max a b = if compare a b > 0 then a else b diff --git a/src/time.mli b/src/time.mli index ce2e398a..c5ed5b14 100644 --- a/src/time.mli +++ b/src/time.mli @@ -37,6 +37,10 @@ module Timestamp : sig val never : t val zero : t val compare : t -> t -> int + val gt : t -> t -> bool + val geq : t -> t -> bool + val lt : t -> t -> bool + val leq : t -> t -> bool val min : t -> t -> t val max : t -> t -> t val diff : t -> t -> TimeRelative.t