This commit is contained in:
swrup 2025-10-17 15:25:10 +02:00
parent a27af0ecf1
commit a41a8f4087
5 changed files with 34 additions and 14 deletions

View file

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

View file

@ -50,7 +50,7 @@ let mk_future_denom denom_secmod_sign_f
(* 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

View file

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

View file

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

View file

@ -20,3 +20,14 @@ 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] ?
- what to do with the int ref?
is it for signaling error? *)
let bin_of_string bin s =
let off = ref 0 in
let v = Bin.decode bin s off in
Ok v