diff --git a/src/api.ml b/src/api.ml index 8ec12854..9f3b99d0 100644 --- a/src/api.ml +++ b/src/api.ml @@ -915,6 +915,10 @@ module SignKey = struct Signkey.{ pub; stamp_start; stamp_expire; stamp_end; master_sig } = { key= pub; stamp_start; stamp_expire; stamp_end; master_sig } + let to_signkey { key= pub; stamp_start; stamp_expire; stamp_end; master_sig } + = + Signkey.{ pub; stamp_start; stamp_expire; stamp_end; master_sig } + let jsont = let make key stamp_start stamp_expire stamp_end master_sig = { key; stamp_start; stamp_expire; stamp_end; master_sig } diff --git a/test/validate_response.ml b/test/validate_response.ml index c0b68b0c..fd6072be 100644 --- a/test/validate_response.ml +++ b/test/validate_response.ml @@ -51,7 +51,19 @@ let keys content = }) in - (* validate exchange_pub *) + let* () = + let opt = + List.find_opt (fun sk -> sk.SignKey.key = v.exchange_pub) v.signkeys + in + match opt with + | None -> Fmt.error "exchange_pub is not in signkeys list" + | Some sk -> + let sk = SignKey.to_signkey sk in + (* todo will need to fake time to validate expired data *) + let now = Timestamp.of_ptime (Ptime_clock.now ()) in + if Signkey.is_valid_at ~timestamp:now sk then Ok () + else Fmt.error "exchange_pub is not valid at the current time" + in (* validate exchange_sig *) (* validate denominations *)