This commit is contained in:
swrup 2026-02-27 20:57:30 +01:00
parent 274323d737
commit 6bb14fcbf6
3 changed files with 17 additions and 23 deletions

View file

@ -274,15 +274,10 @@ module Make (Conn : Pg.CONN) : S = struct
} }
let verify_future_signkey Api.SignKeySignature.{ key; master_sig } = let verify_future_signkey Api.SignKeySignature.{ key; master_sig } =
let open Signatures.ExchangeSigningKeyValidity in
let* fsk = find_future_signkey key in let* fsk = find_future_signkey key in
verify Config.master_public_key master_sig let sk = sk_of_future_sk fsk master_sig in
{ Signkey.verify_exchange_signing_key_validity ~key:Config.master_public_key
R.start= fsk.stamp_start; sk
expire= fsk.stamp_expire;
end_= fsk.stamp_end;
signkey_pub= key;
}
let verify_future_denomination Api.DenomSignature.{ h_denom_pub; master_sig } let verify_future_denomination Api.DenomSignature.{ h_denom_pub; master_sig }
= =

View file

@ -8,5 +8,15 @@ type t = {
master_sig: Signatures.ExchangeSigningKeyValidity.t; master_sig: Signatures.ExchangeSigningKeyValidity.t;
} }
let verify_exchange_signing_key_validity ~key sk =
let open Signatures.ExchangeSigningKeyValidity in
verify key sk.master_sig
{
R.start= sk.stamp_start;
expire= sk.stamp_expire;
end_= sk.stamp_end;
signkey_pub= sk.pub;
}
let is_valid_at ~timestamp sk = let is_valid_at ~timestamp sk =
Timestamp.geq sk.stamp_start timestamp && Timestamp.lt timestamp sk.stamp_end Timestamp.geq sk.stamp_start timestamp && Timestamp.lt timestamp sk.stamp_end

View file

@ -35,29 +35,18 @@ let keys content =
}) })
in in
let sk_l = List.map SignKey.to_signkey v.signkeys in
let* () = let* () =
let open SignKey in sk_l
v.signkeys
|> list_iter |> list_iter
(fun { key; stamp_start; stamp_expire; stamp_end; master_sig } -> (Signkey.verify_exchange_signing_key_validity ~key:v.exchange_pub)
let open Signatures.ExchangeSigningKeyValidity in
verify v.master_public_key master_sig
{
R.start= stamp_start;
expire= stamp_expire;
end_= stamp_end;
signkey_pub= key;
})
in in
let* () = let* () =
let opt = let opt = List.find_opt (fun sk -> sk.Signkey.pub = v.exchange_pub) sk_l in
List.find_opt (fun sk -> sk.SignKey.key = v.exchange_pub) v.signkeys
in
match opt with match opt with
| None -> Fmt.error "exchange_pub is not in signkeys list" | None -> Fmt.error "exchange_pub is not in signkeys list"
| Some sk -> | Some sk ->
let sk = SignKey.to_signkey sk in
(* TODO will need to fake time to validate expired data *) (* TODO will need to fake time to validate expired data *)
let now = Timestamp.of_ptime (Ptime_clock.now ()) in let now = Timestamp.of_ptime (Ptime_clock.now ()) in
if Signkey.is_valid_at ~timestamp:now sk then Ok () if Signkey.is_valid_at ~timestamp:now sk then Ok ()