This commit is contained in:
parent
8bf7cf54ef
commit
50f9986568
5 changed files with 41 additions and 38 deletions
|
|
@ -1,7 +1,7 @@
|
|||
(* TODO better error type *)
|
||||
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
|
||||
let conn = (module Conn : Pg.CONN)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
module type S = Mod_intf.S
|
||||
module type S = Mod_intf.KEYS
|
||||
|
||||
module Make (_ : Pg.CONN) : S
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
type 'a result = ('a, string) Result.t
|
||||
|
||||
module type S = sig
|
||||
module type KEYS = sig
|
||||
open Crypto
|
||||
|
||||
val master_pub : eddsa_pub
|
||||
|
|
|
|||
|
|
@ -167,22 +167,14 @@ let t =
|
|||
| Error e -> Fmt.failwith "secmod_eddsa initialization failure: %s." e
|
||||
| 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 =
|
||||
Hashtbl.find_opt t.ht pub |> Option.to_result ~none:"key not found"
|
||||
|
||||
let sign ~pub s =
|
||||
let+ k = find pub in
|
||||
let data = EddsaSignature.sign ~key:k.priv s in
|
||||
data
|
||||
let add t1 t2 =
|
||||
let priv, pub = EddsaPrivateKey.generate () in
|
||||
let k = { priv; pub; t1; t2 } in
|
||||
Hashtbl.replace t.ht k.pub k;
|
||||
()
|
||||
|
||||
let delete pub =
|
||||
let* k = find pub in
|
||||
|
|
@ -195,11 +187,21 @@ let delete_outdated ~now =
|
|||
|> List.map (fun k -> k.pub)
|
||||
|> list_iter delete
|
||||
|
||||
let add t1 t2 =
|
||||
let priv, pub = EddsaPrivateKey.generate () in
|
||||
let k = { priv; pub; t1; t2 } in
|
||||
Hashtbl.replace t.ht k.pub k;
|
||||
()
|
||||
(* ---- *)
|
||||
|
||||
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 sign ~pub s =
|
||||
let+ k = find pub in
|
||||
let data = EddsaSignature.sign ~key:k.priv s in
|
||||
data
|
||||
|
||||
(* delete and replace *)
|
||||
let revoke pub =
|
||||
|
|
@ -209,7 +211,7 @@ let revoke pub =
|
|||
|
||||
(* TODO
|
||||
- more checks
|
||||
- sign: check time
|
||||
- sign: check timestamps before signing
|
||||
- schedule tasks
|
||||
- !lock
|
||||
|
||||
|
|
|
|||
|
|
@ -193,24 +193,9 @@ let t =
|
|||
| Error e -> Fmt.failwith "secmod_rsa initialization failure: %s." e
|
||||
| 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 =
|
||||
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* k = find pub in
|
||||
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;
|
||||
()
|
||||
|
||||
(* 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* k = find pub in
|
||||
let* () = delete pub in
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue