This commit is contained in:
parent
8676631f99
commit
d9351c11a1
1 changed files with 17 additions and 292 deletions
309
src/config.ml
309
src/config.ml
|
|
@ -25,16 +25,12 @@ type payto_uri = string
|
||||||
some maybe are relevant
|
some maybe are relevant
|
||||||
idk *)
|
idk *)
|
||||||
type not_relevant
|
type not_relevant
|
||||||
type not_implemented
|
|
||||||
type url = string
|
type url = string
|
||||||
type seconds = int
|
type seconds = int
|
||||||
|
|
||||||
(* not relevant for mirage *)
|
(* not relevant for mirage *)
|
||||||
(*
|
(* this contains path that can be referenced in other with $PATH
|
||||||
The “[PATHS]” section is special in that it contains paths that can be
|
(unsupported) *)
|
||||||
referenced using “$” in other configuration values that specify
|
|
||||||
filenames. For Taler exchange, it commonly contains the following paths:
|
|
||||||
*)
|
|
||||||
module type Global = sig
|
module type Global = sig
|
||||||
val taler_home : dir_path
|
val taler_home : dir_path
|
||||||
val taler_data_home : dir_path
|
val taler_data_home : dir_path
|
||||||
|
|
@ -47,256 +43,57 @@ end
|
||||||
see DD51 *)
|
see DD51 *)
|
||||||
module type Currency = sig
|
module type Currency = sig
|
||||||
val enabled : [ `YES | `NO ]
|
val enabled : [ `YES | `NO ]
|
||||||
|
|
||||||
(* at most 11 characters, only A-Z *)
|
|
||||||
val code : string
|
val code : string
|
||||||
|
|
||||||
(* official name in English *)
|
|
||||||
val name : string
|
val name : string
|
||||||
val fractional_input_digits : int
|
val fractional_input_digits : int
|
||||||
val fractional_normal_digits : int
|
val fractional_normal_digits : int
|
||||||
val fractional_trailing_zero_digits : int
|
val fractional_trailing_zero_digits : int
|
||||||
|
|
||||||
(*
|
|
||||||
JSON map determining how to encode very large or very tiny
|
|
||||||
amounts in this currency. Maps a base10 logarithm to the
|
|
||||||
respective currency symbol. Must include at least an
|
|
||||||
entry for 0 (currency unit). For example, use
|
|
||||||
{"0":"€"} for Euros or {"0":"$"} for Dollars. You could
|
|
||||||
additionally use {"0":"€","3":"k€"} to render 3000 EUR
|
|
||||||
as 3k€. For BTC a typical map would be
|
|
||||||
{"0":"BTC","-3":"mBTC"}, informing the UI to render small
|
|
||||||
amounts in milli-Bitcoin (mBTC). *)
|
|
||||||
val alt_unit_names : (int * string) list
|
val alt_unit_names : (int * string) list
|
||||||
end
|
end
|
||||||
|
|
||||||
(* section "[exchange]" *)
|
(* section "[exchange]" *)
|
||||||
module type Exchange = sig
|
module type Exchange = sig
|
||||||
(*
|
|
||||||
Name of the currency, e.g. “EUR” for Euro. *)
|
|
||||||
val currency : string
|
val currency : string
|
||||||
|
|
||||||
(*
|
|
||||||
Smallest amount in this currency that can be transferred using the
|
|
||||||
underlying RTGS. For example: "EUR:0.01" or "JPY:1". *)
|
|
||||||
val currency_round_unit : amount
|
val currency_round_unit : amount
|
||||||
|
|
||||||
(*
|
|
||||||
Plugin to use for the database, e.g. “postgres”. *)
|
|
||||||
val db : string
|
val db : string
|
||||||
|
|
||||||
(*
|
|
||||||
Attribute encryption key for storing attributes encrypted
|
|
||||||
in the database. Should be a high-entropy nonce. *)
|
|
||||||
val attribute_encryption_key : string
|
val attribute_encryption_key : string
|
||||||
|
|
||||||
(*
|
|
||||||
Should the HTTP server listen on a UNIX domain socket (set option to "unix"), or on a TCP socket (set option to "tcp"), or be activated via systemd (set option to "systemd"). *)
|
|
||||||
val serve : [ `Unix | `Tcp | `Systemd ]
|
val serve : [ `Unix | `Tcp | `Systemd ]
|
||||||
|
|
||||||
(*
|
|
||||||
Path to listen on if we "SERVE" is set to "unix". *)
|
|
||||||
val unixpath : file_path
|
val unixpath : file_path
|
||||||
|
|
||||||
(*
|
|
||||||
Access permission mask to use for the "UNIXPATH". *)
|
|
||||||
val unixpath_mode : int
|
val unixpath_mode : int
|
||||||
|
|
||||||
(*
|
|
||||||
Port on which the HTTP server listens, e.g. 8080. *)
|
|
||||||
val port : int
|
val port : int
|
||||||
|
|
||||||
(*
|
|
||||||
Hostname to which the exchange HTTP server should be bound to, e.g. "localhost". *)
|
|
||||||
val bind_to : string
|
val bind_to : string
|
||||||
|
|
||||||
(*
|
|
||||||
Crockford Base32-encoded master public key, public version of the
|
|
||||||
exchange's long-time offline signing key. This configuration option
|
|
||||||
is also used by the **auditor** to determine the public key of the
|
|
||||||
exchange which it is auditing. *)
|
|
||||||
val master_public_key : string
|
val master_public_key : string
|
||||||
|
|
||||||
(*
|
|
||||||
Small amount that can be transferred to the exchange for the
|
|
||||||
KYC authentication wire transfers. Should be given as a hint
|
|
||||||
for merchants what amount they need to transfer to begin the
|
|
||||||
KYC transfer. Note that the amount is not enforced by the
|
|
||||||
exchange *and* that this option is optional. However, if it is
|
|
||||||
not given, merchants will have to guess what amount to transfer,
|
|
||||||
so it really should be configured. *)
|
|
||||||
val tiny_amount : amount option
|
val tiny_amount : amount option
|
||||||
|
|
||||||
(*
|
|
||||||
Web URL where users can discover shops that accept digital cash
|
|
||||||
offered by this exchange. Optional, but highly recommended. *)
|
|
||||||
val shopping_url : url option
|
val shopping_url : url option
|
||||||
|
|
||||||
(*
|
|
||||||
URL where wallets can find an open banking gateway to
|
|
||||||
initiate wire transfers when withdrawing digital cash
|
|
||||||
from this exchange. Optional (as obviously not every
|
|
||||||
exchange will have an open banking gateway attached). *)
|
|
||||||
val open_banking_gateway_url : url option
|
val open_banking_gateway_url : url option
|
||||||
|
|
||||||
(*
|
|
||||||
Determines the variant of the AML SPA that should be shown. This
|
|
||||||
will determine the set of forms shown to AML staff, statistics to
|
|
||||||
be displayed on the main page, and influence the default set of
|
|
||||||
properties/events the AML forms show when AML staff makes decisions.
|
|
||||||
Possible values for now include "gls", "tops" and "magnet".
|
|
||||||
Optional. The AML SPA will only show certain default forms and
|
|
||||||
generic decisions if this option is not set. *)
|
|
||||||
val aml_spa_dialect : string option
|
val aml_spa_dialect : string option
|
||||||
|
|
||||||
(*
|
|
||||||
Determines the legal language (and possibly other UI/UX aspects)
|
|
||||||
wallets should use when providing the user interface for this bank.
|
|
||||||
Allows banks to communicate the desired compliance language they
|
|
||||||
want to see used to the wallet. Wallets SHOULD follow the guidance
|
|
||||||
provided by the bank, but some wallets MAY not understand all compliance
|
|
||||||
languages. Optional, if not set wallets will use their default UI/UX. *)
|
|
||||||
val bank_compliance_language : string option
|
val bank_compliance_language : string option
|
||||||
|
|
||||||
(*
|
|
||||||
Absolute amount to add as an offset in the STEFAN fee approximation
|
|
||||||
curve (see DD47). Defaults to CURRENCY:0 if not specified. *)
|
|
||||||
val stefan_abs : amount
|
val stefan_abs : amount
|
||||||
|
|
||||||
(*
|
|
||||||
Amount to multiply by the base-2 logarithm of the total amount
|
|
||||||
divided by the amount of the smallest denomination
|
|
||||||
in the STEFAN fee approximation curve (see DD47).
|
|
||||||
Defaults to CURRENCY:0 if not specified. *)
|
|
||||||
val stefan_log : amount
|
val stefan_log : amount
|
||||||
|
|
||||||
(*
|
|
||||||
Linear floating point factor to be multiplied by the total amount
|
|
||||||
to use in the STEFAN fee approximation curve (see DD47).
|
|
||||||
Defaults to 0.0 if not specified. *)
|
|
||||||
val stefan_lin : float
|
val stefan_lin : float
|
||||||
|
|
||||||
(*
|
|
||||||
The base URL under which the exchange can be reached.
|
|
||||||
Added to wire transfers to enable tracking by merchants.
|
|
||||||
Used by the KYC logic when interacting with OAuth 2.0. *)
|
|
||||||
val base_url : url
|
val base_url : url
|
||||||
|
|
||||||
(*
|
|
||||||
Where to redirect visitors that access the top-level
|
|
||||||
"/" endpoint of the exchange. Should point users to
|
|
||||||
information about the exchange operator.
|
|
||||||
Optional setting, defaults to "/terms". *)
|
|
||||||
val toplevel_redirect_url : string option
|
val toplevel_redirect_url : string option
|
||||||
|
|
||||||
(*
|
|
||||||
For how long should the taler-exchange-aggregator sleep when it is idle
|
|
||||||
before trying to look for more work? Default is 60 seconds. *)
|
|
||||||
val aggregator_idle_sleep_interval : seconds
|
val aggregator_idle_sleep_interval : seconds
|
||||||
|
|
||||||
(*
|
|
||||||
For how long should the taler-exchange-closer sleep when it is idle
|
|
||||||
before trying to look for more work? Default is 60 seconds. *)
|
|
||||||
val closer_idle_sleep_interval : seconds
|
val closer_idle_sleep_interval : seconds
|
||||||
|
|
||||||
(*
|
|
||||||
For how long should the taler-exchange-transfer sleep when it is idle
|
|
||||||
before trying to look for more work? Default is 60 seconds. *)
|
|
||||||
val transfer_idle_sleep_interval : seconds
|
val transfer_idle_sleep_interval : seconds
|
||||||
|
|
||||||
(*
|
|
||||||
For how long should the taler-exchange-wirewatch sleep when it is idle
|
|
||||||
before trying to look for more work? Default is 60 seconds. *)
|
|
||||||
val wirewatch_idle_sleep_interval : seconds
|
val wirewatch_idle_sleep_interval : seconds
|
||||||
|
|
||||||
(*
|
|
||||||
Which share of the range from [0,..2147483648] should be processed by one of the shards of the aggregator. Useful only for Taler exchanges with ultra high-performance needs. When changing this value, you must stop all aggregators and run "taler-exchange-dbinit -s" before resuming. Default is 2147483648 (no sharding). *)
|
|
||||||
val aggregator_shard_size : int option
|
val aggregator_shard_size : int option
|
||||||
|
|
||||||
(*
|
|
||||||
For how long are signatures with signing keys legally valid? *)
|
|
||||||
val signkey_legal_duration : duration
|
val signkey_legal_duration : duration
|
||||||
|
|
||||||
(*
|
|
||||||
For how long should clients cache ``/keys`` responses at most? *)
|
|
||||||
val max_keys_caching : duration
|
val max_keys_caching : duration
|
||||||
|
|
||||||
(*
|
|
||||||
How many requests should the HTTP server process at most before committing suicide? *)
|
|
||||||
val max_requests : int
|
val max_requests : int
|
||||||
|
|
||||||
(*
|
|
||||||
Directory where the terms of service of the exchange operator can be fund.
|
|
||||||
The directory must contain sub-directories for every supported language,
|
|
||||||
using the two-character language code in lower case, e.g. "en/" or "fr/".
|
|
||||||
Each subdirectory must then contain files with the terms of service in
|
|
||||||
various formats. The basename of the file of the current policy must be
|
|
||||||
specified under ``TERMS_ETAG``. The extension defines the mime type.
|
|
||||||
Supported extensions include "html", "htm", "txt", "pdf", "jpg", "jpeg",
|
|
||||||
"png" and "gif". For example, using a ``TERMS_ETAG`` of "0", the structure
|
|
||||||
could be the following:
|
|
||||||
|
|
||||||
- $TERMS_DIR/en/0.pdf
|
|
||||||
- $TERMS_DIR/en/0.html
|
|
||||||
- $TERMS_DIR/en/0.txt
|
|
||||||
- $TERMS_DIR/fr/0.pdf
|
|
||||||
- $TERMS_DIR/fr/0.html
|
|
||||||
- $TERMS_DIR/de/0.txt *)
|
|
||||||
val terms_dir : dir_path
|
val terms_dir : dir_path
|
||||||
|
|
||||||
(*
|
|
||||||
Basename of the file(s) in the ``TERMS_DIR`` with the current terms of service.
|
|
||||||
The value is also used for the "Etag" in the HTTP request to control
|
|
||||||
caching. Whenever the terms of service change, the ``TERMS_ETAG`` MUST also
|
|
||||||
change, and old values MUST NOT be repeated. For example, the date or
|
|
||||||
version number of the terms of service SHOULD be used for the Etag. If
|
|
||||||
there are minor (e.g. spelling) fixes to the terms of service, the
|
|
||||||
``TERMS_ETAG`` probably SHOULD NOT be changed. However, whenever users must
|
|
||||||
approve the new terms, the ``TERMS_ETAG`` MUST change. *)
|
|
||||||
val terms_etag : string
|
val terms_etag : string
|
||||||
|
|
||||||
(*
|
|
||||||
Works the same as ``TERMS_DIR``, just for the privacy policy. *)
|
|
||||||
val privacy_dir : dir_path
|
val privacy_dir : dir_path
|
||||||
|
|
||||||
(*
|
|
||||||
Works the same as ``TERMS_ETAG``, just for the privacy policy. *)
|
|
||||||
val privacy_etag : string
|
val privacy_etag : string
|
||||||
|
|
||||||
(*
|
|
||||||
Must be set to ``YES`` to enable AML/KYC rule enforcement. Note that the administrative endpoints will always work, even if the flag is set to ``NO``. *)
|
|
||||||
val enable_kyc : [ `YES | `NO ]
|
val enable_kyc : [ `YES | `NO ]
|
||||||
end
|
end
|
||||||
|
|
||||||
(* section "[taler-exchange-secmod-{rsa|cs|eddsa}]". *)
|
(* section "[taler-exchange-secmod-{rsa|cs|eddsa}]". *)
|
||||||
module type Secmod = sig
|
module type Secmod = sig
|
||||||
(*
|
|
||||||
How long do we generate denomination and signing keys ahead of time?
|
|
||||||
*)
|
|
||||||
val lookahead_sign : duration
|
val lookahead_sign : duration
|
||||||
|
|
||||||
(*
|
|
||||||
How much should validity periods for coins overlap?
|
|
||||||
Should be long enough to avoid problems with
|
|
||||||
wallets picking one key and then due to network latency
|
|
||||||
another key being valid. The ``DURATION_WITHDRAW`` period
|
|
||||||
must be longer than this value.
|
|
||||||
*)
|
|
||||||
val overlap_duration : duration
|
val overlap_duration : duration
|
||||||
|
|
||||||
(*
|
|
||||||
Where should the security module store its long-term private key?
|
|
||||||
*)
|
|
||||||
val sm_priv_key : file_path
|
val sm_priv_key : file_path
|
||||||
|
|
||||||
(*
|
|
||||||
Where should the security module store the private keys it manages?
|
|
||||||
*)
|
|
||||||
val key_dir : dir_path
|
val key_dir : dir_path
|
||||||
|
|
||||||
(*
|
|
||||||
On which path should the security module listen for signing requests?
|
|
||||||
*)
|
|
||||||
val unixpath : not_relevant
|
val unixpath : not_relevant
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -304,55 +101,23 @@ module type Secmod_rsa = Secmod
|
||||||
module type Secmod_cs = Secmod
|
module type Secmod_cs = Secmod
|
||||||
module type Secmod_eddsa = Secmod
|
module type Secmod_eddsa = Secmod
|
||||||
|
|
||||||
|
(* TODO config
|
||||||
|
what is the time/duration unit used here? *)
|
||||||
(* section "[exchangedb]". *)
|
(* section "[exchangedb]". *)
|
||||||
module type Database = sig
|
module type Database = sig
|
||||||
(* TODO not sure about what unit of time/duration is used in here *)
|
|
||||||
|
|
||||||
(*
|
|
||||||
After which time period should reserves be closed if they are idle? *)
|
|
||||||
val idle_reserve_expiration_time : seconds
|
val idle_reserve_expiration_time : seconds
|
||||||
|
|
||||||
(*
|
|
||||||
After what time do we forget about (drained) reserves during garbage collection? *)
|
|
||||||
val legal_reserve_expiration_time : seconds
|
val legal_reserve_expiration_time : seconds
|
||||||
|
|
||||||
(*
|
|
||||||
Delay between a deposit being eligible for aggregation and
|
|
||||||
the aggregator actually triggering. *)
|
|
||||||
val aggregator_shift : seconds
|
val aggregator_shift : seconds
|
||||||
|
|
||||||
(*
|
|
||||||
Number of concurrent purses that a reserve may have active
|
|
||||||
if it is paid to be opened for a year. *)
|
|
||||||
val default_purse_limit : int
|
val default_purse_limit : int
|
||||||
|
|
||||||
(*
|
|
||||||
Maximum time an AML program is allowed to run.
|
|
||||||
(Optional for taler-auditor.) *)
|
|
||||||
val max_aml_program_runtime : int option
|
val max_aml_program_runtime : int option
|
||||||
|
|
||||||
(*
|
|
||||||
The following options must be in section “[exchangedb-postgres]” if the
|
|
||||||
“postgres” plugin was selected for the database. *)
|
|
||||||
module type Postgres_backend = sig
|
module type Postgres_backend = sig
|
||||||
(*
|
|
||||||
How to access the database, e.g. “postgres:///taler-exchange” to use the
|
|
||||||
“taler-exchange” database. Testcases use “talercheck”. *)
|
|
||||||
val config : string
|
val config : string
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
(*
|
(* sections "[coin_XXX]"
|
||||||
The following options must be in sections starting with ``"[coin_]"`` and are
|
used by secmods *)
|
||||||
largely used by **taler-exchange-httpd** to determine the meta data for the
|
|
||||||
denomination keys. Some of the options are used by the
|
|
||||||
**taler-exchange-secmod-rsa** to determine which RSA keys to create (and of
|
|
||||||
what key length). Note that the section names must match, so this part of the
|
|
||||||
configuration MUST be shared between the RSA helper and the exchange.
|
|
||||||
Configuration values MUST NOT be changed in a running setup. Instead, if
|
|
||||||
parameters for a denomination type are to change, a fresh *section name* should
|
|
||||||
be introduced (and the existing section should be deleted).
|
|
||||||
*)
|
|
||||||
module type Coin = sig
|
module type Coin = sig
|
||||||
val value : amount
|
val value : amount
|
||||||
val duration_withdraw : duration
|
val duration_withdraw : duration
|
||||||
|
|
@ -362,35 +127,24 @@ module type Coin = sig
|
||||||
val fee_deposit : amount
|
val fee_deposit : amount
|
||||||
val fee_refresh : amount
|
val fee_refresh : amount
|
||||||
val fee_refund : amount
|
val fee_refund : amount
|
||||||
|
|
||||||
(*
|
|
||||||
What cryptosystem should be used? Must be set to either "CS" or "RSA".
|
|
||||||
The respective crypto-helper will then generate the keys for this
|
|
||||||
denomination. *)
|
|
||||||
val cipher : [ `CS | `RSA ]
|
val cipher : [ `CS | `RSA ]
|
||||||
|
val rsa_keysize : int option (*only if `RSA *)
|
||||||
(*What is the RSA keysize modulos (in bits)? Only used if "CIPHER=RSA".*)
|
|
||||||
val rsa_keysize : int
|
|
||||||
|
|
||||||
(*
|
|
||||||
For this option to be accepted the extension for age
|
|
||||||
restriction MUST be enabled. *)
|
|
||||||
val age_restricted : [ (*`YES|*) `NO ]
|
val age_restricted : [ (*`YES|*) `NO ]
|
||||||
end
|
end
|
||||||
|
|
||||||
(*
|
(* sections "[exchange-account-XXX]" *)
|
||||||
An exchange (or merchant) can have multiple bank accounts. The following
|
|
||||||
options are for sections named “[exchange-account-SOMETHING]”. The ``SOMETHING`` is
|
|
||||||
arbitrary and should be chosen to uniquely identify the bank account for
|
|
||||||
the operator. These options are used by the **taler-exchange-aggregator**, **taler-exchange-closer**, **taler-exchange-transfer** and **taler-exchange-wirewatch** tools. *)
|
|
||||||
module type Account = sig
|
module type Account = sig
|
||||||
val payto_uri : payto_uri
|
val payto_uri : payto_uri
|
||||||
val enable_debit : [ `YES | `NO ]
|
val enable_debit : [ `YES | `NO ]
|
||||||
val enable_credit : [ `YES | `NO ]
|
val enable_credit : [ `YES | `NO ]
|
||||||
end
|
end
|
||||||
|
|
||||||
(*
|
(* sections "[exchange-accountcredentials-XXX]"
|
||||||
Additionally, for each enabled account there MUST be another matching section named “[exchange-accountcredentials-SOMETHING]”. This section SHOULD be in a ``secret/`` configuration file that is only readable for the **taler-exchange-wirewatch** and **taler-exchange-transfer** processes. It contains the credentials to access the bank account: *)
|
must exists for each "[exchange-account-XXX]" section
|
||||||
|
|
||||||
|
! credentials to access the bank account
|
||||||
|
should be in a secret configuration file
|
||||||
|
only redable for `taler-exchange-wirewatch` `taler-exchange-transfer` processes *)
|
||||||
module type Account_secret = sig
|
module type Account_secret = sig
|
||||||
val wire_gateway_url : url
|
val wire_gateway_url : url
|
||||||
val wire_gateway_auth_method : string
|
val wire_gateway_auth_method : string
|
||||||
|
|
@ -399,49 +153,20 @@ module type Account_secret = sig
|
||||||
val token : string
|
val token : string
|
||||||
end
|
end
|
||||||
|
|
||||||
(*
|
(* section "[exchange-extension-<extensionname>]" *)
|
||||||
The functionality of the exchange can be extended by extensions. Those are
|
|
||||||
shared libraries which implement the extension-API of the exchange and are
|
|
||||||
located under ``$LIBDIR``, starting with prefix ``libtaler_extension_``. Each
|
|
||||||
extension can be enabled by adding a dedicated section
|
|
||||||
"[exchange-extension-<extensionname>]" and the following option:
|
|
||||||
*)
|
|
||||||
module type Extensions = sig
|
module type Extensions = sig
|
||||||
(*
|
|
||||||
If set to ``YES`` the extension ``<extensionsname>`` is enabled. Extension-specific
|
|
||||||
options might be set in the same section. *)
|
|
||||||
val enabled : [ (*`YES|*) `NO ]
|
val enabled : [ (*`YES|*) `NO ]
|
||||||
end
|
end
|
||||||
|
|
||||||
(* The following options must be in the section "[exchange-offline]". *)
|
(* section "[exchange-offline]". *)
|
||||||
module type Offline_signing = sig
|
module type Offline_signing = sig
|
||||||
(*
|
|
||||||
Location of the master private key on disk. Only used by tools that
|
|
||||||
can be run offline (as the master key is for offline signing).
|
|
||||||
Mandatory. *)
|
|
||||||
val master_priv_file : file_path
|
val master_priv_file : file_path
|
||||||
|
|
||||||
(* TODO
|
(* TODO
|
||||||
- we need two different file
|
- we need two different file here
|
||||||
- there is three, not two, crypto helper modules
|
- there is three, not two, crypto helper modules
|
||||||
is it only two, because the eddsa one is not comptabilized as a "crypto helper" here? *)
|
is it only two, because the eddsa one is not comptabilized as a "crypto helper" here? *)
|
||||||
(*
|
|
||||||
Where to store the public keys of both crypto helper modules.
|
|
||||||
Used to persist the keys after the first invocation of the tool,
|
|
||||||
so that if they ever change in the future, this is detected and
|
|
||||||
the tool can abort.
|
|
||||||
Mandatory. *)
|
|
||||||
val secm_tofu_file : file_path
|
val secm_tofu_file : file_path
|
||||||
|
|
||||||
(*
|
|
||||||
Public key of the (RSA) crypto helper module. Optional. If not given,
|
|
||||||
we will rely on TOFU. Note that once TOFU has been established,
|
|
||||||
this option will also be ignored. *)
|
|
||||||
val secm_denom_pubkey : string option
|
val secm_denom_pubkey : string option
|
||||||
|
|
||||||
(*
|
|
||||||
Public key of the (EdDSA) crypto helper module. Optional. If not given,
|
|
||||||
we will rely on TOFU. Note that once TOFU has been established,
|
|
||||||
this option will also be ignored. *)
|
|
||||||
val secm_esign_pubkey : string option
|
val secm_esign_pubkey : string option
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue