This commit is contained in:
swrup 2026-02-25 18:34:25 +01:00
parent 7c453c0239
commit d23409628c
4 changed files with 39 additions and 26 deletions

View file

@ -9,7 +9,7 @@ module Keys_get = struct
Logs.info (fun m -> m "GET /management/keys/"); Logs.info (fun m -> m "GET /management/keys/");
let (module Keys : Keys.S) = Vif.Server.device Devices.keys server in let (module Keys : Keys.S) = Vif.Server.device Devices.keys server in
let res = let res =
let v = Keys.make_future_keys_response () in let* v = Keys.make_future_keys_response () in
Api.encode jsont v Api.encode jsont v
in in
Respond.result res req Respond.result res req

View file

@ -13,7 +13,7 @@ module type S = sig
val denominations : unit -> Denomination.t list result val denominations : unit -> Denomination.t list result
val find_future_signkey : eddsa_pub -> Api.FutureSignKey.t result val find_future_signkey : eddsa_pub -> Api.FutureSignKey.t result
val find_future_denomination : denom_hash -> Api.FutureDenom.t result val find_future_denomination : denom_hash -> Api.FutureDenom.t result
val make_future_keys_response : unit -> Api.FutureKeysResponse.t val make_future_keys_response : unit -> Api.FutureKeysResponse.t result
val certify_future_signkey : val certify_future_signkey :
eddsa_pub -> Signatures.ExchangeSigningKeyValidity.t -> unit result eddsa_pub -> Signatures.ExchangeSigningKeyValidity.t -> unit result
@ -194,16 +194,37 @@ module Make (Conn : Pg.CONN) : S = struct
Ok future_dn Ok future_dn
let make_future_keys_response () = let make_future_keys_response () =
let future_signkeys = Sm_eddsa.keys () |> List.map make_future_sk in let now = Timestamp.of_ptime @@ Ptime_clock.now () in
let future_denoms = Sm_rsa.keys () |> List.map make_future_dn in (* get keys from database to filter out keys already certified *)
Api.FutureKeysResponse. let* sk_db_l = Pg.get_signkeys conn ~now |> unwrap_err_caqti in
{ let sk_ht = Hashtbl.create 0xff in
future_denoms; List.iter (fun sk -> Hashtbl.replace sk_ht sk.Signkey.pub ()) sk_db_l;
future_signkeys; let future_signkeys =
master_pub= Config.Exchange.master_public_key; Sm_eddsa.keys ()
denom_secmod_public_key= Sm_rsa.sm_pub; |> List.filter (fun (pub, _) -> not @@ Hashtbl.mem sk_ht pub)
signkey_secmod_public_key= Sm_eddsa.sm_pub; |> List.map make_future_sk
} in
let* dn_db_l = Pg.get_denominations conn () |> unwrap_err_caqti in
let dn_ht = Hashtbl.create 0xff in
List.iter (fun dn -> Hashtbl.replace dn_ht dn.Denomination.h_pub ()) dn_db_l;
let future_denoms =
Sm_rsa.keys ()
|> List.filter (fun (h_pub, _) -> not @@ Hashtbl.mem dn_ht h_pub)
|> List.map make_future_dn
in
Logs.info (fun m ->
m "%d future signkey(s) and %d future denomination(s) to certify"
(List.length future_signkeys)
(List.length future_denoms));
Ok
Api.FutureKeysResponse.
{
future_denoms;
future_signkeys;
master_pub= Config.Exchange.master_public_key;
denom_secmod_public_key= Sm_rsa.sm_pub;
signkey_secmod_public_key= Sm_eddsa.sm_pub;
}
let sk_of_future_sk future_sk master_sig = let sk_of_future_sk future_sk master_sig =
let Api.FutureSignKey. let Api.FutureSignKey.

View file

@ -76,7 +76,7 @@ let get_key_dir_contents dir =
let+ l = let+ l =
Bos.OS.Dir.contents ~dotfiles:false ~rel:false dir |> unwrap_err_msg Bos.OS.Dir.contents ~dotfiles:false ~rel:false dir |> unwrap_err_msg
in in
l List.map Fpath.normalize l
(* -- *) (* -- *)
@ -137,11 +137,7 @@ let load_key fpath =
let load () = let load () =
let* l = get_key_dir_contents Cfg.key_dir in let* l = get_key_dir_contents Cfg.key_dir in
let l = let l = List.filter (fun fpath -> not @@ Fpath.equal fpath sm_key_fpath) l in
l
|> List.map Fpath.normalize
|> List.filter (fun fpath -> not @@ Fpath.equal fpath sm_key_fpath)
in
let* keys = list_map load_key l in let* keys = list_map load_key l in
match keys with match keys with
| [] -> Ok None | [] -> Ok None
@ -168,7 +164,7 @@ let init () =
let now = TimeAbsolute.of_ptime (Ptime_clock.now ()) in let now = TimeAbsolute.of_ptime (Ptime_clock.now ()) in
let keys = List.of_seq @@ Hashtbl.to_seq_values t.ht in let keys = List.of_seq @@ Hashtbl.to_seq_values t.ht in
let new_keys = gen_additional_keys_until_lookahead ~now keys in let new_keys = gen_additional_keys_until_lookahead ~now keys in
let () = List.iter (fun k -> Hashtbl.replace t.ht k.pub k) keys in List.iter (fun k -> Hashtbl.replace t.ht k.pub k) new_keys;
let+ () = list_iter write_key new_keys in let+ () = list_iter write_key new_keys in
t t

View file

@ -118,7 +118,7 @@ let get_key_dir_contents dir_fpath =
let+ l = let+ l =
Bos.OS.Dir.contents ~dotfiles:false ~rel:false dir_fpath |> unwrap_err_msg Bos.OS.Dir.contents ~dotfiles:false ~rel:false dir_fpath |> unwrap_err_msg
in in
l List.map Fpath.normalize l
(* -- *) (* -- *)
@ -185,11 +185,7 @@ let load_key ~section_name fpath =
let load_section section_name = let load_section section_name =
let section_fpath = Fpath.(v Cfg.key_dir / section_name) in let section_fpath = Fpath.(v Cfg.key_dir / section_name) in
let* l = get_key_dir_contents section_fpath in let* l = get_key_dir_contents section_fpath in
let l = let l = List.filter (fun fpath -> not @@ Fpath.equal fpath sm_key_fpath) l in
l
|> List.map Fpath.normalize
|> List.filter (fun fpath -> not @@ Fpath.equal fpath sm_key_fpath)
in
let* keys = list_map (load_key ~section_name) l in let* keys = list_map (load_key ~section_name) l in
Ok keys Ok keys
@ -230,7 +226,7 @@ let init () =
Cfg.sections Cfg.sections
in in
let new_keys = List.concat new_keys_l in let new_keys = List.concat new_keys_l in
let () = List.iter (fun k -> Hashtbl.replace t.ht k.h_pub k) new_keys in List.iter (fun k -> Hashtbl.replace t.ht k.h_pub k) new_keys;
let+ () = list_iter write_key new_keys in let+ () = list_iter write_key new_keys in
t t