This commit is contained in:
swrup 2026-02-17 13:23:25 +01:00
parent df181b590d
commit 4475f4f3d4
3 changed files with 36 additions and 49 deletions

View file

@ -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 }

View file

@ -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 ->
Sm.get_signkeys ()
|> 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
|> 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

View file

@ -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;