add update_master_signatures

This commit is contained in:
swrup 2025-12-07 01:02:54 +01:00
parent 0d17d2a675
commit e9b7142412
11 changed files with 93 additions and 38 deletions

View file

@ -96,19 +96,16 @@ let mk_future_keys_response ~(sm_signkey : Secmod_signkey.t)
(* - ** - *)
let verify_denom_signature ~sm_denoms DenomSignature.{ h_denom_pub; master_sig }
let verify_denom_signature ~sm_denom DenomSignature.{ h_denom_pub; master_sig }
=
let open Syntax in
let denom_hash =
Bin_type.DenominationHash.of_octets (HashCode.to_octets h_denom_pub)
in
let* denom =
let opt =
List.find_opt
(fun (denom : Denomination.t) -> denom.h_pub = denom_hash)
sm_denoms
in
match opt with
Secmod_denom.get_denoms sm_denom
|> List.find_opt (fun (denom : Denomination.t) -> denom.h_pub = denom_hash)
|> function
| None ->
Fmt.error
"404 not found, One of the keys for which a signature was provided \
@ -132,13 +129,12 @@ let verify_denom_signature ~sm_denoms DenomSignature.{ h_denom_pub; master_sig }
in
verify ~key:Config.master_public_key master_sig r
let verify_signkey_signature ~sm_signkeys SignKeySignature.{ key; master_sig } =
let verify_signkey_signature ~sm_signkey SignKeySignature.{ key; master_sig } =
let open Syntax in
let* signkey =
let opt =
List.find_opt (fun (signkey : Signkey.t) -> signkey.pub = key) sm_signkeys
in
match opt with
Secmod_signkey.get_signkeys sm_signkey
|> List.find_opt (fun (signkey : Signkey.t) -> signkey.pub = key)
|> function
| None ->
Fmt.error
"404 not found, One of the keys for which a signature was provided \
@ -156,11 +152,33 @@ let verify_signkey_signature ~sm_signkeys SignKeySignature.{ key; master_sig } =
in
verify ~key:Config.master_public_key master_sig r
let verify_master_signatures ~sm_signkeys ~sm_denoms
let verify_master_signatures ~sm_signkey ~sm_denom
MasterSignatures.{ denom_sigs; signkey_sigs } =
let open Syntax in
let* () = list_iter (verify_denom_signature ~sm_denoms) denom_sigs in
let* () = list_iter (verify_signkey_signature ~sm_signkeys) signkey_sigs in
let* () = list_iter (verify_denom_signature ~sm_denom) denom_sigs in
let* () = list_iter (verify_signkey_signature ~sm_signkey) signkey_sigs in
Ok ()
(* --- *)
let update_master_signatures ~db_conn ~sm_signkey ~sm_denom
MasterSignatures.{ denom_sigs; signkey_sigs } =
let open Syntax in
let* () =
signkey_sigs
|> List.map (fun SignKeySignature.{ key; master_sig } -> (key, master_sig))
|> Secmod_signkey.add_master_signatures db_conn sm_signkey
in
let* () =
denom_sigs
|> List.map (fun DenomSignature.{ h_denom_pub; master_sig } ->
(* TODO better denomination-hash type *)
let h_denom_pub =
Bin_type.DenominationHash.of_octets (HashCode.to_octets h_denom_pub)
in
(h_denom_pub, master_sig))
|> Secmod_denom.add_master_signatures db_conn sm_denom
in
Ok ()
(* --- *)
@ -198,6 +216,7 @@ let keys_get req server _env =
let keys_post_jsont = MasterSignatures.jsont
let keys_post req server _env =
let db_conn = Vif.Server.device Devices.db_connection server in
let sm_signkey = Vif.Server.device Devices.secmod_signkey server in
let sm_denom = Vif.Server.device Devices.secmod_denom server in
let res =
@ -210,11 +229,11 @@ let keys_post req server _env =
Error msg
in
let* () =
let sm_denoms = Secmod_denom.get_denoms sm_denom in
let sm_signkeys = Secmod_signkey.get_signkeys sm_signkey in
verify_master_signatures ~sm_signkeys ~sm_denoms master_signatures
verify_master_signatures ~sm_signkey ~sm_denom master_signatures
in
let* () =
update_master_signatures ~db_conn ~sm_signkey ~sm_denom master_signatures
in
(* TODO let* () = update_master_signatures () in*)
Ok ""
in
respond_with_res res req