diff --git a/src/api.ml b/src/api.ml index b92ff019..074149bc 100644 --- a/src/api.ml +++ b/src/api.ml @@ -922,6 +922,19 @@ module SignKey = struct master_sig: ExchangeSigningKeyValidity.t; } + (* TODO rm one of them *) + let of_signkey + Signkey. + { + pub; + stamp_start; + stamp_expire; + stamp_end; + master_sig; + revoked_sig= _; + } = + { key= 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/src/http_information.ml b/src/http_information.ml index bbc53b20..17186d5a 100644 --- a/src/http_information.ml +++ b/src/http_information.ml @@ -41,7 +41,6 @@ let denomgroup_of_denomdata master_sig; revoked_sig= _; } = - let master_sig = match master_sig with None -> assert false | Some v -> v in let denoms = [ RsaDenom. @@ -112,92 +111,66 @@ let mk_keys ~db_conn (module Sm : Secmod.S) ~last_issue_date = let wallet_balance_limit_without_kyc = None in let hard_limits = [] in let zero_limits = [] in - let denom_data_l = - (* TODO sm-db *) + let dn_l = (*Pg.get_denominations db_conn |> unwrap_err_caqti *) - Sm.get_denoms_data () - in - let denom_data_l = + Sm.get_denominations () + |> (* reverse chronological order *) - List.sort - (fun a b -> Stdlib.compare b.Denomination.stamp_start a.stamp_start) - denom_data_l + List.sort (fun a b -> + Stdlib.compare b.Denomination.stamp_start a.stamp_start) in let list_issue_date = - match denom_data_l with - | [] -> Time.Timestamp.never - | v :: _ -> v.Denomination.stamp_start + match dn_l with + | [] -> Timestamp.never + | dn :: _ -> dn.Denomination.stamp_start in let denominations = - let open Denomination in (* if `?last_issue_date` query param does not exactly match the `stamp_start` of one of the denomination keys, all keys are returned *) + let open Denomination in let l = match last_issue_date with - | None -> denom_data_l + | None -> dn_l | Some last_issue_date -> ( match List.find_opt - (fun v -> - Time.Timestamp.compare v.stamp_start last_issue_date = 0) - denom_data_l + (fun v -> Timestamp.compare v.stamp_start last_issue_date = 0) + dn_l with - | None -> denom_data_l + | None -> dn_l | Some _ -> List.filter (fun v -> Time.Timestamp.compare v.stamp_start last_issue_date >= 0) - denom_data_l) + dn_l) in List.map denomgroup_of_denomdata l in let signkeys = - (* TODO sm-db - use database signkey data / verify secmod and database are in sync *) (* let now = Ptime_clock.now () |> Option.some in let+ signkey_data_l = Pg.get_active_signkeys db_conn ~now |> unwrap_err_caqti in*) - let signkey_data_l = Sm.get_signkeys_data () in - let signkey_data_l = - List.sort - (fun a b -> - let open Signkey in - Stdlib.compare b.stamp_start a.stamp_start) - signkey_data_l - in - List.filter_map - (fun Signkey. - { - pub; - stamp_start; - stamp_expire; - stamp_end; - master_sig; - revoked_sig= _; - } -> - match master_sig with - | None -> None - | Some master_sig -> - Some - SignKey. - { key= pub; stamp_start; stamp_expire; stamp_end; master_sig }) - signkey_data_l + Sm.get_signkeys () + |> List.sort (fun a b -> + let open Signkey in + Stdlib.compare b.stamp_start a.stamp_start) + |> List.map Api.SignKey.of_signkey in let exchange_pub = (* the eddsa pub key used to sign exchange_sig *) match signkeys with | [] -> Fmt.failwith "exchange has no active signkey" - | v :: _ -> v.SignKey.key + | sk :: _ -> sk.SignKey.key in let exchange_sig = (* Compact EdDSA signature (binary-only) over the contatentation of all of the master_sigs (in reverse chronological order by group) in the arrays under "denominations". *) let hc = - denom_data_l - |> List.filter_map (fun v -> v.Denomination.master_sig) + dn_l + |> List.map (fun dn -> dn.Denomination.master_sig) |> List.map Signatures.DenominationKeyValidity.to_octets |> String.concat "" |> Hash.H64.hash diff --git a/src/signkey.ml b/src/signkey.ml index 611b894c..a710aee6 100644 --- a/src/signkey.ml +++ b/src/signkey.ml @@ -1,5 +1,6 @@ open Crypto +(* TODO replace by Api.SignKey.t instead? (no revoked_sig) *) type t = { pub: eddsa_pub; stamp_start: Timestamp.t;