taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

taler-exchange.conf.5.rst (26514B)


      1 ..
      2   This file is part of GNU TALER.
      3   Copyright (C) 2014-2024 Taler Systems SA
      4 
      5   TALER is free software; you can redistribute it and/or modify it under the
      6   terms of the GNU Affero General Public License as published by the Free Software
      7   Foundation; either version 2.1, or (at your option) any later version.
      8 
      9   TALER is distributed in the hope that it will be useful, but WITHOUT ANY
     10   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
     11   A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details.
     12 
     13   You should have received a copy of the GNU Affero General Public License along with
     14   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
     15 
     16   @author Florian Dold
     17   @author Benedikt Muller
     18   @author Sree Harsha Totakura
     19   @author Marcello Stanisci
     20   @author Christian Grothoff
     21   @author Javier Sepulveda
     22 
     23 
     24 taler-exchange.conf(5)
     25 ######################
     26 
     27 .. only:: html
     28 
     29    Name
     30    ====
     31 
     32    **taler-exchange.conf** - Taler exchange configuration file
     33 
     34 
     35 Description
     36 ===========
     37 
     38 .. include:: ../frags/common-conf-syntax.rst
     39 
     40 Files containing default values for many of the options described below
     41 are installed under ``$TALER_EXCHANGE_PREFIX/share/taler-exchange/config.d/``.
     42 The configuration file given with **-c** to Taler binaries
     43 overrides these defaults.
     44 
     45 A configuration file may include another, by using the ``@INLINE@`` directive,
     46 for example, in ``main.conf``, you could write ``@INLINE@ sub.conf`` to
     47 include the entirety of ``sub.conf`` at that point in ``main.conf``.
     48 
     49 Be extra careful when using ``taler-exchange-config -V VALUE`` to change configuration
     50 values: it will destroy all uses of ``@INLINE@`` and furthermore remove all
     51 comments from the configuration file!
     52 
     53 
     54 GLOBAL OPTIONS
     55 --------------
     56 
     57 The “[PATHS]” section is special in that it contains paths that can be
     58 referenced using “$” in other configuration values that specify
     59 filenames. For Taler exchange, it commonly contains the following paths:
     60 
     61 TALER_HOME
     62   Home directory of the user, usually “${HOME}”. Can be overwritten by
     63   testcases by setting ${TALER_TEST_HOME}.
     64 
     65 TALER_DATA_HOME
     66   Where should Taler store its long-term data.
     67   Usually “${TALER_HOME}/.local/share/taler-exchange/”.
     68 
     69 TALER_CONFIG_HOME
     70   Where is the Taler configuration kept.
     71   Usually “${TALER_HOME}/.config/taler-exchange/”.
     72 
     73 TALER_CACHE_HOME
     74   Where should Taler store cached data.
     75   Usually “${TALER_HOME}/.cache/taler-exchange/”.
     76 
     77 TALER_RUNTIME_DIR
     78   Where should Taler store system runtime data (like UNIX domain
     79   sockets). Usually “${TMP}/taler-exchange-runtime”.
     80 
     81 
     82 .. include:: frags/currency-spec.rst
     83 
     84 EXCHANGE OPTIONS
     85 ----------------
     86 
     87 The following options are from the “[exchange]” section and used by most
     88 exchange tools.
     89 
     90 CURRENCY
     91   Name of the currency, e.g. “EUR” for Euro.
     92 
     93 CURRENCY_ROUND_UNIT
     94   Smallest amount in this currency that can be transferred using the
     95   underlying RTGS. For example: "EUR:0.01" or "JPY:1".
     96 
     97 DB
     98   Plugin to use for the database, e.g. “postgres”.
     99 
    100 ATTRIBUTE_ENCRYPTION_KEY
    101   Attribute encryption key for storing attributes encrypted
    102   in the database. Should be a high-entropy nonce.
    103 
    104 SERVE
    105   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").
    106 
    107 UNIXPATH
    108   Path to listen on if we "SERVE" is set to "unix".
    109 
    110 UNIXPATH_MODE
    111   Access permission mask to use for the "UNIXPATH".
    112 
    113 PORT
    114   Port on which the HTTP server listens, e.g. 8080.
    115 
    116 BIND_TO
    117   Hostname to which the exchange HTTP server should be bound to, e.g. "localhost".
    118 
    119 MASTER_PUBLIC_KEY
    120   Crockford Base32-encoded master public key, public version of the
    121   exchange's long-time offline signing key.  This configuration option
    122   is also used by the **auditor** to determine the public key of the
    123   exchange which it is auditing.
    124 
    125 TINY_AMOUNT
    126   Small amount that can be transferred to the exchange for the
    127   KYC authentication wire transfers. Must be given as a hint
    128   for merchants what amount they need to transfer to begin the
    129   KYC transfer.
    130 
    131 SHOPPING_URL
    132   Web URL where users can discover shops that accept digital cash
    133   offered by this exchange. Optional, but highly recommended.
    134 
    135 AML_SPA_DIALECT
    136   Determines the variant of the AML SPA that should be shown. This
    137   will determine the set of forms shown to AML staff, statistics to
    138   be displayed on the main page, and influence the default set of
    139   properties/events the AML forms show when AML staff makes decisions.
    140   Possible values for now include "gls", "tops" and "magnet".
    141   Optional. The AML SPA will only show certain default forms and
    142   generic decisions if this option is not set.
    143 
    144 GLOBAL_PDF_FORM_DATA
    145   Set to a JSON object that should be provided as additional input
    146   to the PDF form generation logic when generating AML records in
    147   PDF format. Useful to specify global attributes for the Typst forms.
    148   Optional, global PDF form data injection will simply be off if
    149   this option is not specified.
    150 
    151 BANK_COMPLIANCE_LANGUAGE
    152   Determines the legal language (and possibly other UI/UX aspects)
    153   wallets should use when providing the user interface for this bank.
    154   Allows banks to communicate the desired compliance language they
    155   want to see used to the wallet. Wallets SHOULD follow the guidance
    156   provided by the bank, but some wallets MAY not understand all compliance
    157   languages. Optional, if not set wallets will use their default UI/UX.
    158 
    159 STEFAN_ABS
    160   Absolute amount to add as an offset in the STEFAN fee approximation
    161   curve (see DD47).  Defaults to CURRENCY:0 if not specified.
    162 
    163 STEFAN_LOG
    164   Amount to multiply by the base-2 logarithm of the total amount
    165   divided by the amount of the smallest denomination
    166   in the STEFAN fee approximation curve (see DD47).
    167   Defaults to CURRENCY:0 if not specified.
    168 
    169 STEFAN_LIN
    170   Linear floating point factor to be multiplied by the total amount
    171   to use in the STEFAN fee approximation curve (see DD47).
    172   Defaults to 0.0 if not specified.
    173 
    174 BASE_URL
    175   The base URL under which the exchange can be reached.
    176   Added to wire transfers to enable tracking by merchants.
    177   Used by the KYC logic when interacting with OAuth 2.0.
    178 
    179 TOPLEVEL_REDIRECT_URL
    180   Where to redirect visitors that access the top-level
    181   "/" endpoint of the exchange. Should point users to
    182   information about the exchange operator.
    183   Optional setting, defaults to "/terms".
    184 
    185 AGGREGATOR_IDLE_SLEEP_INTERVAL
    186   For how long should the taler-exchange-aggregator sleep when it is idle
    187   before trying to look for more work? Default is 60 seconds.
    188 
    189 CLOSER_IDLE_SLEEP_INTERVAL
    190   For how long should the taler-exchange-closer sleep when it is idle
    191   before trying to look for more work? Default is 60 seconds.
    192 
    193 TRANSFER_IDLE_SLEEP_INTERVAL
    194   For how long should the taler-exchange-transfer sleep when it is idle
    195   before trying to look for more work? Default is 60 seconds.
    196 
    197 WIREWATCH_IDLE_SLEEP_INTERVAL
    198   For how long should the taler-exchange-wirewatch sleep when it is idle
    199   before trying to look for more work? Default is 60 seconds.
    200 
    201 AGGREGATOR_SHARD_SIZE
    202   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).
    203 
    204 SIGNKEY_LEGAL_DURATION
    205   For how long are signatures with signing keys legally valid?
    206 
    207 MAX_KEYS_CACHING
    208   For how long should clients cache ``/keys`` responses at most?
    209 
    210 MAX_REQUESTS
    211   How many requests should the HTTP server process at most before committing suicide?
    212 
    213 TERMS_DIR
    214   Directory where the terms of service of the exchange operator can be fund.
    215   The directory must contain sub-directories for every supported language,
    216   using the two-character language code in lower case, e.g. "en/" or "fr/".
    217   Each subdirectory must then contain files with the terms of service in
    218   various formats.  The basename of the file of the current policy must be
    219   specified under ``TERMS_ETAG``.  The extension defines the mime type.
    220   Supported extensions include "html", "htm", "txt", "pdf", "jpg", "jpeg",
    221   "png" and "gif".  For example, using a ``TERMS_ETAG`` of "0", the structure
    222   could be the following:
    223 
    224   - $TERMS_DIR/en/0.pdf
    225   - $TERMS_DIR/en/0.html
    226   - $TERMS_DIR/en/0.txt
    227   - $TERMS_DIR/fr/0.pdf
    228   - $TERMS_DIR/fr/0.html
    229   - $TERMS_DIR/de/0.txt
    230 
    231 TERMS_ETAG
    232   Basename of the file(s) in the ``TERMS_DIR`` with the current terms of service.
    233   The value is also used for the "Etag" in the HTTP request to control
    234   caching.  Whenever the terms of service change, the ``TERMS_ETAG`` MUST also
    235   change, and old values MUST NOT be repeated.  For example, the date or
    236   version number of the terms of service SHOULD be used for the Etag.  If
    237   there are minor (e.g. spelling) fixes to the terms of service, the
    238   ``TERMS_ETAG`` probably SHOULD NOT be changed. However, whenever users must
    239   approve the new terms, the ``TERMS_ETAG`` MUST change.
    240 
    241 PRIVACY_DIR
    242   Works the same as ``TERMS_DIR``, just for the privacy policy.
    243 
    244 PRIVACY_ETAG
    245   Works the same as ``TERMS_ETAG``, just for the privacy policy.
    246 
    247 ENABLE_KYC
    248   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``.
    249 
    250 KYC_SWAP_TOS_ACCEPTANCE
    251   Set to ``YES`` to signal to the merchant backend that it should
    252   swap the terms-of-service and KYC auth authentication steps in
    253   the user experience.  Optional, defaults to ``NO``.
    254 
    255 DISABLE_DIRECT_DEPOSIT
    256   Set to ``YES`` to indicate to wallets that deposits by non-merchants
    257   are not supported.  Defaults to ``NO``.
    258 
    259 
    260 EXCHANGE KYC PROVIDER OPTIONS
    261 -----------------------------
    262 
    263 The following options must be in the section "[kyc-provider-$PROVIDER_NAME]" sections.
    264 
    265 LOGIC
    266   API type of the KYC provider.
    267 
    268 Additional logic-specific options may be given in the
    269 section.
    270 
    271 
    272 EXCHANGE KYC OAUTH2 OPTIONS
    273 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    274 
    275 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = oauth2".
    276 
    277 
    278 KYC_OAUTH2_VALIDITY
    279   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    280 
    281 KYC_OAUTH2_AUTHORIZE_URL
    282   URL of the OAuth2 endpoint to be used for KYC checks. The authorize URL is where the exchange will redirect the client to begin the authorization process.  Example: "http://localhost:8888/oauth/v2/authorize". To use the plugin in combination with the Challenger service's ``/setup`` step, append "#setup", thus "https://challenger.example.com/authorize#setup".  Here, "#setup" is not a fragment but merely a hint to the logic to determine the full authorization URL via the ``/setup/$CLIENT_ID`` handler.
    283 
    284 KYC_OAUTH2_TOKEN_URL
    285   URL of the OAuth2 endpoint to be used for KYC checks. This is where the server will ultimately send the authorization token from the client and obtain its access token (which currently must be a "bearer" token). Example: "http://localhost:8888/oauth/v2/token" (or just "/token")
    286 
    287 KYC_OAUTH2_INFO_URL
    288   URL of the OAuth2-protected resource endpoint, where the OAuth 2.0 token can be used to download information about the user that has undergone the KYC process. The exchange will use the access token obtained from the KYC_AUTH2_AUTH_URL to show that it is authorized to obtain the details. Example: "http://localhost:8888/api/user/me" or "http://localhost:8888/oauth/v2/info"
    289 
    290 KYC_OAUTH2_CLIENT_ID
    291   Client ID of the exchange when it talks to the KYC OAuth2 endpoint.
    292 
    293 KYC_OAUTH2_CLIENT_SECRET
    294   Client secret of the exchange to use when talking to the KYC Oauth2 endpoint.
    295 
    296 KYC_OAUTH2_SCOPE
    297   Scope argument to pass in the Oauth2 /authorize request.
    298   Optional, if not given no scope will be provided.
    299 
    300 KYC_OAUTH2_POST_URL
    301   URL to which the exchange will redirect the client's browser after successful authorization/login for the KYC process. Example: "http://example.com/thank-you"
    302 
    303 KYC_OAUTH2_CONVERTER_HELPER
    304   Helper to convert JSON with KYC data returned by the OAuth2.0 info endpoint into GNU Taler internal format. Specific to the OAuth 2.0 provider.
    305 
    306 KYC_OAUTH2_DEBUG_MODE
    307   Set to YES to allow error responses to include potentially
    308   sensitive private information (such as full responses
    309   from the OAuth 2.0 server) that might aid in debugging
    310   problems.  Should be set to "NO" in production.
    311 
    312 
    313 EXCHANGE KYC KYCAID OPTIONS
    314 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    315 
    316 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = kycaid".
    317 
    318 
    319 KYC_KYCAID_VALIDITY
    320   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    321 
    322 KYC_KYCAID_AUTH_TOKEN
    323   Authentication token to access the KYC service.
    324 
    325 KYC_KYCAID_CONVERTER_HELPER
    326   Helper to convert JSON with KYC data returned by KYCAID into GNU Taler internal format. Should probably always be set to "taler-exchange-kyc-kycaid-converter.sh".
    327 
    328 KYC_KYCAID_FORM_ID
    329   ID that specifies the form to use for the KYC process.
    330 
    331 KYC_KYCAID_POST_URL
    332   URL to which the exchange will redirect the client's browser after successful authorization/login for the KYC process.
    333 
    334 
    335 EXCHANGE KYC PERSONA OPTIONS
    336 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    337 
    338 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = persona".
    339 
    340 
    341 KYC_PERSONA_VALIDITY
    342   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    343 
    344 KYC_PERSONA_AUTH_TOKEN
    345   Authentication token to access the KYC service.
    346 
    347 KYC_PERSONA_SALT
    348   Salt value to use for request idempotency. Optional, generated at random per process if not given.
    349 
    350 KYC_PERSONA_SUBDOMAIN
    351   Subdomain to use under Persona.
    352 
    353 KYC_PERSONA_CONVERTER_HELPER
    354   Helper to convert JSON with KYC data returned by Persona into GNU Taler internal format. Should probably always be set to "taler-exchange-kyc-persona-converter.sh".
    355 
    356 KYC_PERSONA_POST_URL
    357   URL to which the exchange will redirect the client's browser after successful authorization/login for the KYC process.
    358 
    359 KYC_PERSONA_TEMPLATE_ID
    360   ID of the Persona template to use.
    361 
    362 EXCHANGE KYC PERSONA GLOBAL OPTIONS
    363 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    364 
    365 The following option must be in the section "[kyclogic-persona]".
    366 
    367 
    368 WEBHOOK_AUTH_TOKEN
    369   Authentication token Persona must supply to our webhook. This is an optional setting.
    370 
    371 
    372 EXCHANGE KYC CHECK OPTIONS
    373 --------------------------
    374 
    375 The following options must be in "[kyc-check-$CHECK_NAME]" sections.
    376 
    377 TYPE
    378   Which type of check is this? Also determines
    379   the SPA form to show to the user for this check.
    380 
    381   * INFO: wait for staff or contact staff out-of band
    382     (only information shown, no SPA action)
    383   * FORM: SPA should show an inline (HTML) form
    384   * LINK: SPA may start external KYC process or upload
    385 
    386 PROVIDER_ID
    387   Provider id, present only if type is LINK.
    388   Refers to a ``kyc-provider-$PROVIDER_ID`` section.
    389 
    390 FORM_NAME
    391   Name of the SPA form, if type is FORM
    392   "INFO" and "LINK" are reserved and must not be used.
    393   The exchange server and the SPA must agree on a list
    394   of supported forms and the resulting attributes.
    395   The SPA should include a JSON resource file
    396   "forms.json" mapping form names to arrays of
    397   attribute names each form provides.
    398   The list of possible FORM names is fixed in the SPA
    399   for a particular exchange release.
    400 
    401 DESCRIPTION
    402   Descriptions to use in the SPA to display the check.
    403 
    404 DESCRIPTION_I18N
    405   JSON with internationalized descriptions to use
    406   in the SPA to display the check.
    407 
    408 REQUIRES
    409   ';'-separated list of fields that the CONTEXT must
    410   provide as inputs to this check. For example,
    411   for a FORM of type CHOICE, this might state
    412   ``choices: string[];``. The type after the ":"
    413   is for now purely for documentation and is
    414   not checked. However, it may be shown to AML staff
    415   when they configure measures.
    416 
    417 OUTPUTS = "business_name street city country registration"
    418   Description of the outputs provided by the check.
    419   Basically, the check's output is expected to
    420   provide the following fields as attribute inputs into
    421   a subsequent AML program. INFO never has any outputs.
    422 
    423 FALLBACK
    424   Name of an **original** measure to take if the check fails
    425   (for any reason, e.g. provider or form fail to
    426   satisfy constraints or provider signals user error)
    427   Usually should point to a measure that requests
    428   AML staff to investigate.  The fallback measure
    429   context always includes the reasons for the
    430   failure.
    431 
    432 EXCHANGE KYC RULES
    433 ------------------
    434 
    435 The following options must be in "[kyc-rule-$RULE_NAME]" sections.
    436 
    437 OPERATION_TYPE = WITHDRAW
    438   Operation that triggers this rule.
    439   Must be one of AGGREGATE, BALANCE, CLOSE, DEPOSIT, MERGE,
    440   REFUND, TRANSACTION or WITHDRAW
    441   See the Exchange KYC/AML Operator Manual for the
    442   operations these refer to.
    443 
    444 NEXT_MEASURES
    445   Space-separated list of next measures to be performed.
    446   The SPA should display *all* of these measures to the user.
    447   (They have a choice of either which ones, or in
    448   which order they are to be performed.)
    449   A special measure name "verboten" is used if the
    450   specified threshold may never be crossed
    451   (under this set of rules). This option is equivalent
    452   to the "new_measure" string in an AmlDecisionRequest
    453   (with IS_AND_COMBINATOR replacing the "+"-prefix).
    454 
    455 IS_AND_COMBINATOR
    456   "YES" if all NEXT_MEASURES will eventually need
    457   to be satisfied, "NO" the user has a choice between
    458   them. Not actually enforced by the exchange, but
    459   primarily used to inform the user whether this is
    460   an "and" or "or". YES for "and".
    461 
    462 EXPOSED
    463   YES if the rule (specifically, operation type,
    464   threshold, timeframe) and the general nature of
    465   the next measure (verboten or approval required)
    466   should be exposed to the client.
    467   Defaults to NO if not set.
    468 
    469 THRESHOLD
    470   Threshold amount above which the rule is
    471   triggered.  The total must be exceeded in the given
    472   timeframe.
    473 
    474 TIMEFRAME
    475   Timeframe over which the amount to be compared to
    476   the THRESHOLD is calculated (for example, "30 days").
    477   Ignored for BALANCE.  Can be 'forever'.
    478 
    479 ENABLED = NO
    480   Set to YES to enable the rule (default is NO).
    481 
    482 
    483 EXCHANGE AML PROGRAMS
    484 ---------------------
    485 
    486 The following options must be in "[aml-program-$PROG_NAME]" sections.
    487 
    488 COMMAND
    489   Name of the program to run. Must match a binary
    490   on the local machine where the exchange is running.
    491 
    492 DESCRIPTION
    493   Human-readable description of what this
    494   AML helper program will do. Used to show
    495   to the AML staff.
    496 
    497 ENABLED
    498   True if this AML program is enabled (and thus can be
    499   used in measures and exposed to AML staff).
    500   Optional, default is NO.
    501 
    502 FALLBACK
    503   Name of an **original** measure to take if COMMAND fails
    504   Usually points to a measure that asks AML staff
    505   to contact the systems administrator. The fallback measure
    506   context always includes the reasons for the
    507   failure.
    508 
    509 EXCHANGE KYC MEASURES
    510 ---------------------
    511 
    512 The following options must be in "[kyc-measure-$MEASURE_NAME]" sections.
    513 These sections define the **original** measures.
    514 
    515 CHECK_NAME
    516   Name of a possible check for this measure.  Optional.
    517   If not given or set to ``SKIP``, PROGRAM should be run immediately
    518   (on an empty set of attributes).
    519 
    520 CONTEXT = {"choices":["individual","business"]}
    521   Context for the check. The context can be
    522   just an empty JSON object if there is none.
    523 
    524 PROGRAM
    525   Program to run on the context and check data to
    526   determine the outcome and next measure.
    527   Refers to a ``[aml-program-$PROG_NAME]`` section name.
    528 
    529 VOLUNTARY
    530   Optional. Set to YES to allow this measure to be
    531   done voluntarily by a client. Used to offer the
    532   SPA to display measures even if they are
    533   not required. Default is NO.
    534 
    535 
    536 
    537 AGE_RESTRICTION_ENABLED
    538   Set to ``YES`` to enable age restriction on coins.  When age restriction is
    539   active, certain denominations can be marked with ``AGE_RESTRICTED = YES``
    540   (see `EXCHANGE COIN OPTIONS`_) and wallets must include an age commitment
    541   when withdrawing or spending such coins.  Default is ``NO``.
    542 
    543 AGE_GROUPS
    544   Only meaningful when ``AGE_RESTRICTION_ENABLED = YES``.
    545   A colon-separated string of increasing non-negative integers defining the
    546   age-group boundaries.  Each integer marks the start of the next group; the
    547   zero'th group begins implicitly at 0.  For example ``"10:18"`` defines three
    548   groups:
    549 
    550     1. Group 0: ages 0 through 9 (inclusive)
    551     2. Group 1: ages 10 through 17 (inclusive)
    552     3. Group 2: ages 18 and above
    553 
    554   If not given the default value ``"8:10:12:14:16:18:21"`` is used.
    555 
    556 
    557 EXCHANGE OFFLINE SIGNING OPTIONS
    558 --------------------------------
    559 
    560 The following options must be in the section "[exchange-offline]".
    561 
    562 MASTER_PRIV_FILE
    563   Location of the master private key on disk. Only used by tools that
    564   can be run offline (as the master key is for offline signing).
    565   Mandatory.
    566 
    567 SECM_TOFU_FILE
    568   Where to store the public keys of both crypto helper modules.
    569   Used to persist the keys after the first invocation of the tool,
    570   so that if they ever change in the future, this is detected and
    571   the tool can abort.
    572   Mandatory.
    573 
    574 SECM_DENOM_PUBKEY
    575   Public key of the (RSA) crypto helper module. Optional. If not given,
    576   we will rely on TOFU.  Note that once TOFU has been established,
    577   this option will also be ignored.
    578 
    579 SECM_ESIGN_PUBKEY
    580   Public key of the (EdDSA) crypto helper module. Optional. If not given,
    581   we will rely on TOFU.  Note that once TOFU has been established,
    582   this option will also be ignored.
    583 
    584 
    585 EXCHANGE RSA CRYPTO HELPER OPTIONS
    586 ----------------------------------
    587 
    588 The following options must be in the section "[taler-exchange-secmod-rsa]".
    589 
    590 LOOKAHEAD_SIGN
    591   How long do we generate denomination and signing keys ahead of time?
    592 
    593 OVERLAP_DURATION
    594   How much should validity periods for coins overlap?
    595   Should be long enough to avoid problems with
    596   wallets picking one key and then due to network latency
    597   another key being valid.  The ``DURATION_WITHDRAW`` period
    598   must be longer than this value.
    599 
    600 SM_PRIV_KEY
    601   Where should the security module store its long-term private key?
    602 
    603 KEY_DIR
    604   Where should the security module store the private keys it manages?
    605 
    606 UNIXPATH
    607   On which path should the security module listen for signing requests?
    608 
    609 Note that the **taler-exchange-secmod-rsa** also evaluates the ``[coin_*]``
    610 configuration sections described below.
    611 
    612 
    613 EXCHANGE CS CRYPTO HELPER OPTIONS
    614 ---------------------------------
    615 
    616 The following options must be in the section "[taler-exchange-secmod-cs]".
    617 
    618 LOOKAHEAD_SIGN
    619   How long do we generate denomination and signing keys ahead of time?
    620 
    621 OVERLAP_DURATION
    622   How much should validity periods for coins overlap?
    623   Should be long enough to avoid problems with
    624   wallets picking one key and then due to network latency
    625   another key being valid.  The ``DURATION_WITHDRAW`` period
    626   must be longer than this value.
    627 
    628 SM_PRIV_KEY
    629   Where should the security module store its long-term private key?
    630 
    631 KEY_DIR
    632   Where should the security module store the private keys it manages?
    633 
    634 UNIXPATH
    635   On which path should the security module listen for signing requests?
    636 
    637 Note that the **taler-exchange-secmod-cs** also evaluates the ``[coin_*]``
    638 configuration sections described below.
    639 
    640 
    641 
    642 EXCHANGE EDDSA CRYPTO HELPER OPTIONS
    643 ------------------------------------
    644 
    645 The following options must be in the section "[taler-exchange-secmod-eddsa]".
    646 
    647 LOOKAHEAD_SIGN
    648   How long do we generate denomination and signing keys ahead of time?
    649 
    650 OVERLAP_DURATION
    651   How much should validity periods for coins overlap?
    652   Should be long enough to avoid problems with
    653   wallets picking one key and then due to network latency
    654   another key being valid.  The ``DURATION_WITHDRAW`` period
    655   must be longer than this value.
    656 
    657 DURATION
    658   For how long should EdDSA keys be valid for signing?
    659 
    660 SM_PRIV_KEY
    661   Where should the security module store its long-term private key?
    662 
    663 KEY_DIR
    664   Where should the security module store the private keys it manages?
    665 
    666 UNIXPATH
    667   On which path should the security module listen for signing requests?
    668 
    669 .. include:: frags/exchange-database.rst
    670 .. include:: frags/exchange-account.rst
    671 .. include:: frags/exchange-coin.rst
    672 
    673 EXCHANGE SANCTIONSCHECK OPTIONS
    674 -------------------------------
    675 
    676 This section configures the taler-exchange-sanctionlist tool to enforce
    677 sanctions. The tool scores KYC records in two dimensions, the quality
    678 of the match (rating) and the number of attributes that were found in
    679 both sets (confidence).
    680 
    681 The following options must be in the section "[exchange-sanctionscheck]".
    682 
    683 RATER_COMMAND
    684   Program (and command-line arguments) for the helper program to
    685   execute to compare sanction list records. Usually set to
    686   something like "robocop $SANCTIONLIST.json", but can be any
    687   program that reads KYC attributes in JSON line-by-line and
    688   outputs a rating (0-1), confidence (0-1) and free-form sanction list
    689   identifier for each JSON input received.
    690 
    691 MIN_ROW_FILENAME
    692   Name of the file where taler-exchange-sanctionscheck will store the
    693   last row process during sanction list evaluation. Not in thed atabase
    694   as we frequently need to reset it when we get a new list, so no
    695   transactionality is needed or even desirable. There should be no
    696   need to change the default.
    697 
    698 FREEZE_RATING_LIMIT
    699   Match quality rating (on a scale of [0,1]) that must be exceeded
    700   for the exchange to automatically freeze an account. The account
    701   must satisfy both the rating limit and the confidence limit to be
    702   frozen.
    703 
    704 FREEZE_CONFIDENCE_LIMIT
    705   Match confidence rating (on a scale of [0,1]) that must be exceeded
    706   for the exchange to automatically freeze an account. A rating of 0
    707   means no attributes were available, while a rating of 1 indicates that
    708   we could compare the acconts across all dimensions.
    709 
    710 INVESTIGATION_LIMIT
    711   Limit (on a scale of [0,1]) that must be exceeded for an account to
    712   be flagged for manual investigation. Only applies of the account
    713   is not automatically frozen. The limit given is compared against
    714   the quality rating divided by the confidence score.
    715   If set at 0.95, a modest 0.8 match with low 0.5 confidence will
    716   trigger (1.6 > 0.95), but a good 0.9 match with a super-high 1.0
    717   confidence would not (0.9 < 0.95). On the other hand, a bad 0.2 match
    718   with super-low 0.1 confidence would again trigger (2.0 > 0.95).
    719 
    720 
    721 SEE ALSO
    722 ========
    723 
    724 taler-exchange-dbinit(1), taler-exchange-httpd(1), taler-exchange-offline(1), taler-exchange-sanctionscheck(1)
    725 
    726 BUGS
    727 ====
    728 
    729 Report bugs by using https://bugs.taler.net/ or by sending electronic
    730 mail to <taler@gnu.org>.