This commit is contained in:
swrup 2026-01-24 06:12:52 +01:00
parent 04bc0b6566
commit eae9381fbc

View file

@ -249,18 +249,41 @@ module Make (Conn : Pg.CONN) = struct
in in
{ lock; sm_key_priv; sm_key_pub; sk_ht; dn_ht; dn_section_name_ht } { lock; sm_key_priv; sm_key_pub; sk_ht; dn_ht; dn_section_name_ht }
let store t =
let* () = Data_file.write_eddsa Fpath.(dir / "sm_key") t.sm_key_priv in
let* () =
Hashtbl.to_seq_values t.sk_ht
|> List.of_seq
|> List.mapi (fun i (key : signkey) ->
let fname = Fpath.(dir / string_of_int i) in
(fname, key.priv))
|> list_iter (fun (fname, key) -> Data_file.write_eddsa fname key)
in
let* () =
Hashtbl.to_seq_values t.dn_ht
|> List.of_seq
|> List.mapi (fun i (key : denom) ->
let fname = Fpath.(dir / string_of_int i) in
(fname, key.priv))
|> list_iter (fun (fname, key) -> Data_file.write_rsa fname key)
in
Ok ()
let t = let t =
match load (module Conn) with match load (module Conn) with
| Ok None -> | Ok None ->
let t = make_new () in let t = make_new () in
let () =
match store t with
| Error (`Msg e) -> Fmt.failwith "secmod storage failure: %s." e
| Ok () -> ()
in
Logs.info (fun m -> m "secmod initialized with fresh keys"); Logs.info (fun m -> m "secmod initialized with fresh keys");
t t
| Ok (Some v) -> | Ok (Some t) ->
Logs.info (fun m -> m "secmod initialized from storage"); Logs.info (fun m -> m "secmod initialized from storage");
v t
| Error _ -> | Error _ -> Fmt.failwith "secmod init failure."
(* TODO error: pretty print *)
Fmt.failwith "secmod init failure."
(* note: don't expose a signing function if we want a real "security module" one day *) (* note: don't expose a signing function if we want a real "security module" one day *)
let sign_with_sm_key s = EddsaSignature.sign ~key:t.sm_key_priv s let sign_with_sm_key s = EddsaSignature.sign ~key:t.sm_key_priv s
@ -369,23 +392,4 @@ module Make (Conn : Pg.CONN) = struct
let denom = { denom with dn_data } in let denom = { denom with dn_data } in
Hashtbl.replace t.dn_ht h_denom_pub denom; Hashtbl.replace t.dn_ht h_denom_pub denom;
Ok () Ok ()
(* TODO *)
let _store t =
let* () = Data_file.write_eddsa Fpath.(dir / "sm_key") t.sm_key_priv in
let* () =
get_signkeys ()
|> List.mapi (fun i (key : signkey) ->
let fname = Fpath.(dir / string_of_int i) in
(fname, key.priv))
|> list_iter (fun (fname, key) -> Data_file.write_eddsa fname key)
in
let* () =
get_denoms ()
|> List.mapi (fun i (key : denom) ->
let fname = Fpath.(dir / string_of_int i) in
(fname, key.priv))
|> list_iter (fun (fname, key) -> Data_file.write_rsa fname key)
in
Ok ()
end end