functorize secmod

This commit is contained in:
swrup 2026-02-21 18:43:47 +01:00
parent 7f440077ed
commit cb33942711
6 changed files with 110 additions and 97 deletions

View file

@ -183,55 +183,58 @@ let init () =
let new_keys = List.concat new_keys_l in
let () = List.iter (fun k -> Hashtbl.replace t.ht k.pub k) new_keys in
let+ () = list_iter write_key new_keys in
t
(* --- *)
type info = string * rsa_pub * Time.Absolute.t * Time.Absolute.t
let t =
match init () with
| Error e -> Fmt.failwith "secmod_rsa initialization failure: %s." e
| Ok t -> t
module Make () = struct
type pub = RsaPublicKey.t
type info = string * RsaPublicKey.t * Time.Absolute.t * Time.Absolute.t
let find pub =
Hashtbl.find_opt t.ht pub |> Option.to_result ~none:"key not found"
(* --- *)
let t =
match init () with
| Error e -> Fmt.failwith "secmod_rsa initialization failure: %s." e
| Ok t -> t
let delete pub =
let* k = find pub in
Hashtbl.remove t.ht k.pub; delete_key_file k
let find pub =
Hashtbl.find_opt t.ht pub |> Option.to_result ~none:"key not found"
let delete_outdated ~now =
Hashtbl.to_seq_values t.ht
|> List.of_seq
|> List.filter (fun k -> Absolute.compare now k.t2 >= 0)
|> List.map (fun k -> k.pub)
|> list_iter delete
let delete pub =
let* k = find pub in
Hashtbl.remove t.ht k.pub; delete_key_file k
let add section_name t1 t2 =
let priv, pub = RsaPrivateKey.generate ~bits:Cfg.rsa_keysize () in
let k = { section_name; priv; pub; t1; t2 } in
Hashtbl.replace t.ht k.pub k;
()
let _delete_outdated ~now =
Hashtbl.to_seq_values t.ht
|> List.of_seq
|> List.filter (fun k -> Absolute.compare now k.t2 >= 0)
|> List.map (fun k -> k.pub)
|> list_iter delete
(* ---- *)
let add section_name t1 t2 =
let priv, pub = RsaPrivateKey.generate ~bits:Cfg.rsa_keysize () in
let k = { section_name; priv; pub; t1; t2 } in
Hashtbl.replace t.ht k.pub k;
()
let sm_pub = t.sm_pub
let sm_pub = t.sm_pub
let keys () =
Hashtbl.to_seq_values t.ht
|> List.of_seq
|> List.map (fun { section_name; priv= _; pub; t1; t2 } ->
(section_name, pub, t1, t2))
let keys () =
Hashtbl.to_seq_values t.ht
|> List.of_seq
|> List.map (fun { section_name; priv= _; pub; t1; t2 } ->
(section_name, pub, t1, t2))
let sign_secmod s = EddsaSignature.sign ~key:t.sm_key_priv s
let sign_secmod s = EddsaSignature.sign ~key:t.sm_key_priv s
let sign ~pub s =
let+ k = find pub in
let data = RsaSignature.sign ~key:k.priv s in
data
let sign pub s =
let+ k = find pub in
let data = RsaSignature.sign ~key:k.priv s in
data
let revoke pub =
let* k = find pub in
let* () = delete pub in
add k.section_name k.t1 k.t2;
Ok ()
let revoke pub =
let* k = find pub in
let* () = delete pub in
add k.section_name k.t1 k.t2;
Ok ()
end