This commit is contained in:
swrup 2026-02-21 17:39:12 +01:00
parent 8bf7cf54ef
commit 50f9986568
5 changed files with 41 additions and 38 deletions

View file

@ -1,7 +1,7 @@
(* TODO better error type *) (* TODO better error type *)
type 'a result = ('a, string) Result.t type 'a result = ('a, string) Result.t
module type S = Mod_intf.S module type S = Mod_intf.KEYS
module Make (Conn : Pg.CONN) = struct module Make (Conn : Pg.CONN) = struct
let conn = (module Conn : Pg.CONN) let conn = (module Conn : Pg.CONN)

View file

@ -1,3 +1,3 @@
module type S = Mod_intf.S module type S = Mod_intf.KEYS
module Make (_ : Pg.CONN) : S module Make (_ : Pg.CONN) : S

View file

@ -1,6 +1,6 @@
type 'a result = ('a, string) Result.t type 'a result = ('a, string) Result.t
module type S = sig module type KEYS = sig
open Crypto open Crypto
val master_pub : eddsa_pub val master_pub : eddsa_pub

View file

@ -167,22 +167,14 @@ let t =
| Error e -> Fmt.failwith "secmod_eddsa initialization failure: %s." e | Error e -> Fmt.failwith "secmod_eddsa initialization failure: %s." e
| Ok t -> t | Ok t -> t
let sm_pub = t.sm_pub
let keys () =
Hashtbl.to_seq_values t.ht
|> List.of_seq
|> List.map (fun { priv= _; pub; t1; t2 } -> (pub, t1, t2))
let sign_secmod s = EddsaSignature.sign ~key:t.sm_key_priv s
let find pub = let find pub =
Hashtbl.find_opt t.ht pub |> Option.to_result ~none:"key not found" Hashtbl.find_opt t.ht pub |> Option.to_result ~none:"key not found"
let sign ~pub s = let add t1 t2 =
let+ k = find pub in let priv, pub = EddsaPrivateKey.generate () in
let data = EddsaSignature.sign ~key:k.priv s in let k = { priv; pub; t1; t2 } in
data Hashtbl.replace t.ht k.pub k;
()
let delete pub = let delete pub =
let* k = find pub in let* k = find pub in
@ -195,11 +187,21 @@ let delete_outdated ~now =
|> List.map (fun k -> k.pub) |> List.map (fun k -> k.pub)
|> list_iter delete |> list_iter delete
let add t1 t2 = (* ---- *)
let priv, pub = EddsaPrivateKey.generate () in
let k = { priv; pub; t1; t2 } in let sm_pub = t.sm_pub
Hashtbl.replace t.ht k.pub k;
() let keys () =
Hashtbl.to_seq_values t.ht
|> List.of_seq
|> List.map (fun { priv= _; pub; t1; t2 } -> (pub, t1, t2))
let sign_secmod s = EddsaSignature.sign ~key:t.sm_key_priv s
let sign ~pub s =
let+ k = find pub in
let data = EddsaSignature.sign ~key:k.priv s in
data
(* delete and replace *) (* delete and replace *)
let revoke pub = let revoke pub =
@ -209,7 +211,7 @@ let revoke pub =
(* TODO (* TODO
- more checks - more checks
- sign: check time - sign: check timestamps before signing
- schedule tasks - schedule tasks
- !lock - !lock

View file

@ -193,24 +193,9 @@ let t =
| Error e -> Fmt.failwith "secmod_rsa initialization failure: %s." e | Error e -> Fmt.failwith "secmod_rsa initialization failure: %s." e
| Ok t -> t | Ok t -> t
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 sign_secmod s = EddsaSignature.sign ~key:t.sm_key_priv s
let find pub = let find pub =
Hashtbl.find_opt t.ht pub |> Option.to_result ~none:"key not found" Hashtbl.find_opt t.ht pub |> Option.to_result ~none:"key not found"
let sign ~pub s =
let+ k = find pub in
let data = RsaSignature.sign ~key:k.priv s in
data
let delete pub = let delete pub =
let* k = find pub in let* k = find pub in
Hashtbl.remove t.ht k.pub; delete_key_file k Hashtbl.remove t.ht k.pub; delete_key_file k
@ -228,7 +213,23 @@ let add section_name t1 t2 =
Hashtbl.replace t.ht k.pub k; Hashtbl.replace t.ht k.pub k;
() ()
(* delete and replace *) (* ---- *)
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 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 revoke pub = let revoke pub =
let* k = find pub in let* k = find pub in
let* () = delete pub in let* () = delete pub in