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 *)
|
(* 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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue