From 86a48ac0d4193f97ffd23628f76d16240f8d60d3 Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 3 Feb 2026 13:21:00 +0100 Subject: [PATCH] wip pg: left join to get revocations --- src/pg.ml | 18 ++++++++++-------- src/secmod.ml | 6 +++--- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/pg.ml b/src/pg.ml index 2579af2a..c8742c67 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -39,12 +39,13 @@ let preflight = in fun (module Conn : CONN) -> Syntax.list_iter (fun p -> Conn.exec p ()) l -(* TODO revocation master_sig *) let find_signkey = let find_signkey = Caqti_type.(eddsa_pub ->? signkey_data) - "SELECT exchange_pub, valid_from, expire_sign, expire_legal, master_sig, \ - NULL FROM exchange_sign_keys WHERE exchange_pub=$1" + "SELECT esk.exchange_pub, esk.valid_from, esk.expire_sign, \ + esk.expire_legal, esk.master_sig, skr.master_sig FROM \ + exchange_sign_keys AS esk LEFT JOIN signkey_revocations AS skr ON \ + esk.esk_serial = skr.esk_serial WHERE esk.exchange_pub=$1" in fun (module Conn : CONN) (exchange_pub : EddsaPublicKey.t) -> Conn.find_opt find_signkey exchange_pub @@ -52,10 +53,10 @@ let find_signkey = let get_active_signkeys = let get_active_signkeys = Caqti_type.(time ->* signkey_data) - "SELECT exchange_pub, valid_from, expire_sign, expire_legal, master_sig, \ - NULL FROM exchange_sign_keys esk WHERE expire_sign > $1 AND NOT EXISTS \ - (SELECT esk_serial FROM signkey_revocations skr WHERE esk.esk_serial = \ - skr.esk_serial)" + "SELECT esk.exchange_pub, esk.valid_from, esk.expire_sign, \ + esk.expire_legal, esk.master_sig, NULL FROM exchange_sign_keys esk \ + WHERE expire_sign > $1 AND NOT EXISTS (SELECT esk_serial FROM \ + signkey_revocations AS skr WHERE esk.esk_serial = skr.esk_serial)" in fun (module Conn : CONN) -> let now = Ptime_clock.now () |> Option.some in @@ -79,7 +80,8 @@ let find_denom = (fee_refresh).*, (fee_refund).*, age_mask, denom_pub_hash, master_sig, \ NULL FROM denominations WHERE denom_pub_hash=$1" in - fun (module Conn : CONN) h_denom_pub -> Conn.find_opt find_denom h_denom_pub + fun (module Conn : CONN) h_denom_pub -> + Conn.find_opt find_denom h_denom_pub let get_denominations = let get_denominations = diff --git a/src/secmod.ml b/src/secmod.ml index 047aefab..65068174 100644 --- a/src/secmod.ml +++ b/src/secmod.ml @@ -74,8 +74,7 @@ module Make (Conn : Pg.CONN) = struct let dir = Fpath.(v "data" / "secmod") - let db_lookup_signkey_data conn fname priv = - let pub = EddsaPrivateKey.pub_of_priv priv in + let db_lookup_signkey_data conn fname pub = let* opt = Pg.find_signkey conn pub |> unwrap_err_caqti in match opt with | None -> @@ -102,7 +101,8 @@ module Make (Conn : Pg.CONN) = struct match opt with | None -> Ok None | Some priv -> - let* sk_data = db_lookup_signkey_data conn fname priv in + let pub = EddsaPrivateKey.pub_of_priv priv in + let* sk_data = db_lookup_signkey_data conn fname pub in let signkey = { priv; sk_data } in Ok (Some signkey)