JJ: Description from the destination commit:
different verify for master sigs JJ: Description from source commit: .
This commit is contained in:
parent
37ed47326a
commit
1d0d36c2b9
5 changed files with 108 additions and 138 deletions
|
|
@ -3,29 +3,13 @@ open Api
|
||||||
open Hash
|
open Hash
|
||||||
|
|
||||||
module Keys_get = struct
|
module Keys_get = struct
|
||||||
let mk_future_keys_response (module Keys : Keys.S) =
|
|
||||||
let* future_signkeys = Keys.future_signkeys () in
|
|
||||||
let* future_denoms = Keys.future_denominations () in
|
|
||||||
let master_pub = Keys.master_pub in
|
|
||||||
let denom_secmod_public_key = Keys.secmod_rsa_pub in
|
|
||||||
let signkey_secmod_public_key = Keys.secmod_eddsa_pub in
|
|
||||||
Ok
|
|
||||||
FutureKeysResponse.
|
|
||||||
{
|
|
||||||
future_denoms;
|
|
||||||
future_signkeys;
|
|
||||||
master_pub;
|
|
||||||
denom_secmod_public_key;
|
|
||||||
signkey_secmod_public_key;
|
|
||||||
}
|
|
||||||
|
|
||||||
let jsont = FutureKeysResponse.jsont
|
let jsont = FutureKeysResponse.jsont
|
||||||
|
|
||||||
let f req server _env =
|
let f req server _env =
|
||||||
Logs.info (fun m -> m "GET /management/keys/");
|
Logs.info (fun m -> m "GET /management/keys/");
|
||||||
let keys = 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 = mk_future_keys_response keys in
|
let* v = Keys.make_future_keys_response () in
|
||||||
let s = Api.encode_exn jsont v in
|
let s = Api.encode_exn jsont v in
|
||||||
Ok s
|
Ok s
|
||||||
in
|
in
|
||||||
|
|
@ -36,9 +20,9 @@ module Keys_post = struct
|
||||||
let verify_dn (module Keys : Keys.S) fdn denom_hash master_sig =
|
let verify_dn (module Keys : Keys.S) fdn denom_hash master_sig =
|
||||||
let open FutureDenom in
|
let open FutureDenom in
|
||||||
let open Signatures.DenominationKeyValidity in
|
let open Signatures.DenominationKeyValidity in
|
||||||
let r : r =
|
let r =
|
||||||
{
|
{
|
||||||
master= Config.master_public_key;
|
R.master= Config.master_public_key;
|
||||||
start= fdn.stamp_start;
|
start= fdn.stamp_start;
|
||||||
expire_withdraw= fdn.stamp_expire_withdraw;
|
expire_withdraw= fdn.stamp_expire_withdraw;
|
||||||
expire_spend= fdn.stamp_expire_deposit;
|
expire_spend= fdn.stamp_expire_deposit;
|
||||||
|
|
@ -51,7 +35,7 @@ module Keys_post = struct
|
||||||
denom_hash;
|
denom_hash;
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
verify Keys.master_pub master_sig r
|
verify master_sig r
|
||||||
|
|
||||||
let verify_denom_sigs (module Keys : Keys.S) denom_sigs =
|
let verify_denom_sigs (module Keys : Keys.S) denom_sigs =
|
||||||
let* fdn_l = Keys.future_denominations () in
|
let* fdn_l = Keys.future_denominations () in
|
||||||
|
|
@ -78,15 +62,15 @@ module Keys_post = struct
|
||||||
{ key; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig= _ }
|
{ key; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig= _ }
|
||||||
master_sig =
|
master_sig =
|
||||||
let open Signatures.ExchangeSigningKeyValidity in
|
let open Signatures.ExchangeSigningKeyValidity in
|
||||||
let r : r =
|
let r =
|
||||||
{
|
{
|
||||||
start= stamp_start;
|
R.start= stamp_start;
|
||||||
expire= stamp_expire;
|
expire= stamp_expire;
|
||||||
end_= stamp_end;
|
end_= stamp_end;
|
||||||
signkey_pub= key;
|
signkey_pub= key;
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
verify Keys.master_pub master_sig r
|
verify master_sig r
|
||||||
|
|
||||||
let verify_signkey_sigs (module Keys : Keys.S) signkey_sigs =
|
let verify_signkey_sigs (module Keys : Keys.S) signkey_sigs =
|
||||||
let* fsk_l = Keys.future_signkeys () in
|
let* fsk_l = Keys.future_signkeys () in
|
||||||
|
|
@ -137,7 +121,7 @@ module Denom_revoke = struct
|
||||||
let verify (module Keys : Keys.S) h_denom_pub
|
let verify (module Keys : Keys.S) h_denom_pub
|
||||||
DenomRevocationSignature.{ master_sig } =
|
DenomRevocationSignature.{ master_sig } =
|
||||||
let open Signatures.MasterDenominationKeyRevocation in
|
let open Signatures.MasterDenominationKeyRevocation in
|
||||||
verify Keys.master_pub master_sig { h_denom_pub }
|
verify master_sig { h_denom_pub }
|
||||||
|
|
||||||
let do_ (module Keys : Keys.S) h_denom_pub
|
let do_ (module Keys : Keys.S) h_denom_pub
|
||||||
DenomRevocationSignature.{ master_sig } =
|
DenomRevocationSignature.{ master_sig } =
|
||||||
|
|
@ -163,7 +147,7 @@ module Signkey_revoke = struct
|
||||||
let verify (module Keys : Keys.S) exchange_pub
|
let verify (module Keys : Keys.S) exchange_pub
|
||||||
SignkeyRevocationSignature.{ master_sig } =
|
SignkeyRevocationSignature.{ master_sig } =
|
||||||
let open Signatures.MasterSigningKeyRevocation in
|
let open Signatures.MasterSigningKeyRevocation in
|
||||||
verify Keys.master_pub master_sig { exchange_pub }
|
verify master_sig { exchange_pub }
|
||||||
|
|
||||||
let do_ (module Keys : Keys.S) exchange_pub
|
let do_ (module Keys : Keys.S) exchange_pub
|
||||||
SignkeyRevocationSignature.{ master_sig } =
|
SignkeyRevocationSignature.{ master_sig } =
|
||||||
|
|
@ -196,7 +180,7 @@ module Auditors = struct
|
||||||
validity_start;
|
validity_start;
|
||||||
} =
|
} =
|
||||||
let open Signatures.MasterAddAuditor in
|
let open Signatures.MasterAddAuditor in
|
||||||
verify Keys.master_pub master_sig
|
verify master_sig
|
||||||
{
|
{
|
||||||
start_date= validity_start;
|
start_date= validity_start;
|
||||||
auditor_pub;
|
auditor_pub;
|
||||||
|
|
@ -243,7 +227,7 @@ module Auditors_disable = struct
|
||||||
let verify (module Keys : Keys.S) auditor_pub
|
let verify (module Keys : Keys.S) auditor_pub
|
||||||
AuditorTeardownMessage.{ master_sig; validity_end } =
|
AuditorTeardownMessage.{ master_sig; validity_end } =
|
||||||
let open Signatures.MasterDelAuditor in
|
let open Signatures.MasterDelAuditor in
|
||||||
verify Keys.master_pub master_sig { end_date= validity_end; auditor_pub }
|
verify master_sig { end_date= validity_end; auditor_pub }
|
||||||
|
|
||||||
let do_ ~db_conn auditor_pub
|
let do_ ~db_conn auditor_pub
|
||||||
AuditorTeardownMessage.{ master_sig= _; validity_end } =
|
AuditorTeardownMessage.{ master_sig= _; validity_end } =
|
||||||
|
|
@ -291,7 +275,7 @@ module Wire_fee = struct
|
||||||
wire_fee;
|
wire_fee;
|
||||||
} =
|
} =
|
||||||
let open Signatures.MasterWireFee in
|
let open Signatures.MasterWireFee in
|
||||||
verify Keys.master_pub master_sig_wire
|
verify master_sig_wire
|
||||||
{
|
{
|
||||||
h_wire_method= Hash.Cstring.H64.hash wire_method;
|
h_wire_method= Hash.Cstring.H64.hash wire_method;
|
||||||
start_date= fee_start;
|
start_date= fee_start;
|
||||||
|
|
@ -353,7 +337,7 @@ module Global_fees = struct
|
||||||
master_sig;
|
master_sig;
|
||||||
} =
|
} =
|
||||||
let open Signatures.GlobalFees in
|
let open Signatures.GlobalFees in
|
||||||
verify Keys.master_pub master_sig
|
verify master_sig
|
||||||
{
|
{
|
||||||
start_date;
|
start_date;
|
||||||
end_date;
|
end_date;
|
||||||
|
|
@ -426,7 +410,7 @@ module Wire = struct
|
||||||
let debit_restrictions = "" in
|
let debit_restrictions = "" in
|
||||||
let* () =
|
let* () =
|
||||||
let open Signatures.MasterWireDetails in
|
let open Signatures.MasterWireDetails in
|
||||||
verify Keys.master_pub master_sig_wire
|
verify master_sig_wire
|
||||||
{
|
{
|
||||||
h_wire_details= FullPaytoHash.hash payto_uri;
|
h_wire_details= FullPaytoHash.hash payto_uri;
|
||||||
h_conversion_url= Hash.Cstring.H64.hash conversion_url;
|
h_conversion_url= Hash.Cstring.H64.hash conversion_url;
|
||||||
|
|
@ -436,7 +420,7 @@ module Wire = struct
|
||||||
in
|
in
|
||||||
let* () =
|
let* () =
|
||||||
let open Signatures.MasterAddWire in
|
let open Signatures.MasterAddWire in
|
||||||
verify Keys.master_pub master_sig_add
|
verify master_sig_add
|
||||||
{
|
{
|
||||||
start_date= validity_start;
|
start_date= validity_start;
|
||||||
h_wire= FullPaytoHash.hash payto_uri;
|
h_wire= FullPaytoHash.hash payto_uri;
|
||||||
|
|
@ -492,7 +476,7 @@ module Wire_disable = struct
|
||||||
let verify (module Keys : Keys.S)
|
let verify (module Keys : Keys.S)
|
||||||
WireTeardownMessage.{ payto_uri; master_sig_del; validity_end } =
|
WireTeardownMessage.{ payto_uri; master_sig_del; validity_end } =
|
||||||
let open Signatures.MasterDelWire in
|
let open Signatures.MasterDelWire in
|
||||||
verify Keys.master_pub master_sig_del
|
verify master_sig_del
|
||||||
{ end_date= validity_end; h_wire= FullPaytoHash.hash payto_uri }
|
{ end_date= validity_end; h_wire= FullPaytoHash.hash payto_uri }
|
||||||
|
|
||||||
let do_ ~db_conn
|
let do_ ~db_conn
|
||||||
|
|
@ -535,7 +519,7 @@ module Drain = struct
|
||||||
amount;
|
amount;
|
||||||
} =
|
} =
|
||||||
let open Signatures.MasterDrainProfit in
|
let open Signatures.MasterDrainProfit in
|
||||||
verify Keys.master_pub master_sig
|
verify master_sig
|
||||||
{
|
{
|
||||||
wtid;
|
wtid;
|
||||||
date;
|
date;
|
||||||
|
|
@ -576,7 +560,7 @@ module AmlOfficer = struct
|
||||||
} =
|
} =
|
||||||
let open Signatures.MasterAmlOfficerStatus in
|
let open Signatures.MasterAmlOfficerStatus in
|
||||||
let is_active = match is_active with true -> 1_l | false -> 0_l in
|
let is_active = match is_active with true -> 1_l | false -> 0_l in
|
||||||
verify Keys.master_pub master_sig
|
verify master_sig
|
||||||
{
|
{
|
||||||
change_date;
|
change_date;
|
||||||
officer_pub;
|
officer_pub;
|
||||||
|
|
@ -616,7 +600,7 @@ module Partners = struct
|
||||||
wad_fee;
|
wad_fee;
|
||||||
} =
|
} =
|
||||||
let open Signatures.PartnerConfiguration in
|
let open Signatures.PartnerConfiguration in
|
||||||
verify Keys.master_pub master_sig
|
verify master_sig
|
||||||
{
|
{
|
||||||
partner_pub;
|
partner_pub;
|
||||||
start_date;
|
start_date;
|
||||||
|
|
|
||||||
21
src/keys.ml
21
src/keys.ml
|
|
@ -12,11 +12,6 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
|
|
||||||
let conn = (module Conn : Pg.CONN)
|
let conn = (module Conn : Pg.CONN)
|
||||||
|
|
||||||
(* - *)
|
|
||||||
let master_pub = Config.Exchange.master_public_key
|
|
||||||
let secmod_eddsa_pub = Sm_eddsa.sm_pub
|
|
||||||
let secmod_rsa_pub = Sm_rsa.sm_pub
|
|
||||||
|
|
||||||
(* TODO
|
(* TODO
|
||||||
error "key not found", either:
|
error "key not found", either:
|
||||||
- we tried to sign with a key that is not ours
|
- we tried to sign with a key that is not ours
|
||||||
|
|
@ -37,7 +32,8 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
let find_denomination h_pub = Pg.find_denom conn h_pub |> unwrap_err_caqti
|
let find_denomination h_pub = Pg.find_denom conn h_pub |> unwrap_err_caqti
|
||||||
|
|
||||||
(* TODO
|
(* TODO
|
||||||
check if database is coherent with secmod *)
|
check if database is coherent with secmod
|
||||||
|
=> have something to run independent tests with clean db+sm *)
|
||||||
let signkeys () : Signkey.t list result =
|
let signkeys () : Signkey.t list result =
|
||||||
let now = Timestamp.of_ptime @@ Ptime_clock.now () in
|
let now = Timestamp.of_ptime @@ Ptime_clock.now () in
|
||||||
Pg.get_active_signkeys conn ~now |> unwrap_err_caqti
|
Pg.get_active_signkeys conn ~now |> unwrap_err_caqti
|
||||||
|
|
@ -173,6 +169,19 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
in
|
in
|
||||||
List.filter_map Fun.id l
|
List.filter_map Fun.id l
|
||||||
|
|
||||||
|
let make_future_keys_response () =
|
||||||
|
let* future_signkeys = future_signkeys () in
|
||||||
|
let* future_denoms = future_denominations () in
|
||||||
|
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.
|
||||||
{ key; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig= _ } =
|
{ key; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig= _ } =
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,6 @@ open Crypto
|
||||||
type 'a result = ('a, string) Result.t
|
type 'a result = ('a, string) Result.t
|
||||||
|
|
||||||
module type KEYS = sig
|
module type KEYS = sig
|
||||||
val master_pub : eddsa_pub
|
|
||||||
val secmod_rsa_pub : eddsa_pub
|
|
||||||
val secmod_eddsa_pub : eddsa_pub
|
|
||||||
val sign : eddsa_pub -> string -> eddsa_sig
|
val sign : eddsa_pub -> string -> eddsa_sig
|
||||||
val sign_denom : rsa_pub -> string -> rsa_sig
|
val sign_denom : rsa_pub -> string -> rsa_sig
|
||||||
val find_signkey : eddsa_pub -> Signkey.t option result
|
val find_signkey : eddsa_pub -> Signkey.t option result
|
||||||
|
|
@ -14,6 +11,7 @@ module type KEYS = sig
|
||||||
val denominations : unit -> Denomination.t list result
|
val denominations : unit -> Denomination.t list result
|
||||||
val future_signkeys : unit -> Api.FutureSignKey.t list result
|
val future_signkeys : unit -> Api.FutureSignKey.t list result
|
||||||
val future_denominations : unit -> Api.FutureDenom.t list result
|
val future_denominations : unit -> Api.FutureDenom.t list result
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -145,20 +145,21 @@ end
|
||||||
|
|
||||||
(* --- Packed Signatures --- *)
|
(* --- Packed Signatures --- *)
|
||||||
|
|
||||||
module MK (R : sig
|
module type R = sig
|
||||||
type r
|
type r
|
||||||
|
|
||||||
val bin : r Bin.t
|
val bin : r Bin.t
|
||||||
end) : sig
|
end
|
||||||
|
|
||||||
|
module type SIGNATURE = sig
|
||||||
open Crypto
|
open Crypto
|
||||||
|
|
||||||
type r = R.r
|
type r
|
||||||
type t
|
type t
|
||||||
|
|
||||||
val signf : (string -> EddsaSignature.t) -> r -> t
|
val signf : (string -> EddsaSignature.t) -> r -> t
|
||||||
|
|
||||||
(* todo
|
(* todo
|
||||||
- could have another functor with `verify`'s key set to config's master_public_key
|
|
||||||
- type for unknown/verified signatures? (nk/ok) *)
|
- type for unknown/verified signatures? (nk/ok) *)
|
||||||
val verify : EddsaPublicKey.t -> t -> r -> (unit, string) result
|
val verify : EddsaPublicKey.t -> t -> r -> (unit, string) result
|
||||||
val jsont : t Jsont.t
|
val jsont : t Jsont.t
|
||||||
|
|
@ -166,10 +167,11 @@ end) : sig
|
||||||
|
|
||||||
(* escape hatch, only needed for /keys `exchange_sig` (signature over contatentation of all of the master_sigs) *)
|
(* escape hatch, only needed for /keys `exchange_sig` (signature over contatentation of all of the master_sigs) *)
|
||||||
val to_octets : t -> string
|
val to_octets : t -> string
|
||||||
end = struct
|
end
|
||||||
|
|
||||||
|
module MK (R : R) : SIGNATURE with type r := R.r = struct
|
||||||
open Crypto
|
open Crypto
|
||||||
|
|
||||||
type r = R.r
|
|
||||||
type t = EddsaSignature.t
|
type t = EddsaSignature.t
|
||||||
|
|
||||||
let to_string = Bin.to_string R.bin
|
let to_string = Bin.to_string R.bin
|
||||||
|
|
@ -180,6 +182,14 @@ end = struct
|
||||||
let to_octets t = EddsaSignature.to_octets t
|
let to_octets t = EddsaSignature.to_octets t
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module MK_master_sig (R : R) = struct
|
||||||
|
include MK (R)
|
||||||
|
|
||||||
|
let verify = verify Config.Exchange.master_public_key
|
||||||
|
end
|
||||||
|
|
||||||
|
(* ---- *)
|
||||||
|
|
||||||
module DenominationKeyAnnouncement = struct
|
module DenominationKeyAnnouncement = struct
|
||||||
module R = struct
|
module R = struct
|
||||||
(* CS: use purpose TALER_SIGNATURE_SM_CS_DENOMINATION_KEY *)
|
(* CS: use purpose TALER_SIGNATURE_SM_CS_DENOMINATION_KEY *)
|
||||||
|
|
@ -207,7 +217,6 @@ module DenominationKeyAnnouncement = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
|
||||||
include MK (R)
|
include MK (R)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -232,7 +241,6 @@ module SigningKeyAnnouncement = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
|
||||||
include MK (R)
|
include MK (R)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -301,8 +309,7 @@ module DenominationKeyValidity = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module ExchangeSigningKeyValidity = struct
|
module ExchangeSigningKeyValidity = struct
|
||||||
|
|
@ -329,8 +336,7 @@ module ExchangeSigningKeyValidity = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterDenominationKeyRevocation = struct
|
module MasterDenominationKeyRevocation = struct
|
||||||
|
|
@ -348,8 +354,7 @@ module MasterDenominationKeyRevocation = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterSigningKeyRevocation = struct
|
module MasterSigningKeyRevocation = struct
|
||||||
|
|
@ -367,8 +372,7 @@ module MasterSigningKeyRevocation = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterAddAuditor = struct
|
module MasterAddAuditor = struct
|
||||||
|
|
@ -392,8 +396,7 @@ module MasterAddAuditor = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterDelAuditor = struct
|
module MasterDelAuditor = struct
|
||||||
|
|
@ -414,8 +417,7 @@ module MasterDelAuditor = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module GlobalFees = struct
|
module GlobalFees = struct
|
||||||
|
|
@ -470,8 +472,7 @@ module GlobalFees = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterWireDetails = struct
|
module MasterWireDetails = struct
|
||||||
|
|
@ -509,8 +510,7 @@ module MasterWireDetails = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterAddWire = struct
|
module MasterAddWire = struct
|
||||||
|
|
@ -552,8 +552,7 @@ module MasterAddWire = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterDelWire = struct
|
module MasterDelWire = struct
|
||||||
|
|
@ -574,8 +573,7 @@ module MasterDelWire = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterDrainProfit = struct
|
module MasterDrainProfit = struct
|
||||||
|
|
@ -603,8 +601,7 @@ module MasterDrainProfit = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module MasterAmlOfficerStatus = struct
|
module MasterAmlOfficerStatus = struct
|
||||||
|
|
@ -630,8 +627,7 @@ module MasterAmlOfficerStatus = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module PartnerConfiguration = struct
|
module PartnerConfiguration = struct
|
||||||
|
|
@ -670,8 +666,7 @@ module PartnerConfiguration = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module WadPartnerSignature = struct
|
module WadPartnerSignature = struct
|
||||||
|
|
@ -718,7 +713,6 @@ module WadPartnerSignature = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
|
||||||
include MK (R)
|
include MK (R)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -748,8 +742,7 @@ module MasterWireFee = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
include MK_master_sig (R)
|
||||||
include MK (R)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module ExchangeKeyValidity = struct
|
module ExchangeKeyValidity = struct
|
||||||
|
|
@ -815,7 +808,6 @@ module ExchangeKeyValidity = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
|
||||||
include MK (R)
|
include MK (R)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -838,7 +830,6 @@ module ExchangeKeySet = struct
|
||||||
|> sealr
|
|> sealr
|
||||||
end
|
end
|
||||||
|
|
||||||
include R
|
|
||||||
include MK (R)
|
include MK (R)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,19 @@
|
||||||
open Syntax
|
open Syntax
|
||||||
|
open Crypto
|
||||||
open Hash
|
open Hash
|
||||||
|
|
||||||
module Future_keys = struct
|
module Future_keys = struct
|
||||||
open Crypto
|
|
||||||
open Api
|
open Api
|
||||||
|
|
||||||
let verify =
|
let verify offline_master_public_key
|
||||||
|
FutureKeysResponse.
|
||||||
|
{
|
||||||
|
future_denoms;
|
||||||
|
future_signkeys;
|
||||||
|
master_pub;
|
||||||
|
denom_secmod_public_key;
|
||||||
|
signkey_secmod_public_key;
|
||||||
|
} =
|
||||||
let verify_future_denom ~sm_denom_pub
|
let verify_future_denom ~sm_denom_pub
|
||||||
FutureDenom.
|
FutureDenom.
|
||||||
{
|
{
|
||||||
|
|
@ -44,18 +52,8 @@ module Future_keys = struct
|
||||||
verify sm_signkey_pub signkey_secmod_sig
|
verify sm_signkey_pub signkey_secmod_sig
|
||||||
{ exchange_pub; anchor_time; duration }
|
{ exchange_pub; anchor_time; duration }
|
||||||
in
|
in
|
||||||
fun our_master_public_key
|
|
||||||
FutureKeysResponse.
|
|
||||||
{
|
|
||||||
future_denoms;
|
|
||||||
future_signkeys;
|
|
||||||
master_pub;
|
|
||||||
denom_secmod_public_key;
|
|
||||||
signkey_secmod_public_key;
|
|
||||||
}
|
|
||||||
->
|
|
||||||
let* () =
|
let* () =
|
||||||
match master_pub = our_master_public_key with
|
match master_pub = offline_master_public_key with
|
||||||
| false ->
|
| false ->
|
||||||
Fmt.error
|
Fmt.error
|
||||||
"master public key of the future key response does not match ours"
|
"master public key of the future key response does not match ours"
|
||||||
|
|
@ -73,8 +71,16 @@ module Future_keys = struct
|
||||||
in
|
in
|
||||||
Ok ()
|
Ok ()
|
||||||
|
|
||||||
let make =
|
let make ~master_key
|
||||||
let denom_signature ~master_key
|
FutureKeysResponse.
|
||||||
|
{
|
||||||
|
future_denoms;
|
||||||
|
future_signkeys;
|
||||||
|
master_pub= _;
|
||||||
|
denom_secmod_public_key= _;
|
||||||
|
signkey_secmod_public_key= _;
|
||||||
|
} =
|
||||||
|
let denom_signature
|
||||||
FutureDenom.
|
FutureDenom.
|
||||||
{
|
{
|
||||||
section_name= _;
|
section_name= _;
|
||||||
|
|
@ -113,7 +119,7 @@ module Future_keys = struct
|
||||||
in
|
in
|
||||||
DenomSignature.{ h_denom_pub; master_sig }
|
DenomSignature.{ h_denom_pub; master_sig }
|
||||||
in
|
in
|
||||||
let signkey_signature ~master_key
|
let signkey_signature
|
||||||
FutureSignKey.
|
FutureSignKey.
|
||||||
{ key; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig= _ } =
|
{ key; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig= _ } =
|
||||||
let master_sig =
|
let master_sig =
|
||||||
|
|
@ -129,20 +135,8 @@ module Future_keys = struct
|
||||||
in
|
in
|
||||||
SignKeySignature.{ key; master_sig }
|
SignKeySignature.{ key; master_sig }
|
||||||
in
|
in
|
||||||
fun ~master_key
|
let denom_sigs = List.map denom_signature future_denoms in
|
||||||
FutureKeysResponse.
|
let signkey_sigs = List.map signkey_signature future_signkeys in
|
||||||
{
|
|
||||||
future_denoms;
|
|
||||||
future_signkeys;
|
|
||||||
master_pub= _;
|
|
||||||
denom_secmod_public_key= _;
|
|
||||||
signkey_secmod_public_key= _;
|
|
||||||
}
|
|
||||||
->
|
|
||||||
let denom_sigs = List.map (denom_signature ~master_key) future_denoms in
|
|
||||||
let signkey_sigs =
|
|
||||||
List.map (signkey_signature ~master_key) future_signkeys
|
|
||||||
in
|
|
||||||
MasterSignatures.{ denom_sigs; signkey_sigs }
|
MasterSignatures.{ denom_sigs; signkey_sigs }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -155,7 +149,7 @@ let write_file fname content =
|
||||||
|
|
||||||
let read_master_key_file filename =
|
let read_master_key_file filename =
|
||||||
let* master_key = read_file filename in
|
let* master_key = read_file filename in
|
||||||
Crypto.EddsaPrivateKey.of_octets master_key
|
EddsaPrivateKey.of_octets master_key
|
||||||
|
|
||||||
let download ~output ~url =
|
let download ~output ~url =
|
||||||
let open Bos in
|
let open Bos in
|
||||||
|
|
@ -197,7 +191,6 @@ let setup ~output ~output_pubkey =
|
||||||
Ok ()
|
Ok ()
|
||||||
|
|
||||||
let sign ~master_key ~input ~output =
|
let sign ~master_key ~input ~output =
|
||||||
let open Crypto in
|
|
||||||
let* master_key = read_master_key_file master_key in
|
let* master_key = read_master_key_file master_key in
|
||||||
let* input = read_file input in
|
let* input = read_file input in
|
||||||
let master_pub = EddsaPrivateKey.pub_of_priv master_key in
|
let master_pub = EddsaPrivateKey.pub_of_priv master_key in
|
||||||
|
|
@ -214,7 +207,7 @@ let revoke_denom ~output ~master_key ~h_denom =
|
||||||
let denom_revoke =
|
let denom_revoke =
|
||||||
let master_sig =
|
let master_sig =
|
||||||
let open Signatures.MasterDenominationKeyRevocation in
|
let open Signatures.MasterDenominationKeyRevocation in
|
||||||
signf (Crypto.EddsaSignature.sign ~key) { h_denom_pub }
|
signf (EddsaSignature.sign ~key) { h_denom_pub }
|
||||||
in
|
in
|
||||||
Api.DenomRevocationSignature.{ master_sig }
|
Api.DenomRevocationSignature.{ master_sig }
|
||||||
in
|
in
|
||||||
|
|
@ -227,7 +220,7 @@ let revoke_signkey ~output ~master_key ~signkey =
|
||||||
let signkey_revoke =
|
let signkey_revoke =
|
||||||
let master_sig =
|
let master_sig =
|
||||||
let open Signatures.MasterSigningKeyRevocation in
|
let open Signatures.MasterSigningKeyRevocation in
|
||||||
signf (Crypto.EddsaSignature.sign ~key) { exchange_pub= signkey }
|
signf (EddsaSignature.sign ~key) { exchange_pub= signkey }
|
||||||
in
|
in
|
||||||
Api.SignkeyRevocationSignature.{ master_sig }
|
Api.SignkeyRevocationSignature.{ master_sig }
|
||||||
in
|
in
|
||||||
|
|
@ -238,7 +231,6 @@ let revoke_signkey ~output ~master_key ~signkey =
|
||||||
let global_fees ~output ~master_key ~start_date ~end_date ~history_fee
|
let global_fees ~output ~master_key ~start_date ~end_date ~history_fee
|
||||||
~account_fee ~purse_fee ~history_expiration ~purse_account_limit
|
~account_fee ~purse_fee ~history_expiration ~purse_account_limit
|
||||||
~purse_timeout =
|
~purse_timeout =
|
||||||
let open Crypto in
|
|
||||||
let* key = read_master_key_file master_key in
|
let* key = read_master_key_file master_key in
|
||||||
let* purse_account_limit =
|
let* purse_account_limit =
|
||||||
match
|
match
|
||||||
|
|
@ -282,7 +274,6 @@ let global_fees ~output ~master_key ~start_date ~end_date ~history_fee
|
||||||
|
|
||||||
let enable_auditor ~output ~master_key ~auditor_url ~auditor_name ~auditor_pub
|
let enable_auditor ~output ~master_key ~auditor_url ~auditor_name ~auditor_pub
|
||||||
~validity_start =
|
~validity_start =
|
||||||
let open Crypto in
|
|
||||||
let* key = read_master_key_file master_key in
|
let* key = read_master_key_file master_key in
|
||||||
let master_sig =
|
let master_sig =
|
||||||
let open Signatures.MasterAddAuditor in
|
let open Signatures.MasterAddAuditor in
|
||||||
|
|
@ -302,7 +293,6 @@ let enable_auditor ~output ~master_key ~auditor_url ~auditor_name ~auditor_pub
|
||||||
Ok ()
|
Ok ()
|
||||||
|
|
||||||
let disable_auditor ~output ~master_key ~auditor_pub ~validity_end =
|
let disable_auditor ~output ~master_key ~auditor_pub ~validity_end =
|
||||||
let open Crypto in
|
|
||||||
let* key = read_master_key_file master_key in
|
let* key = read_master_key_file master_key in
|
||||||
let master_sig =
|
let master_sig =
|
||||||
let open Signatures.MasterDelAuditor in
|
let open Signatures.MasterDelAuditor in
|
||||||
|
|
@ -315,7 +305,6 @@ let disable_auditor ~output ~master_key ~auditor_pub ~validity_end =
|
||||||
|
|
||||||
let wire_fee ~output ~master_key ~wire_method ~fee_start ~fee_end ~closing_fee
|
let wire_fee ~output ~master_key ~wire_method ~fee_start ~fee_end ~closing_fee
|
||||||
~wire_fee =
|
~wire_fee =
|
||||||
let open Crypto in
|
|
||||||
let* key = read_master_key_file master_key in
|
let* key = read_master_key_file master_key in
|
||||||
let master_sig_wire =
|
let master_sig_wire =
|
||||||
let open Signatures.MasterWireFee in
|
let open Signatures.MasterWireFee in
|
||||||
|
|
@ -345,7 +334,6 @@ let wire_fee ~output ~master_key ~wire_method ~fee_start ~fee_end ~closing_fee
|
||||||
|
|
||||||
let drain ~output ~master_key ~debit_account_section ~credit_payto_uri ~wtid
|
let drain ~output ~master_key ~debit_account_section ~credit_payto_uri ~wtid
|
||||||
~date ~amount =
|
~date ~amount =
|
||||||
let open Crypto in
|
|
||||||
let* key = read_master_key_file master_key in
|
let* key = read_master_key_file master_key in
|
||||||
let master_sig =
|
let master_sig =
|
||||||
let open Signatures.MasterDrainProfit in
|
let open Signatures.MasterDrainProfit in
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue