From c282fb3d366f7a58cafcc20871536bffed3e2627 Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 3 Feb 2026 13:21:00 +0100 Subject: [PATCH] JJ: Description from the destination commit: wip pg: left join to get revocations JJ: Description from source commit: . --- src/pg.ml | 36 ++++++++++++++++++++---------------- src/secmod.ml | 6 +++--- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/pg.ml b/src/pg.ml index 2579af2a..8707f156 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 @@ -70,24 +71,27 @@ let insert_signkey = in fun (module Conn : CONN) v -> Conn.exec insert_signkey v -(* TODO revocation master_sig *) let find_denom = let find_denom = Caqti_type.(denomination_hash ->? denom_data) - "SELECT denom_pub, (coin).*, valid_from, expire_withdraw, \ - expire_deposit, expire_legal, (fee_withdraw).*, (fee_deposit).*, \ - (fee_refresh).*, (fee_refund).*, age_mask, denom_pub_hash, master_sig, \ - NULL FROM denominations WHERE denom_pub_hash=$1" + "SELECT dn.denom_pub, (dn.coin).*, dn.valid_from, dn.expire_withdraw, \ + dn.expire_deposit, dn.expire_legal, (dn.fee_withdraw).*, \ + (dn.fee_deposit).*, (dn.fee_refresh).*, (dn.fee_refund).*, dn.age_mask, \ + dn.denom_pub_hash, dn.master_sig, dnr.master_sig FROM denominations AS \ + dn LEFT JOIN denomination_revocations AS dnr ON dn.denominations_serial \ + = dnr.denominations_serial WHERE dn.denom_pub_hash=$1" in fun (module Conn : CONN) h_denom_pub -> Conn.find_opt find_denom h_denom_pub let get_denominations = let get_denominations = Caqti_type.(unit ->* denom_data) - "SELECT denom_pub, (coin).*, valid_from, expire_withdraw, \ - expire_deposit, expire_legal, (fee_withdraw).*, (fee_deposit).*, \ - (fee_refresh).*, (fee_refund).*, age_mask, denom_pub_hash, master_sig, \ - NULL FROM denominations" + "SELECT dn.denom_pub, (dn.coin).*, dn.valid_from, dn.expire_withdraw, \ + dn.expire_deposit, dn.expire_legal, (dn.fee_withdraw).*, \ + (dn.fee_deposit).*, (dn.fee_refresh).*, (dn.fee_refund).*, dn.age_mask, \ + dn.denom_pub_hash, dn.master_sig, dnr.master_sig FROM denominations AS \ + dn LEFT JOIN denomination_revocations AS dnr ON dn.denominations_serial \ + = dnr.denominations_serial" in fun (module Conn : CONN) -> Conn.collect_list 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)