From 8dd5973c386929668736d36a9ef9c2ace3921615 Mon Sep 17 00:00:00 2001 From: swrup Date: Mon, 6 Oct 2025 19:51:56 +0200 Subject: [PATCH] + Rsa_denomination_key --- src/json.ml | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/types.ml | 27 +++++++++++++++++++++++---- test/test.ml | 5 +++++ 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/json.ml b/src/json.ml index 876d5f5c..219329e4 100644 --- a/src/json.ml +++ b/src/json.ml @@ -84,3 +84,49 @@ module Eddsa = struct let enc = Jsont.Base.enc pub_to_string in Jsont.Base.string (Jsont.Base.map ~kind:"EddsaPublicKey" ~dec ~enc ()) end + +module Rsa_denomination_key = struct + open Rsa_denomination_key + + let jsont = + let make age_mask rsa_pub = { age_mask; rsa_pub } in + let age_mask v = v.age_mask in + let rsa_pub v = v.rsa_pub in + Jsont.Object.map ~kind:"RsaDenominationKey" make + |> Jsont.Object.mem "age_mask" Jsont.int ~enc:age_mask + |> Jsont.Object.mem "rsa_pub" Jsont.string ~enc:rsa_pub + |> Jsont.Object.finish +end + +module CS_denomination_key = struct + open CS_denomination_key + + let jsont = + let make age_mask cs_pub = { age_mask; cs_pub } in + let age_mask v = v.age_mask in + let cs_pub v = v.cs_pub in + Jsont.Object.map ~kind:"CSDenominationKey" make + |> Jsont.Object.mem "age_mask" Jsont.int ~enc:age_mask + |> Jsont.Object.mem "cs_pub" Jsont.string ~enc:cs_pub + |> Jsont.Object.finish +end + +module Denomination_key = struct + open Denomination_key + + let rsa v = Rsa v + let cs v = CS v + + let jsont = + let open Jsont.Object in + let rsa = Case.map "RSA" Rsa_denomination_key.jsont ~dec:rsa in + let cs = Case.map "CS" CS_denomination_key.jsont ~dec:cs in + let enc_case = function + | Rsa v -> Case.value rsa v + | CS v -> Case.value cs v + in + let cases = Case.[ make rsa; make cs ] in + map ~kind:"DenominationKey" Fun.id + |> case_mem "cipher" Jsont.string ~enc:Fun.id ~enc_case cases + |> finish +end diff --git a/src/types.ml b/src/types.ml index e85ce833..1774509e 100644 --- a/src/types.ml +++ b/src/types.ml @@ -130,19 +130,17 @@ module Eddsa = struct let pub_to_string pub = pub |> Mirage_crypto_ec.Ed25519.pub_to_octets |> Base_32.encode - (*type priv = string*) (* EdDSA signatures are transmitted as 64-bytes base32 binary-encoded objects with just the R and S values (base32_ binary-only). *) (*type signature = string*) end module Rsa = struct + (* TODO + GNUNET_CRYPTO custom encode/decode *) (* RSA public key converted to Crockford Base32. *) type pub = Mirage_crypto_pk.Rsa.pub - (* TODO - how to read/write pub rsa key - what format is used? *) let pub_of_string _s = assert false let pub_to_string _pub = assert false end @@ -151,3 +149,24 @@ module Hash_code = struct (* 32-byte value representing a point on Curve25519. *) type cs25519Point = string end + +module Rsa_denomination_key = struct + type t = { + age_mask: int + ; rsa_pub: string (* Rsa.pub *) + } +end + +module CS_denomination_key = struct + (* Clause Schnorr *) + type t = { + age_mask: int + ; cs_pub: string + } +end + +module Denomination_key = struct + type t = + | Rsa of Rsa_denomination_key.t + | CS of CS_denomination_key.t +end diff --git a/test/test.ml b/test/test.ml index 3f0f835f..2f33d2f3 100644 --- a/test/test.ml +++ b/test/test.ml @@ -17,6 +17,11 @@ let () = check Timestamp.jsont {|{"t_s": "never"}|}; check_bad Timestamp.jsont {|{"t_s": "123456780"}|}; check_bad Timestamp.jsont {|{"t_s": "agagou"}|}; + + check Denomination_key.jsont + {|{"cipher": "RSA", "age_mask": 18, "rsa_pub": "agagouh"}|}; + check Denomination_key.jsont + {|{"cipher": "CS", "age_mask": 18, "cs_pub": "ouhagag"}|}; () let () =