JJ: Description from the destination commit:

+ wip secmod future keys refacto

JJ: Description from source commit:
.
This commit is contained in:
swrup 2026-02-17 10:48:31 +01:00
parent f6cf06591b
commit 626cd4ee6d
10 changed files with 410 additions and 463 deletions

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