wip update_master_signatures
This commit is contained in:
parent
0d17d2a675
commit
5307eb2216
7 changed files with 35 additions and 10 deletions
|
|
@ -48,6 +48,7 @@ end) : sig
|
||||||
(* Ok () on verification success *)
|
(* Ok () on verification success *)
|
||||||
val verify : key:Crypto.EddsaPublicKey.t -> t -> r -> (unit, string) result
|
val verify : key:Crypto.EddsaPublicKey.t -> t -> r -> (unit, string) result
|
||||||
val jsont : t Jsont.t
|
val jsont : t Jsont.t
|
||||||
|
val caqti : t Caqti_type.t
|
||||||
end = struct
|
end = struct
|
||||||
open Crypto
|
open Crypto
|
||||||
|
|
||||||
|
|
@ -64,6 +65,14 @@ end = struct
|
||||||
| true -> Ok ()
|
| true -> Ok ()
|
||||||
|
|
||||||
let jsont = EddsaSignature.jsont
|
let jsont = EddsaSignature.jsont
|
||||||
|
|
||||||
|
let caqti : EddsaSignature.t Caqti_type.t =
|
||||||
|
let open Caqti_type in
|
||||||
|
let open EddsaSignature in
|
||||||
|
custom
|
||||||
|
~encode:(fun v -> Ok (to_octets v))
|
||||||
|
~decode:(fun s -> Ok (of_octets s))
|
||||||
|
octets
|
||||||
end
|
end
|
||||||
|
|
||||||
module DenominationKeyAnnouncementPS = struct
|
module DenominationKeyAnnouncementPS = struct
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,5 @@ let test_activate req server _ =
|
||||||
let db_conn = Vif.Server.device Devices.db_connection server in
|
let db_conn = Vif.Server.device Devices.db_connection server in
|
||||||
let secmod_signkey = Vif.Server.device Devices.secmod_signkey server in
|
let secmod_signkey = Vif.Server.device Devices.secmod_signkey server in
|
||||||
let sm_key = Secmod_signkey.get_sm_key secmod_signkey in
|
let sm_key = Secmod_signkey.get_sm_key secmod_signkey in
|
||||||
let sm_key = { sm_key with master_sig= dummy_master_sig } in
|
|
||||||
let res = Pg.activate_signing_key db_conn sm_key in
|
let res = Pg.activate_signing_key db_conn sm_key in
|
||||||
Result.fold ~ok:(on_ok req) ~error:(on_error req) res
|
Result.fold ~ok:(on_ok req) ~error:(on_error req) res
|
||||||
|
|
|
||||||
|
|
@ -165,6 +165,12 @@ let verify_master_signatures ~sm_signkeys ~sm_denoms
|
||||||
|
|
||||||
(* --- *)
|
(* --- *)
|
||||||
|
|
||||||
|
let update_master_signatures ~db_conn ~sm_signkey ~sm_denom:_
|
||||||
|
MasterSignatures.{ denom_sigs= _; signkey_sigs } =
|
||||||
|
Secmod_signkey.add_master_signatures db_conn sm_signkey signkey_sigs
|
||||||
|
|
||||||
|
(* --- *)
|
||||||
|
|
||||||
let respond_with_plain_text_error ?status e req =
|
let respond_with_plain_text_error ?status e req =
|
||||||
let open Vif.Response in
|
let open Vif.Response in
|
||||||
let open Syntax in
|
let open Syntax in
|
||||||
|
|
@ -198,6 +204,7 @@ let keys_get req server _env =
|
||||||
let keys_post_jsont = MasterSignatures.jsont
|
let keys_post_jsont = MasterSignatures.jsont
|
||||||
|
|
||||||
let keys_post req server _env =
|
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_signkey = Vif.Server.device Devices.secmod_signkey server in
|
||||||
let sm_denom = Vif.Server.device Devices.secmod_denom server in
|
let sm_denom = Vif.Server.device Devices.secmod_denom server in
|
||||||
let res =
|
let res =
|
||||||
|
|
@ -214,7 +221,9 @@ let keys_post req server _env =
|
||||||
let sm_signkeys = Secmod_signkey.get_signkeys sm_signkey in
|
let sm_signkeys = Secmod_signkey.get_signkeys sm_signkey in
|
||||||
verify_master_signatures ~sm_signkeys ~sm_denoms master_signatures
|
verify_master_signatures ~sm_signkeys ~sm_denoms master_signatures
|
||||||
in
|
in
|
||||||
(* TODO let* () = update_master_signatures () in*)
|
let* () =
|
||||||
|
update_master_signatures ~db_conn ~sm_signkey ~sm_denom master_signatures
|
||||||
|
in
|
||||||
Ok ""
|
Ok ""
|
||||||
in
|
in
|
||||||
respond_with_res res req
|
respond_with_res res req
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,8 @@ let lookup_signing_key =
|
||||||
|
|
||||||
let activate_signing_key =
|
let activate_signing_key =
|
||||||
let insert_signkey =
|
let insert_signkey =
|
||||||
Caqti_type.(t5 eddsa_public time time time eddsa_signature ->. unit)
|
let master_sig = Api_sig.ExchangeSigningKeyValidityPS.caqti in
|
||||||
|
Caqti_type.(t5 eddsa_public time time time master_sig ->. unit)
|
||||||
"INSERT INTO exchange_sign_keys (exchange_pub, valid_from, expire_sign, \
|
"INSERT INTO exchange_sign_keys (exchange_pub, valid_from, expire_sign, \
|
||||||
expire_legal, master_sig) VALUES ($1, $2, $3, $4, $5)"
|
expire_legal, master_sig) VALUES ($1, $2, $3, $4, $5)"
|
||||||
in
|
in
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,16 @@ let get_signkeys t =
|
||||||
Hashtbl.to_seq_values t.signkey_ht |> List.of_seq
|
Hashtbl.to_seq_values t.signkey_ht |> List.of_seq
|
||||||
|
|
||||||
(* TODO *)
|
(* TODO *)
|
||||||
let update_signkeys _conn t signkeys =
|
let add_master_signatures _conn t l =
|
||||||
Miou.Mutex.protect t.lock @@ fun () ->
|
Miou.Mutex.protect t.lock @@ fun () ->
|
||||||
List.iter
|
l
|
||||||
(fun signkey -> Hashtbl.replace t.signkey_ht signkey.Signkey.pub signkey)
|
|> Syntax.list_iter (fun Api.SignKeySignature.{ key= pub; master_sig } ->
|
||||||
signkeys
|
match Hashtbl.find_opt t.signkey_ht pub with
|
||||||
|
| None -> Error "secmod_signkey failure: public key not found."
|
||||||
|
| Some signkey ->
|
||||||
|
let signkey = { signkey with master_sig= Some master_sig } in
|
||||||
|
Hashtbl.replace t.signkey_ht pub signkey;
|
||||||
|
Ok ())
|
||||||
|
|
||||||
let dir = Fpath.(v "data" / "secmod_signkey")
|
let dir = Fpath.(v "data" / "secmod_signkey")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,5 +2,8 @@ type t
|
||||||
|
|
||||||
val get_sm_key : t -> Signkey.t
|
val get_sm_key : t -> Signkey.t
|
||||||
val get_signkeys : t -> Signkey.t list
|
val get_signkeys : t -> Signkey.t list
|
||||||
val update_signkeys : (module Pg.CONN) -> t -> Signkey.t list -> unit
|
|
||||||
|
val add_master_signatures :
|
||||||
|
(module Pg.CONN) -> t -> Api.SignKeySignature.t list -> (unit, string) result
|
||||||
|
|
||||||
val init : (module Pg.CONN) -> t
|
val init : (module Pg.CONN) -> t
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,7 @@ type t = {
|
||||||
stamp_start: Timestamp.t;
|
stamp_start: Timestamp.t;
|
||||||
stamp_expire: Timestamp.t;
|
stamp_expire: Timestamp.t;
|
||||||
stamp_end: Timestamp.t;
|
stamp_end: Timestamp.t;
|
||||||
(* signature of this key by offline master key *)
|
master_sig: Api_sig.ExchangeSigningKeyValidityPS.t option;
|
||||||
master_sig: EddsaSignature.t option;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let make () =
|
let make () =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue