add update_master_signatures
This commit is contained in:
parent
0d17d2a675
commit
e9b7142412
11 changed files with 93 additions and 38 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue