diff --git a/src/devices.ml b/src/devices.ml index b7a2007f..78ed3877 100644 --- a/src/devices.ml +++ b/src/devices.ml @@ -1,3 +1,6 @@ +open Syntax +open Crypto + type env = { caqti_switch: Caqti_miou.Switch.t; db_uri: Uri.t; @@ -27,51 +30,40 @@ module Secmod_signkey = struct let dir = Fpath.(v "data" / "secmod_signkey") let read_eddsa_key_files fname = - let open Syntax in let open Bos.OS in - let open Crypto in - let pub = Fpath.(dir / fname) |> Fpath.set_ext "pub" in - let priv = Fpath.(dir / fname) in - let* b0 = File.exists pub in - let* b1 = File.exists priv in - match (b0, b1) with - | true, true -> - let* pub = File.read pub in - let* priv = File.read priv in - let pub = EddsaPublicKey.of_octets pub in - let priv = EddsaPrivateKey.of_octets priv in - Ok (Some (pub, priv)) - | false, false -> Ok None - | _, _ -> Error (`Msg "secmod_signkey: invalid local file state.") + let fname = Fpath.(dir / fname) in + let* b = File.exists fname in + match b with + | false -> Ok None + | true -> + let+ content = File.read fname in + let priv = EddsaPrivateKey.of_octets content in + Some priv let write_eddsa_key_files fname signkey = - let open Syntax in let open Bos.OS in - let open Crypto in - let pub_file = Fpath.(dir / fname) |> Fpath.set_ext "pub" in - let priv_file = Fpath.(dir / fname) in - let pub = EddsaPublicKey.to_octets signkey.Signkey.pub in - let priv = EddsaPrivateKey.to_octets signkey.priv in - let* () = File.write pub_file pub in - let* () = File.write priv_file priv in - Ok () + let fname = Fpath.(dir / fname) in + let content = EddsaPrivateKey.to_octets signkey.Signkey.priv in + let+ () = File.write fname content in + () let write_local_keys t = - let open Syntax in let* () = write_eddsa_key_files "eddsa_sm_key" t.sm_key in let keys = List.mapi (fun i key -> ("eddsa_" ^ string_of_int i, key)) t.keys in - let* () = list_iter (fun (s, key) -> write_eddsa_key_files s key) keys in - Ok () + let+ () = + list_iter (fun (fname, key) -> write_eddsa_key_files fname key) keys + in + () let load_local_keys conn = - let open Syntax in let load s = let* opt = read_eddsa_key_files s in match opt with | None -> Ok None - | Some (pub, priv) -> ( + | Some priv -> ( + let pub = EddsaPrivateKey.pub_of_priv priv in let* opt = Pg.lookup_signing_key conn pub in match opt with | None -> @@ -80,6 +72,7 @@ module Secmod_signkey = struct database for key `%s`." s | Some (stamp_start, stamp_expire, stamp_end) -> + (* TODO master_sig *) let master_sig = None in Ok (Some @@ -114,15 +107,11 @@ module Secmod_signkey = struct @@ fun conn (_env : env) -> match load_local_keys conn with | Ok None -> - Fmt.pr "secmod_signkey: generate_fresh_keys@."; let t = generate_fresh_keys () in - (*write_local_keys t |> Result.get_ok;*) t - | Ok (Some v) -> - Fmt.pr "secmod_signkey: loaded local keys@."; - v + | Ok (Some v) -> v | Error _ -> - (* TODO pp error *) + (* TODO error: pretty print *) Fmt.failwith "secmod_signkey init failure." end