From db249b683308c625af49eafd088aaf42cadd0b76 Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 16 Dec 2025 17:03:24 +0100 Subject: [PATCH] --- src/pg.ml | 48 ++++++++++++++++++++++++++++++------------------ src/secmod.ml | 18 +++++------------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/pg.ml b/src/pg.ml index bec59bbb..4954e0d3 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -42,6 +42,27 @@ module Caqti_type = struct let wire_method = Caqti_type.string let payto_uri = Caqti_type.string + let signkey_data = + let master_sig = Bin_sig.ExchangeSigningKeyValidity.caqti in + custom + ~encode:(fun + Signkey_data.{ pub; stamp_start; stamp_expire; stamp_end; master_sig } + -> + match master_sig with + | None -> Error "signkey_data master_sig is none" + | Some master_sig -> + Ok (pub, stamp_start, stamp_expire, stamp_end, master_sig)) + ~decode:(fun (pub, stamp_start, stamp_expire, stamp_end, master_sig) -> + Ok + { + pub; + stamp_start; + stamp_expire; + stamp_end; + master_sig= Some master_sig; + }) + (t5 eddsa_pub time time time master_sig) + let account_restrictions = custom ~encode:(fun l -> Api.encode (Jsont.list AccountRestriction.jsont) l) @@ -135,31 +156,22 @@ let preflight = in fun (module Conn : CONN) -> Syntax.list_iter (fun p -> Conn.exec p ()) l -(* TODO return type *) -let lookup_signing_key = - let lookup_signing_key = - Caqti_type.(eddsa_pub ->? t3 time time time) - "SELECT valid_from, expire_sign, expire_legal FROM exchange_sign_keys \ - WHERE exchange_pub=$1" +let find_signkey = + let find_signkey = + Caqti_type.(eddsa_pub ->? signkey_data) + "SELECT exchange_pub, valid_from, expire_sign, expire_legal, master_sig \ + FROM exchange_sign_keys WHERE exchange_pub=$1" in fun (module Conn : CONN) (exchange_pub : EddsaPublicKey.t) -> - Conn.find_opt lookup_signing_key exchange_pub + Conn.find_opt find_signkey exchange_pub -let activate_signing_key = +let insert_signkey = let insert_signkey = - let master_sig = Bin_sig.ExchangeSigningKeyValidity.caqti in - Caqti_type.(t5 eddsa_pub time time time master_sig ->. unit) + Caqti_type.(signkey_data ->. unit) "INSERT INTO exchange_sign_keys (exchange_pub, valid_from, expire_sign, \ expire_legal, master_sig) VALUES ($1, $2, $3, $4, $5)" in - fun (module Conn : CONN) - ~master_sig - Signkey_data. - { pub; stamp_start; stamp_expire; stamp_end; master_sig= master_sig_opt } - -> - assert (master_sig_opt = Some master_sig); - Conn.exec insert_signkey - (pub, stamp_start, stamp_expire, stamp_end, master_sig) + fun (module Conn : CONN) v -> Conn.exec insert_signkey v (* TODO return type *) let lookup_denomination_key = diff --git a/src/secmod.ml b/src/secmod.ml index ca2aa281..e3f959ac 100644 --- a/src/secmod.ml +++ b/src/secmod.ml @@ -92,9 +92,7 @@ let add_signkey_master_signatures conn t l = | Some signkey -> let sk_data = { signkey.sk_data with master_sig= Some master_sig } in let signkey = { signkey with sk_data } in - let* () = - Pg.activate_signing_key conn ~master_sig sk_data |> unwrap_err_caqti - in + let* () = Pg.insert_signkey conn sk_data |> unwrap_err_caqti in Hashtbl.replace t.sk_ht pub signkey; Ok ()) l @@ -137,20 +135,14 @@ let dir = Fpath.(v "data" / "secmod ") let db_lookup_signkey_data conn fname priv = let pub = EddsaPrivateKey.pub_of_priv priv in - let* opt = Pg.lookup_signing_key conn pub in + let* opt = Pg.find_signkey conn pub in match opt with | None -> Fmt.error_msg - "load_signkey error no associated metadata found in database for \ - signkey `%s`." + "load_signkey error: no associated data found in database for signkey \ + `%s`." (Fpath.to_string fname) - | Some (stamp_start, stamp_expire, stamp_end) -> - (* TODO master_sig *) - let master_sig = None in - let v = - Signkey_data.{ pub; stamp_start; stamp_expire; stamp_end; master_sig } - in - Ok v + | Some sk_data -> Ok sk_data let db_lookup_denom_data conn ~section_name priv = let pub = RsaPrivateKey.pub_of_priv priv in