ok denom group + exchange_sig

This commit is contained in:
swrup 2026-02-23 10:59:36 +01:00
parent 9bc30eb54b
commit 2b340e0095
2 changed files with 37 additions and 15 deletions

View file

@ -16,7 +16,7 @@ type t = {
master_sig: Signatures.DenominationKeyValidity.t; master_sig: Signatures.DenominationKeyValidity.t;
} }
let make_denom_group denominations = let make_denom_group_sorted denominations =
let open Syntax in let open Syntax in
let ht = Hashtbl.create 0xff in let ht = Hashtbl.create 0xff in
List.iter List.iter
@ -72,19 +72,41 @@ let make_denom_group denominations =
Hashtbl.replace ht k (v :: l)) Hashtbl.replace ht k (v :: l))
denominations denominations
in in
(* ! important for /keys .exchange_sig
each group must be ordered in _reverse_ chronological order
order of groups to compute hash, must be the same as the order
in /keys .denominations *)
let open Api in
let open DenomGroup in
let open RsaDenomGroup in
let open RsaDenom in
let cmp_denom b a = Timestamp.compare a.stamp_start b.stamp_start in
let cmp_group =
let cmp_amount a b =
let open Amount in
match Int64.unsigned_compare a.value b.value with
| 0 -> Int32.unsigned_compare a.fraction b.fraction
| n -> n
in
fun (Rsa a) (Rsa b) -> cmp_amount a.value b.value
in
let l =
Hashtbl.to_seq ht Hashtbl.to_seq ht
|> List.of_seq |> List.of_seq
|> List.map |> List.map
(fun (fun
((value, fee_withdraw, fee_deposit, fee_refresh, fee_refund), denoms) ((value, fee_withdraw, fee_deposit, fee_refresh, fee_refund), denoms)
-> ->
Api.DenomGroup.Rsa Rsa
Api.RsaDenomGroup.
{ {
denoms; denoms= List.sort cmp_denom denoms;
value; value;
fee_withdraw; fee_withdraw;
fee_deposit; fee_deposit;
fee_refresh; fee_refresh;
fee_refund; fee_refund;
}) })
|> List.sort cmp_group
in
l

View file

@ -92,7 +92,7 @@ let mk_keys ~db_conn (module Keys : Keys.S) ~last_issue_date =
(fun v -> Timestamp.compare v.Denomination.stamp_start timestamp >= 0) (fun v -> Timestamp.compare v.Denomination.stamp_start timestamp >= 0)
denom_l denom_l
in in
let* denominations = Denomination.make_denom_group denom_l in let* denominations = Denomination.make_denom_group_sorted denom_l in
let* signkeys = Keys.signkeys () in let* signkeys = Keys.signkeys () in
let signkeys = let signkeys =
@ -110,13 +110,13 @@ let mk_keys ~db_conn (module Keys : Keys.S) ~last_issue_date =
| sk :: _ -> Ok sk.SignKey.key | sk :: _ -> Ok sk.SignKey.key
in in
(* TODO *) (* eddsa signature over the contatentation of all of the master_sigs
(* Compact eddsa signature over the contatentation of all of the master_sigs
(in reverse chronological order by group) in the arrays under "denominations" *) (in reverse chronological order by group) in the arrays under "denominations" *)
let exchange_sig = let exchange_sig =
let hc = let hc =
denom_l denominations
|> List.map (fun dn -> dn.Denomination.master_sig) |> List.map (fun (DenomGroup.Rsa g) -> g.RsaDenomGroup.denoms)
|> List.concat_map (List.map (fun dn -> dn.RsaDenom.master_sig))
|> List.map Signatures.DenominationKeyValidity.to_octets |> List.map Signatures.DenominationKeyValidity.to_octets
|> String.concat "" |> String.concat ""
|> Hash.H64.hash |> Hash.H64.hash