From e291dc5d49d1ae8adc0c3d770e6583768b6ec953 Mon Sep 17 00:00:00 2001 From: swrup Date: Fri, 20 Feb 2026 09:13:00 +0100 Subject: [PATCH] --- src/secmod_eddsa.ml | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/secmod_eddsa.ml b/src/secmod_eddsa.ml index 91d00f46..b8b40809 100644 --- a/src/secmod_eddsa.ml +++ b/src/secmod_eddsa.ml @@ -17,7 +17,7 @@ type key = { type t = { sm_key_priv: priv; sm_key_pub: pub; - keys: key list; + mutable keys: key list; } let time_abs_of_string s = @@ -35,6 +35,11 @@ let time_abs_to_string abs = |> Int64.to_int |> string_of_int +let key_filename k = + let t1 = time_abs_to_string k.t1 in + let t2 = time_abs_to_string k.t2 in + Fmt.str "%s-%s" t1 t2 + let read_key fname = let fpath = Fpath.(v Cfg.key_dir / fname) in let* data = Bos.OS.File.read fpath |> unwrap_err_msg in @@ -45,11 +50,7 @@ let write_eddsa fname priv = let data = EddsaPrivateKey.to_octets priv in Bos.OS.File.write fpath data |> unwrap_err_msg -let write_key t = - let t1 = time_abs_to_string t.t1 in - let t2 = time_abs_to_string t.t2 in - let fname = Fmt.str "%s-%s" t1 t2 in - write_eddsa fname t.priv +let write_key k = write_eddsa (key_filename k) k.priv let split_in_periodes ~start ~end_ = (* no overlap on first periode @@ -174,10 +175,21 @@ let sign ~pub s = let data = EddsaSignature.sign ~key:k.priv s in Ok data +let delete_key ~pub = + let k = List.find_opt (fun k -> k.pub = pub) t.keys in + match k with + | None -> Error "key not found" + | Some k -> + let l = List.filter (fun k -> k.pub <> pub) t.keys in + t.keys <- l; + (* rm file *) + let fname = key_filename k in + let fpath = Fpath.(v Cfg.key_dir / fname) in + let+ () = Bos.OS.File.delete ~must_exist:true fpath |> unwrap_err_msg in + () + (* TODO - sign: check time - - purge - - revoke - schedule tasks - !lock