From c946cb0358976b163ff18e683997662bc2ae2e96 Mon Sep 17 00:00:00 2001 From: swrup Date: Fri, 17 Oct 2025 15:25:10 +0200 Subject: [PATCH] + DenominationKeyAnnouncementPS.bin --- src/binary_formats.ml | 17 ++++++++++++++--- src/management.ml | 5 ++--- src/syntax.ml | 3 +++ src/types.ml | 15 +++++---------- src/util.ml | 8 ++++++++ 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/binary_formats.ml b/src/binary_formats.ml index 0a6816aa..4037a7eb 100644 --- a/src/binary_formats.ml +++ b/src/binary_formats.ml @@ -442,6 +442,8 @@ module WithdrawConfirmationPS = struct end module DenominationKeyAnnouncementPS = struct + (* TODO taler_signatures purpose + we use TALER_SIGNATURE_SM_RSA_DENOMINATION_KEY instead here *) (* purpose.purpose = TALER_SIGNATURE_SM_DENOMINATION_KEY *) type t = { h_denom_pub: DenominationHash.t; @@ -450,9 +452,18 @@ module DenominationKeyAnnouncementPS = struct duration_withdraw: TimeRelativeNBO.t; } - (* TODO management *) - (* let bin = ... *) - let to_string _ = assert false + let bin = + let open Bin in + Purpose.make_bin Taler_signatures.sm_rsa_denomination_key @@ fun purpose -> + record + (fun _purpose h_denom_pub h_section_name anchor_time duration_withdraw -> + { h_denom_pub; h_section_name; anchor_time; duration_withdraw }) + |+ Purpose.field purpose + |+ field DenominationHash.bin (fun t -> t.h_denom_pub) + |+ field HashCode.bin (fun t -> t.h_section_name) + |+ field TimeAbsoluteNBO.bin (fun t -> t.anchor_time) + |+ field TimeRelativeNBO.bin (fun t -> t.duration_withdraw) + |> sealr end module SingleWithdrawRequestPS = struct diff --git a/src/management.ml b/src/management.ml index 78a00237..cbc4a510 100644 --- a/src/management.ml +++ b/src/management.ml @@ -48,13 +48,12 @@ let mk_future_denom denom_secmod_sign_f ps |> (* TODO implement - DenominationKeyAnnouncementPS.bin SigningKeyAnnouncementPS.bin *) - Binary_formats.DenominationKeyAnnouncementPS.to_string + Bin.to_string Binary_formats.DenominationKeyAnnouncementPS.bin |> (* TODO sig type *) (* Signature by the denomination security module - not this denomination rsa signature *) + (not this denomination rsa signature) *) denom_secmod_sign_f in FutureDenom. diff --git a/src/syntax.ml b/src/syntax.ml index 53b7cb66..da6c9b01 100644 --- a/src/syntax.ml +++ b/src/syntax.ml @@ -1,6 +1,9 @@ let ( let* ) o f = match o with Ok v -> f v | Error _ as e -> e let ( let+ ) o f = match o with Ok v -> Ok (f v) | Error _ as e -> e +(* TODO use polymorphic variant for errors *) +let unwrap_err_msg o = match o with Error (`Msg e) -> Error e | Ok v -> Ok v + let list_iter f l = let err = ref None in try diff --git a/src/types.ml b/src/types.ml index cd87f1e5..e80498e6 100644 --- a/src/types.ml +++ b/src/types.ml @@ -108,16 +108,11 @@ module RsaPublicKey = struct type t = Mirage_crypto_pk.Rsa.pub let of_string s = - (* TODO bin - - no [Bin.of_string] ? - - what to do with the int ref? *) - match B32.decode s with - | Error _ as err -> err - | Ok s -> ( - let off = ref 0 in - let v = Bin.decode Binary_formats.RsaPublicKey.bin s off in - let res = Mirage_crypto_pk.Rsa.pub ~n:v.n ~e:v.e in - match res with Error (`Msg e) -> Error e | Ok pub -> Ok pub) + let open Syntax in + let* s = B32.decode s in + let* v = Util.bin_of_string Binary_formats.RsaPublicKey.bin s in + let+ v = Mirage_crypto_pk.Rsa.pub ~n:v.n ~e:v.e |> unwrap_err_msg in + v let to_string ({ n; e } : Mirage_crypto_pk.Rsa.pub) = let open Binary_formats.RsaPublicKey in diff --git a/src/util.ml b/src/util.ml index 7e205a51..36619bb6 100644 --- a/src/util.ml +++ b/src/util.ml @@ -20,3 +20,11 @@ let ptime_add_span_exn p span = match Ptime.add_span p span with | None -> Fmt.failwith "Ptime.add_span: not in the range [min;max]" | Some v -> v + +(* -- *** -- *) + +(* TODO bin + - no [Bin.of_string] ? *) +let bin_of_string bin s = + let v = Bin.decode bin s (ref 0) in + Ok v