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

View file

@ -16,7 +16,7 @@ type t = {
master_sig: Signatures.DenominationKeyValidity.t;
}
let make_denom_group denominations =
let make_denom_group_sorted denominations =
let open Syntax in
let ht = Hashtbl.create 0xff in
List.iter
@ -72,19 +72,41 @@ let make_denom_group denominations =
Hashtbl.replace ht k (v :: l))
denominations
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
|> List.of_seq
|> List.map
(fun
((value, fee_withdraw, fee_deposit, fee_refresh, fee_refund), denoms)
->
Api.DenomGroup.Rsa
Api.RsaDenomGroup.
Rsa
{
denoms;
denoms= List.sort cmp_denom denoms;
value;
fee_withdraw;
fee_deposit;
fee_refresh;
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)
denom_l
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 =
@ -110,13 +110,13 @@ let mk_keys ~db_conn (module Keys : Keys.S) ~last_issue_date =
| sk :: _ -> Ok sk.SignKey.key
in
(* TODO *)
(* Compact eddsa signature over the contatentation of all of the master_sigs
(* eddsa signature over the contatentation of all of the master_sigs
(in reverse chronological order by group) in the arrays under "denominations" *)
let exchange_sig =
let hc =
denom_l
|> List.map (fun dn -> dn.Denomination.master_sig)
denominations
|> 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
|> String.concat ""
|> Hash.H64.hash