This commit is contained in:
swrup 2025-12-06 16:49:16 +01:00
parent 5a941ee497
commit 3d0f069e3c

View file

@ -925,8 +925,10 @@ module RecoupDenoms = struct
|> finish |> finish
end end
module DenomCommon = struct module RsaDenom = struct
(* correspond to: ({ rsa_pub: RsaPublicKey;} & DenomCommon) *)
type t = { type t = {
rsa_pub: RsaPublicKey.t;
master_sig: DenominationKeyValidityPS.t; master_sig: DenominationKeyValidityPS.t;
stamp_start: Timestamp.t; stamp_start: Timestamp.t;
stamp_expire_withdraw: Timestamp.t; stamp_expire_withdraw: Timestamp.t;
@ -936,9 +938,10 @@ module DenomCommon = struct
} }
let jsont = let jsont =
let make master_sig stamp_start stamp_expire_withdraw stamp_expire_deposit let make rsa_pub master_sig stamp_start stamp_expire_withdraw
stamp_expire_legal lost = stamp_expire_deposit stamp_expire_legal lost =
{ {
rsa_pub;
master_sig; master_sig;
stamp_start; stamp_start;
stamp_expire_withdraw; stamp_expire_withdraw;
@ -947,6 +950,7 @@ module DenomCommon = struct
lost; lost;
} }
in in
let rsa_pub v = v.rsa_pub in
let master_sig v = v.master_sig in let master_sig v = v.master_sig in
let stamp_start v = v.stamp_start in let stamp_start v = v.stamp_start in
let stamp_expire_withdraw v = v.stamp_expire_withdraw in let stamp_expire_withdraw v = v.stamp_expire_withdraw in
@ -954,7 +958,8 @@ module DenomCommon = struct
let stamp_expire_legal v = v.stamp_expire_legal in let stamp_expire_legal v = v.stamp_expire_legal in
let lost v = v.lost in let lost v = v.lost in
let open Jsont.Object in let open Jsont.Object in
map ~kind:"DenomCommon" make map ~kind:"RsaDenom" make
|> mem "rsa_pub" RsaPublicKey.jsont ~enc:rsa_pub
|> mem "master_sig" DenominationKeyValidityPS.jsont ~enc:master_sig |> mem "master_sig" DenominationKeyValidityPS.jsont ~enc:master_sig
|> mem "stamp_start" Timestamp.jsont ~enc:stamp_start |> mem "stamp_start" Timestamp.jsont ~enc:stamp_start
|> mem "stamp_expire_withdraw" Timestamp.jsont ~enc:stamp_expire_withdraw |> mem "stamp_expire_withdraw" Timestamp.jsont ~enc:stamp_expire_withdraw
@ -964,9 +969,9 @@ module DenomCommon = struct
|> finish |> finish
end end
module DenomGroupRsa = struct module RsaDenomGroup = struct
type t = { type t = {
rsa_pub: RsaPublicKey.t; denoms: RsaDenom.t list;
value: Amount.t; value: Amount.t;
fee_withdraw: Amount.t; fee_withdraw: Amount.t;
fee_deposit: Amount.t; fee_deposit: Amount.t;
@ -975,18 +980,18 @@ module DenomGroupRsa = struct
} }
let jsont = let jsont =
let make rsa_pub value fee_withdraw fee_deposit fee_refresh fee_refund = let make denoms value fee_withdraw fee_deposit fee_refresh fee_refund =
{ rsa_pub; value; fee_withdraw; fee_deposit; fee_refresh; fee_refund } { denoms; value; fee_withdraw; fee_deposit; fee_refresh; fee_refund }
in in
let rsa_pub v = v.rsa_pub in let denoms v = v.denoms in
let value v = v.value in let value v = v.value in
let fee_withdraw v = v.fee_withdraw in let fee_withdraw v = v.fee_withdraw in
let fee_deposit v = v.fee_deposit in let fee_deposit v = v.fee_deposit in
let fee_refresh v = v.fee_refresh in let fee_refresh v = v.fee_refresh in
let fee_refund v = v.fee_refund in let fee_refund v = v.fee_refund in
let open Jsont.Object in let open Jsont.Object in
map ~kind:"DenomGroupRsa" make map ~kind:"RsaDenomGroup" make
|> mem "rsa_pub" RsaPublicKey.jsont ~enc:rsa_pub |> mem "denoms" (Jsont.list RsaDenom.jsont) ~enc:denoms
|> mem "value" Amount.jsont ~enc:value |> mem "value" Amount.jsont ~enc:value
|> mem "fee_withdraw" Amount.jsont ~enc:fee_withdraw |> mem "fee_withdraw" Amount.jsont ~enc:fee_withdraw
|> mem "fee_deposit" Amount.jsont ~enc:fee_deposit |> mem "fee_deposit" Amount.jsont ~enc:fee_deposit
@ -995,29 +1000,21 @@ module DenomGroupRsa = struct
|> finish |> finish
end end
(* TODO better jsont cases
factorize common fields (DenomCommon/DenomGroupCommon)
"+age_restricted"/CS variants
raise error not implemented if not RSA *)
module DenomGroup = struct module DenomGroup = struct
(* TODO type t = Rsa of RsaDenomGroup.t
type DenomGroup =
| DenomGroupRsa
| DenomGroupCs
| DenomGroupRsaAgeRestricted
| DenomGroupCsAgeRestricted;
*)
type t = Rsa of DenomGroupRsa.t
let to_octets = function Rsa denom -> RsaPublicKey.to_octets denom.rsa_pub
let of_cs _v =
Jsont.Error.msg Jsont.Meta.none "CSDenominationKey are not supported"
let of_rsa v = Rsa v let of_rsa v = Rsa v
let jsont = let jsont =
let open Jsont.Object in let open Jsont.Object in
let rsa = Case.map "RSA" DenomGroupRsa.jsont ~dec:of_rsa in let rsa = Case.map "RSA" RsaDenomGroup.jsont ~dec:of_rsa in
let enc_case = function Rsa v -> Case.value rsa v in let enc_case = function Rsa v -> Case.value rsa v in
let cases = Case.[ make rsa ] in let cases = Case.[ make rsa ] in
map ~kind:"DenomGroup" Fun.id map ~kind:"DenominationKey" Fun.id
|> case_mem "cipher" Jsont.string ~enc:Fun.id ~enc_case cases |> case_mem "cipher" Jsont.string ~enc:Fun.id ~enc_case cases
|> finish |> finish
end end