This commit is contained in:
swrup 2025-11-21 19:14:14 +01:00
parent 94a4c1e29e
commit 9c7faccc54
3 changed files with 62 additions and 100 deletions

View file

@ -1,90 +0,0 @@
(* TODO
number
- number is "float", but we probably want int everywhere instead
- numeric values capped at 2^53 -1 inclusive because json
time
- better types
- issues with "never" = uint64_max *)
open Crypto
module ErrorDetail = struct
(* TODO GANA error codes
https://git.gnunet.org/gana.git/tree/gnu-taler-error-codes/registry.rec *)
type t = {
code: int;
hint: string option;
}
end
module Timestamp = struct
type t =
| Seconds of float
| Never
let of_ptime p = Seconds (Ptime.to_float_s p)
end
module RelativeTime = struct
type t =
| Microseconds of float
| Forever
end
module RsaDenominationKey = struct
type t = {
age_mask: int;
rsa_pub: RsaPublicKey.t;
}
end
(* not implemented *)
module CSDenominationKey = struct
(* Clause Schnorr *)
type t = {
age_mask: int;
cs_pub: string;
}
end
module DenominationKey = struct
type t =
| Rsa of RsaDenominationKey.t
| CS of CSDenominationKey.t
end
module FutureSignKey = struct
type t = {
key: EddsaPublicKey.t;
stamp_start: Timestamp.t;
stamp_expire: Timestamp.t;
stamp_end: Timestamp.t;
signkey_secmod_sig: EddsaSignature.t;
}
end
module FutureDenom = struct
type t = {
section_name: string;
value: Amount.t;
stamp_start: Timestamp.t;
stamp_expire_withdraw: Timestamp.t;
stamp_expire_deposit: Timestamp.t;
stamp_expire_legal: Timestamp.t;
denom_pub: DenominationKey.t;
fee_withdraw: Amount.t;
fee_deposit: Amount.t;
fee_refresh: Amount.t;
fee_refund: Amount.t;
denom_secmod_sig: EddsaSignature.t;
}
end
module FutureKeysResponse = struct
type t = {
future_denoms: FutureDenom.t list;
future_signkeys: FutureSignKey.t list;
master_pub: EddsaPublicKey.t;
denom_secmod_public_key: EddsaPublicKey.t;
signkey_secmod_public_key: EddsaPublicKey.t;
}
end

View file

@ -1,4 +1,11 @@
open Api_types open Api_types
(* TODO
number
- number is "float", but we probably want int everywhere instead
- numeric values capped at 2^53 -1 inclusive because json
time
- better types
- issues with "never" = uint64_max *)
open Crypto open Crypto
let encode_exn jsont v = Jsont_bytesrw.encode_string jsont v |> Result.get_ok let encode_exn jsont v = Jsont_bytesrw.encode_string jsont v |> Result.get_ok
@ -6,7 +13,12 @@ let encode jsont v = Jsont_bytesrw.encode_string jsont v
let decode jsont v = Jsont_bytesrw.decode_string jsont v let decode jsont v = Jsont_bytesrw.decode_string jsont v
module ErrorDetail = struct module ErrorDetail = struct
open ErrorDetail (* TODO GANA error codes
https://git.gnunet.org/gana.git/tree/gnu-taler-error-codes/registry.rec *)
type t = {
code: int;
hint: string option;
}
let jsont = let jsont =
let make code hint = { code; hint } in let make code hint = { code; hint } in
@ -25,7 +37,11 @@ module Amount = struct
end end
module Timestamp = struct module Timestamp = struct
open Timestamp type t =
| Seconds of float
| Never
let of_ptime p = Seconds (Ptime.to_float_s p)
let number_or_never_jsont = let number_or_never_jsont =
let never = let never =
@ -53,7 +69,9 @@ module Timestamp = struct
end end
module RelativeTime = struct module RelativeTime = struct
open RelativeTime type t =
| Microseconds of float
| Forever
let number_or_forever_jsont = let number_or_forever_jsont =
let forever = let forever =
@ -81,7 +99,10 @@ module RelativeTime = struct
end end
module RsaDenominationKey = struct module RsaDenominationKey = struct
open RsaDenominationKey type t = {
age_mask: int;
rsa_pub: RsaPublicKey.t;
}
let jsont = let jsont =
let make age_mask rsa_pub = { age_mask; rsa_pub } in let make age_mask rsa_pub = { age_mask; rsa_pub } in
@ -93,8 +114,13 @@ module RsaDenominationKey = struct
|> Jsont.Object.finish |> Jsont.Object.finish
end end
(* not acctually implemented *)
module CSDenominationKey = struct module CSDenominationKey = struct
open CSDenominationKey (* Clause Schnorr *)
type t = {
age_mask: int;
cs_pub: string;
}
let jsont = let jsont =
let make age_mask cs_pub = { age_mask; cs_pub } in let make age_mask cs_pub = { age_mask; cs_pub } in
@ -107,7 +133,9 @@ module CSDenominationKey = struct
end end
module DenominationKey = struct module DenominationKey = struct
open DenominationKey type t =
| Rsa of RsaDenominationKey.t
| CS of CSDenominationKey.t
let rsa v = Rsa v let rsa v = Rsa v
let cs v = CS v let cs v = CS v
@ -127,7 +155,13 @@ module DenominationKey = struct
end end
module FutureSignKey = struct module FutureSignKey = struct
open FutureSignKey type t = {
key: EddsaPublicKey.t;
stamp_start: Timestamp.t;
stamp_expire: Timestamp.t;
stamp_end: Timestamp.t;
signkey_secmod_sig: EddsaSignature.t;
}
let jsont = let jsont =
let make key stamp_start stamp_expire stamp_end signkey_secmod_sig = let make key stamp_start stamp_expire stamp_end signkey_secmod_sig =
@ -149,7 +183,20 @@ module FutureSignKey = struct
end end
module FutureDenom = struct module FutureDenom = struct
open FutureDenom type t = {
section_name: string;
value: Amount.t;
stamp_start: Timestamp.t;
stamp_expire_withdraw: Timestamp.t;
stamp_expire_deposit: Timestamp.t;
stamp_expire_legal: Timestamp.t;
denom_pub: DenominationKey.t;
fee_withdraw: Amount.t;
fee_deposit: Amount.t;
fee_refresh: Amount.t;
fee_refund: Amount.t;
denom_secmod_sig: EddsaSignature.t;
}
let jsont = let jsont =
let make section_name value stamp_start stamp_expire_withdraw let make section_name value stamp_start stamp_expire_withdraw
@ -200,7 +247,13 @@ module FutureDenom = struct
end end
module FutureKeysResponse = struct module FutureKeysResponse = struct
open FutureKeysResponse type t = {
future_denoms: FutureDenom.t list;
future_signkeys: FutureSignKey.t list;
master_pub: EddsaPublicKey.t;
denom_secmod_public_key: EddsaPublicKey.t;
signkey_secmod_public_key: EddsaPublicKey.t;
}
let jsont = let jsont =
let make future_denoms future_signkeys master_pub denom_secmod_public_key let make future_denoms future_signkeys master_pub denom_secmod_public_key

View file

@ -1,4 +1,3 @@
(*open Types*)
open Api_types open Api_types
open Devices open Devices