diff --git a/src/devices.ml b/src/devices.ml index 830ff2e7..4f669f41 100644 --- a/src/devices.ml +++ b/src/devices.ml @@ -1,25 +1,30 @@ module Secmod_signkey = struct type t = { - secmod_public_key: Signkey.t; + secmod_key: Signkey.t; signkeys: Signkey.t list; } + + let v = + let finally _key = () in + Vif.Device.v ~name:"secmod_signkey" ~finally [] @@ fun () -> + let secmod_key = Signkey.generate () in + let signkeys = [ Signkey.generate () ] in + { secmod_key; signkeys } end module Secmod_denom = struct type t = { - secmod_signkey: Signkey.t; + secmod_key: Signkey.t; denom_keys: Denomination.t list; } + + let v = + let finally _key = () in + Vif.Device.v ~name:"secmod_denom" ~finally [] @@ fun () -> + let secmod_key = Signkey.generate () in + let denom_keys = List.map Denomination.make Config.coins in + { secmod_key; denom_keys } end -let signkey = Signkey.make ~name:"signkey" -let online_key = Signkey.make ~name:"online_key" -let denom_key = Signkey.make ~name:"denom_key" - -let denominations = - let finally _key = () in - Vif.Device.v ~name:"denominations" ~finally [] @@ fun () -> - let rsa_l = List.map Denomination.make Config.coins in - rsa_l - -let l = Vif.Devices.[ signkey; online_key; denom_key; denominations ] +let secmod_signkey = Secmod_signkey.v +let secmod_denom = Secmod_denom.v diff --git a/src/management.ml b/src/management.ml index a9c620a6..2818d43a 100644 --- a/src/management.ml +++ b/src/management.ml @@ -1,5 +1,6 @@ (*open Types*) open Api_types +open Devices let mk_future_denom denom_key_signf ({ @@ -88,18 +89,23 @@ let mk_future_signkey signkey_signf signkey_secmod_sig; } -let mk_future_keys_response ~signkey ~online_key ~denom_key ~denominations = +let mk_future_keys_response (secmod_signkey : Secmod_signkey.t) + (secmod_denom : Secmod_denom.t) = let future_denoms = (* todo: "only those lacking a master signature" *) - List.map (mk_future_denom denom_key.Signkey.sign) denominations + List.map + (mk_future_denom secmod_denom.secmod_key.Signkey.sign) + secmod_denom.denom_keys in let future_signkeys = (* todo: "only those lacking a master signature" *) - List.map (mk_future_signkey signkey.Signkey.sign) [ online_key ] + List.map + (mk_future_signkey secmod_signkey.secmod_key.sign) + secmod_signkey.signkeys in let master_pub = Config.Exchange.master_public_key in - let denom_secmod_public_key = denom_key.pub in - let signkey_secmod_public_key = signkey.pub in + let denom_secmod_public_key = secmod_denom.secmod_key.pub in + let signkey_secmod_public_key = secmod_signkey.secmod_key.pub in FutureKeysResponse. { future_denoms; @@ -112,13 +118,9 @@ let mk_future_keys_response ~signkey ~online_key ~denom_key ~denominations = let keys req server _env = let open Vif.Response in let open Syntax in - let signkey = Vif.Server.device Devices.signkey server in - let online_key = Vif.Server.device Devices.online_key server in - let denom_key = Vif.Server.device Devices.denom_key server in - let denominations = Vif.Server.device Devices.denominations server in - let v = - mk_future_keys_response ~signkey ~online_key ~denom_key ~denominations - in + let secmod_signkey = Vif.Server.device Devices.secmod_signkey server in + let secmod_denom = Vif.Server.device Devices.secmod_denom server in + let v = mk_future_keys_response secmod_signkey secmod_denom in let s = Json.encode_exn Json.FutureKeysResponse.jsont v in let* () = with_string req s in let* () = add ~field:"content-type" "application/json" in diff --git a/src/mte.ml b/src/mte.ml index 7db92651..d4b4a2e2 100644 --- a/src/mte.ml +++ b/src/mte.ml @@ -123,6 +123,6 @@ let () = in Miou_unix.run @@ fun () -> let env = () in - let devices = Devices.l in + let devices = Vif.Devices.[ Devices.secmod_signkey; Devices.secmod_denom ] in let middlewares = Vif.Middlewares.[] in Vif.run ~cfg ~devices ~middlewares routes env diff --git a/src/signkey.ml b/src/signkey.ml index d6b98d02..e7923785 100644 --- a/src/signkey.ml +++ b/src/signkey.ml @@ -9,9 +9,7 @@ type t = { master_sig: EddsaSignature.t option; } -let make ~name = - let finally _key = () in - Vif.Device.v ~name ~finally [] @@ fun () -> +let generate () = (* TODO - look if it exists - if not, create it (TOFU initialization scheme)