ok denom group + exchange_sig
This commit is contained in:
parent
9bc30eb54b
commit
2b340e0095
2 changed files with 37 additions and 15 deletions
|
|
@ -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
|
||||||
Hashtbl.to_seq ht
|
|
||||||
|> List.of_seq
|
(* ! important for /keys .exchange_sig
|
||||||
|> List.map
|
each group must be ordered in _reverse_ chronological order
|
||||||
(fun
|
order of groups to compute hash, must be the same as the order
|
||||||
((value, fee_withdraw, fee_deposit, fee_refresh, fee_refund), denoms)
|
in /keys .denominations *)
|
||||||
->
|
let open Api in
|
||||||
Api.DenomGroup.Rsa
|
let open DenomGroup in
|
||||||
Api.RsaDenomGroup.
|
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)
|
||||||
|
->
|
||||||
|
Rsa
|
||||||
{
|
{
|
||||||
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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue