From 40cb77872652a1ea42bff68bb2fdce7e3103f3c5 Mon Sep 17 00:00:00 2001 From: swrup Date: Thu, 22 Jan 2026 05:46:34 +0100 Subject: [PATCH] +wip --- src/http_management.ml | 61 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/src/http_management.ml b/src/http_management.ml index f24c88ff..11855612 100644 --- a/src/http_management.ml +++ b/src/http_management.ml @@ -2,7 +2,7 @@ open Syntax open Api module Keys_get = struct - let mk_future_denom ~sm ~section_name + let mk_future_denom (module Sm : Secmod.S) ~section_name ({ pub; value; @@ -31,8 +31,7 @@ module Keys_get = struct let duration_withdraw = Timestamp.diff stamp_start stamp_expire_withdraw in - sign_f - ~f:(Secmod.sign_with_sm_key sm) + sign_f ~f:Sm.sign_with_sm_key { h_denom_pub; h_section_name; anchor_time; duration_withdraw } in FutureDenom. @@ -51,7 +50,7 @@ module Keys_get = struct denom_secmod_sig; } - let mk_future_signkey ~sm + let mk_future_signkey (module Sm : Secmod.S) ({ pub; stamp_start; @@ -66,33 +65,30 @@ module Keys_get = struct let exchange_pub = pub in let anchor_time = stamp_start in let duration = Timestamp.diff stamp_start stamp_expire in - sign_f - ~f:(Secmod.sign_with_sm_key sm) - { exchange_pub; anchor_time; duration } + sign_f ~f:Sm.sign_with_sm_key { exchange_pub; anchor_time; duration } in FutureSignKey. { key= pub; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig } - let mk_future_keys_response ~sm = + let mk_future_keys_response (module Sm : Secmod.S) = let future_signkeys = - Secmod.get_signkeys_data sm + Sm.get_signkeys_data () |> List.filter (fun k -> Option.is_none k.Signkey_data.master_sig) - |> List.map (fun signkey -> mk_future_signkey ~sm signkey) + |> List.map (fun signkey -> mk_future_signkey (module Sm) signkey) in let future_denoms = - Secmod.get_denoms_data sm + Sm.get_denoms_data () |> List.filter (fun k -> Option.is_none k.Denom_data.master_sig) |> List.map (fun dn_data -> - let opt = - Secmod.find_denom_section_name sm dn_data.Denom_data.h_pub - in + let opt = Sm.find_denom_section_name dn_data.Denom_data.h_pub in match opt with | None -> Fmt.failwith "section_name not found." - | Some section_name -> mk_future_denom ~sm ~section_name dn_data) + | Some section_name -> + mk_future_denom (module Sm) ~section_name dn_data) in let master_pub = Config.Exchange.master_public_key in - let denom_secmod_public_key = Secmod.get_sm_key_pub sm in - let signkey_secmod_public_key = Secmod.get_sm_key_pub sm in + let denom_secmod_public_key = Sm.get_sm_key_pub () in + let signkey_secmod_public_key = Sm.get_sm_key_pub () in FutureKeysResponse. { future_denoms; @@ -108,7 +104,7 @@ module Keys_get = struct Logs.info (fun m -> m "GET /management/keys/"); let sm = Vif.Server.device Devices.secmod server in let res = - let v = mk_future_keys_response ~sm in + let v = mk_future_keys_response sm in let s = Api.encode_exn jsont v in Ok s in @@ -116,9 +112,10 @@ module Keys_get = struct end module Keys_post = struct - let verify_denom_signature ~sm DenomSignature.{ h_denom_pub; master_sig } = + let verify_denom_signature (module Sm : Secmod.S) + DenomSignature.{ h_denom_pub; master_sig } = let* denom = - match Secmod.find_denom_data sm h_denom_pub with + match Sm.find_denom_data h_denom_pub with | None -> Fmt.error "404 not found, One of the keys for which a signature was provided \ @@ -140,11 +137,12 @@ module Keys_post = struct denom_hash= h_denom_pub; } in - verify_f ~f:Secmod.verify_with_master_key master_sig r + verify_f ~f:Sm.verify_with_master_key master_sig r - let verify_signkey_signature ~sm SignKeySignature.{ key; master_sig } = + let verify_signkey_signature (module Sm : Secmod.S) + SignKeySignature.{ key; master_sig } = let* signkey = - match Secmod.find_signkey_data sm key with + match Sm.find_signkey_data key with | None -> Fmt.error "404 not found, One of the keys for which a signature was provided \ @@ -160,16 +158,16 @@ module Keys_post = struct signkey_pub= signkey.pub; } in - verify_f ~f:Secmod.verify_with_master_key master_sig r + verify_f ~f:Sm.verify_with_master_key master_sig r - let verify ~sm MasterSignatures.{ denom_sigs; signkey_sigs } = - let* () = list_iter (verify_denom_signature ~sm) denom_sigs in - let* () = list_iter (verify_signkey_signature ~sm) signkey_sigs in + let verify sm MasterSignatures.{ denom_sigs; signkey_sigs } = + let* () = list_iter (verify_denom_signature sm) denom_sigs in + let* () = list_iter (verify_signkey_signature sm) signkey_sigs in Ok () (* TODO move to test *) - let check_master_signatures_update ~db_conn ~sm = - Secmod.get_denoms_data sm + let check_master_signatures_update ~db_conn (module Sm : Secmod.S) = + Sm.get_denoms_data () |> list_iter (fun denom -> let error = Error "update_master_signatures sanity check failure" in let* opt = @@ -185,12 +183,13 @@ module Keys_post = struct let* () = check (v.age_mask = denom.age_mask) in Ok ()) - let do_ ~db_conn ~sm MasterSignatures.{ denom_sigs; signkey_sigs } = + let do_ ~db_conn (module Sm : Secmod.S) + MasterSignatures.{ denom_sigs; signkey_sigs } = let* () = signkey_sigs |> List.map (fun SignKeySignature.{ key; master_sig } -> (key, master_sig)) - |> Secmod.add_signkey_master_signatures db_conn sm + |> Sm.add_signkey_master_signatures db_conn in let* () = denom_sigs