taler-docs

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

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


      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 DISABLE_DIRECT_DEPOSIT
    251   Set to ``YES`` to indicate to wallets that deposits by non-merchants
    252   are not supported.  Defaults to ``NO``.
    253 
    254 
    255 EXCHANGE KYC PROVIDER OPTIONS
    256 -----------------------------
    257 
    258 The following options must be in the section "[kyc-provider-$PROVIDER_NAME]" sections.
    259 
    260 LOGIC
    261   API type of the KYC provider.
    262 
    263 Additional logic-specific options may be given in the
    264 section.
    265 
    266 
    267 EXCHANGE KYC OAUTH2 OPTIONS
    268 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    269 
    270 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = oauth2".
    271 
    272 
    273 KYC_OAUTH2_VALIDITY
    274   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    275 
    276 KYC_OAUTH2_AUTHORIZE_URL
    277   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.
    278 
    279 KYC_OAUTH2_TOKEN_URL
    280   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")
    281 
    282 KYC_OAUTH2_INFO_URL
    283   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"
    284 
    285 KYC_OAUTH2_CLIENT_ID
    286   Client ID of the exchange when it talks to the KYC OAuth2 endpoint.
    287 
    288 KYC_OAUTH2_CLIENT_SECRET
    289   Client secret of the exchange to use when talking to the KYC Oauth2 endpoint.
    290 
    291 KYC_OAUTH2_SCOPE
    292   Scope argument to pass in the Oauth2 /authorize request.
    293   Optional, if not given no scope will be provided.
    294 
    295 KYC_OAUTH2_POST_URL
    296   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"
    297 
    298 KYC_OAUTH2_CONVERTER_HELPER
    299   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.
    300 
    301 KYC_OAUTH2_DEBUG_MODE
    302   Set to YES to allow error responses to include potentially
    303   sensitive private information (such as full responses
    304   from the OAuth 2.0 server) that might aid in debugging
    305   problems.  Should be set to "NO" in production.
    306 
    307 
    308 EXCHANGE KYC KYCAID OPTIONS
    309 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    310 
    311 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = kycaid".
    312 
    313 
    314 KYC_KYCAID_VALIDITY
    315   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    316 
    317 KYC_KYCAID_AUTH_TOKEN
    318   Authentication token to access the KYC service.
    319 
    320 KYC_KYCAID_CONVERTER_HELPER
    321   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".
    322 
    323 KYC_KYCAID_FORM_ID
    324   ID that specifies the form to use for the KYC process.
    325 
    326 KYC_KYCAID_POST_URL
    327   URL to which the exchange will redirect the client's browser after successful authorization/login for the KYC process.
    328 
    329 
    330 EXCHANGE KYC PERSONA OPTIONS
    331 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    332 
    333 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = persona".
    334 
    335 
    336 KYC_PERSONA_VALIDITY
    337   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    338 
    339 KYC_PERSONA_AUTH_TOKEN
    340   Authentication token to access the KYC service.
    341 
    342 KYC_PERSONA_SALT
    343   Salt value to use for request idempotency. Optional, generated at random per process if not given.
    344 
    345 KYC_PERSONA_SUBDOMAIN
    346   Subdomain to use under Persona.
    347 
    348 KYC_PERSONA_CONVERTER_HELPER
    349   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".
    350 
    351 KYC_PERSONA_POST_URL
    352   URL to which the exchange will redirect the client's browser after successful authorization/login for the KYC process.
    353 
    354 KYC_PERSONA_TEMPLATE_ID
    355   ID of the Persona template to use.
    356 
    357 EXCHANGE KYC PERSONA GLOBAL OPTIONS
    358 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    359 
    360 The following option must be in the section "[kyclogic-persona]".
    361 
    362 
    363 WEBHOOK_AUTH_TOKEN
    364   Authentication token Persona must supply to our webhook. This is an optional setting.
    365 
    366 
    367 EXCHANGE KYC CHECK OPTIONS
    368 --------------------------
    369 
    370 The following options must be in "[kyc-check-$CHECK_NAME]" sections.
    371 
    372 TYPE
    373   Which type of check is this? Also determines
    374   the SPA form to show to the user for this check.
    375 
    376   * INFO: wait for staff or contact staff out-of band
    377     (only information shown, no SPA action)
    378   * FORM: SPA should show an inline (HTML) form
    379   * LINK: SPA may start external KYC process or upload
    380 
    381 PROVIDER_ID
    382   Provider id, present only if type is LINK.
    383   Refers to a ``kyc-provider-$PROVIDER_ID`` section.
    384 
    385 FORM_NAME
    386   Name of the SPA form, if type is FORM
    387   "INFO" and "LINK" are reserved and must not be used.
    388   The exchange server and the SPA must agree on a list
    389   of supported forms and the resulting attributes.
    390   The SPA should include a JSON resource file
    391   "forms.json" mapping form names to arrays of
    392   attribute names each form provides.
    393   The list of possible FORM names is fixed in the SPA
    394   for a particular exchange release.
    395 
    396 DESCRIPTION
    397   Descriptions to use in the SPA to display the check.
    398 
    399 DESCRIPTION_I18N
    400   JSON with internationalized descriptions to use
    401   in the SPA to display the check.
    402 
    403 REQUIRES
    404   ';'-separated list of fields that the CONTEXT must
    405   provide as inputs to this check. For example,
    406   for a FORM of type CHOICE, this might state
    407   ``choices: string[];``. The type after the ":"
    408   is for now purely for documentation and is
    409   not checked. However, it may be shown to AML staff
    410   when they configure measures.
    411 
    412 OUTPUTS = "business_name street city country registration"
    413   Description of the outputs provided by the check.
    414   Basically, the check's output is expected to
    415   provide the following fields as attribute inputs into
    416   a subsequent AML program. INFO never has any outputs.
    417 
    418 FALLBACK
    419   Name of an **original** measure to take if the check fails
    420   (for any reason, e.g. provider or form fail to
    421   satisfy constraints or provider signals user error)
    422   Usually should point to a measure that requests
    423   AML staff to investigate.  The fallback measure
    424   context always includes the reasons for the
    425   failure.
    426 
    427 EXCHANGE KYC RULES
    428 ------------------
    429 
    430 The following options must be in "[kyc-rule-$RULE_NAME]" sections.
    431 
    432 OPERATION_TYPE = WITHDRAW
    433   Operation that triggers this rule.
    434   Must be one of AGGREGATE, BALANCE, CLOSE, DEPOSIT, MERGE,
    435   REFUND, TRANSACTION or WITHDRAW
    436   See the Exchange KYC/AML Operator Manual for the
    437   operations these refer to.
    438 
    439 NEXT_MEASURES
    440   Space-separated list of next measures to be performed.
    441   The SPA should display *all* of these measures to the user.
    442   (They have a choice of either which ones, or in
    443   which order they are to be performed.)
    444   A special measure name "verboten" is used if the
    445   specified threshold may never be crossed
    446   (under this set of rules). This option is equivalent
    447   to the "new_measure" string in an AmlDecisionRequest
    448   (with IS_AND_COMBINATOR replacing the "+"-prefix).
    449 
    450 IS_AND_COMBINATOR
    451   "YES" if all NEXT_MEASURES will eventually need
    452   to be satisfied, "NO" the user has a choice between
    453   them. Not actually enforced by the exchange, but
    454   primarily used to inform the user whether this is
    455   an "and" or "or". YES for "and".
    456 
    457 EXPOSED
    458   YES if the rule (specifically, operation type,
    459   threshold, timeframe) and the general nature of
    460   the next measure (verboten or approval required)
    461   should be exposed to the client.
    462   Defaults to NO if not set.
    463 
    464 THRESHOLD
    465   Threshold amount above which the rule is
    466   triggered.  The total must be exceeded in the given
    467   timeframe.
    468 
    469 TIMEFRAME
    470   Timeframe over which the amount to be compared to
    471   the THRESHOLD is calculated (for example, "30 days").
    472   Ignored for BALANCE.  Can be 'forever'.
    473 
    474 ENABLED = NO
    475   Set to YES to enable the rule (default is NO).
    476 
    477 
    478 EXCHANGE AML PROGRAMS
    479 ---------------------
    480 
    481 The following options must be in "[aml-program-$PROG_NAME]" sections.
    482 
    483 COMMAND
    484   Name of the program to run. Must match a binary
    485   on the local machine where the exchange is running.
    486 
    487 DESCRIPTION
    488   Human-readable description of what this
    489   AML helper program will do. Used to show
    490   to the AML staff.
    491 
    492 ENABLED
    493   True if this AML program is enabled (and thus can be
    494   used in measures and exposed to AML staff).
    495   Optional, default is NO.
    496 
    497 FALLBACK
    498   Name of an **original** measure to take if COMMAND fails
    499   Usually points to a measure that asks AML staff
    500   to contact the systems administrator. The fallback measure
    501   context always includes the reasons for the
    502   failure.
    503 
    504 EXCHANGE KYC MEASURES
    505 ---------------------
    506 
    507 The following options must be in "[kyc-measure-$MEASURE_NAME]" sections.
    508 These sections define the **original** measures.
    509 
    510 CHECK_NAME
    511   Name of a possible check for this measure.  Optional.
    512   If not given or set to ``SKIP``, PROGRAM should be run immediately
    513   (on an empty set of attributes).
    514 
    515 CONTEXT = {"choices":["individual","business"]}
    516   Context for the check. The context can be
    517   just an empty JSON object if there is none.
    518 
    519 PROGRAM
    520   Program to run on the context and check data to
    521   determine the outcome and next measure.
    522   Refers to a ``[aml-program-$PROG_NAME]`` section name.
    523 
    524 VOLUNTARY
    525   Optional. Set to YES to allow this measure to be
    526   done voluntarily by a client. Used to offer the
    527   SPA to display measures even if they are
    528   not required. Default is NO.
    529 
    530 
    531 
    532 EXCHANGE EXTENSIONS OPTIONS
    533 ---------------------------
    534 
    535 The functionality of the exchange can be extended by extensions.  Those are
    536 shared libraries which implement the extension-API of the exchange and are
    537 located under ``$LIBDIR``, starting with prefix ``libtaler_extension_``. Each
    538 extension can be enabled by adding a dedicated section
    539 "[exchange-extension-<extensionname>]" and the following option:
    540 
    541 ENABLED
    542   If set to ``YES`` the extension ``<extensionsname>`` is enabled.  Extension-specific
    543   options might be set in the same section.
    544 
    545 
    546 EXCHANGE EXTENSION FOR AGE RESTRICTION
    547 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    548 
    549 The extension for age restriction support can be enabled by adding a section
    550 "[exchange-extension-age_restriction]" with the following options:
    551 
    552 ENABLE
    553   Must be set to ``YES`` in order to activate the extension.
    554 
    555 AGE_GROUPS
    556   A colon-seperated string of increasing non-negative integers, defining the
    557   buckets of age groups supported by the exchange.  Each integer marks the
    558   beginning of the next age group.  The zero'th age group implicitly starts
    559   with 0.  For example, the string "10:18" would define three age groups:
    560 
    561     1. Group 0: ages 0 through 9 (including)
    562     2. Group 1: ages 10 through 17 (including)
    563     3. Group 2: ages 18 and above
    564 
    565   If not provided, the default value is "8:10:12:14:16:18:21".
    566 
    567 **Note**: Age restriction is bound to specific denominations and must be
    568 enabled for each selected denomination in the corresponding section by adding
    569 the option ``AGE_RESTRICTED = YES``, see `EXCHANGE COIN OPTIONS`_. However, the
    570 age groups are defined globally for all denominations.
    571 
    572 
    573 
    574 EXCHANGE OFFLINE SIGNING OPTIONS
    575 --------------------------------
    576 
    577 The following options must be in the section "[exchange-offline]".
    578 
    579 MASTER_PRIV_FILE
    580   Location of the master private key on disk. Only used by tools that
    581   can be run offline (as the master key is for offline signing).
    582   Mandatory.
    583 
    584 SECM_TOFU_FILE
    585   Where to store the public keys of both crypto helper modules.
    586   Used to persist the keys after the first invocation of the tool,
    587   so that if they ever change in the future, this is detected and
    588   the tool can abort.
    589   Mandatory.
    590 
    591 SECM_DENOM_PUBKEY
    592   Public key of the (RSA) crypto helper module. Optional. If not given,
    593   we will rely on TOFU.  Note that once TOFU has been established,
    594   this option will also be ignored.
    595 
    596 SECM_ESIGN_PUBKEY
    597   Public key of the (EdDSA) crypto helper module. Optional. If not given,
    598   we will rely on TOFU.  Note that once TOFU has been established,
    599   this option will also be ignored.
    600 
    601 
    602 EXCHANGE RSA CRYPTO HELPER OPTIONS
    603 ----------------------------------
    604 
    605 The following options must be in the section "[taler-exchange-secmod-rsa]".
    606 
    607 LOOKAHEAD_SIGN
    608   How long do we generate denomination and signing keys ahead of time?
    609 
    610 OVERLAP_DURATION
    611   How much should validity periods for coins overlap?
    612   Should be long enough to avoid problems with
    613   wallets picking one key and then due to network latency
    614   another key being valid.  The ``DURATION_WITHDRAW`` period
    615   must be longer than this value.
    616 
    617 SM_PRIV_KEY
    618   Where should the security module store its long-term private key?
    619 
    620 KEY_DIR
    621   Where should the security module store the private keys it manages?
    622 
    623 UNIXPATH
    624   On which path should the security module listen for signing requests?
    625 
    626 Note that the **taler-exchange-secmod-rsa** also evaluates the ``[coin_*]``
    627 configuration sections described below.
    628 
    629 
    630 EXCHANGE CS CRYPTO HELPER OPTIONS
    631 ---------------------------------
    632 
    633 The following options must be in the section "[taler-exchange-secmod-cs]".
    634 
    635 LOOKAHEAD_SIGN
    636   How long do we generate denomination and signing keys ahead of time?
    637 
    638 OVERLAP_DURATION
    639   How much should validity periods for coins overlap?
    640   Should be long enough to avoid problems with
    641   wallets picking one key and then due to network latency
    642   another key being valid.  The ``DURATION_WITHDRAW`` period
    643   must be longer than this value.
    644 
    645 SM_PRIV_KEY
    646   Where should the security module store its long-term private key?
    647 
    648 KEY_DIR
    649   Where should the security module store the private keys it manages?
    650 
    651 UNIXPATH
    652   On which path should the security module listen for signing requests?
    653 
    654 Note that the **taler-exchange-secmod-cs** also evaluates the ``[coin_*]``
    655 configuration sections described below.
    656 
    657 
    658 
    659 EXCHANGE EDDSA CRYPTO HELPER OPTIONS
    660 ------------------------------------
    661 
    662 The following options must be in the section "[taler-exchange-secmod-eddsa]".
    663 
    664 LOOKAHEAD_SIGN
    665   How long do we generate denomination and signing keys ahead of time?
    666 
    667 OVERLAP_DURATION
    668   How much should validity periods for coins overlap?
    669   Should be long enough to avoid problems with
    670   wallets picking one key and then due to network latency
    671   another key being valid.  The ``DURATION_WITHDRAW`` period
    672   must be longer than this value.
    673 
    674 DURATION
    675   For how long should EdDSA keys be valid for signing?
    676 
    677 SM_PRIV_KEY
    678   Where should the security module store its long-term private key?
    679 
    680 KEY_DIR
    681   Where should the security module store the private keys it manages?
    682 
    683 UNIXPATH
    684   On which path should the security module listen for signing requests?
    685 
    686 .. include:: frags/exchange-database.rst
    687 .. include:: frags/exchange-account.rst
    688 .. include:: frags/exchange-coin.rst
    689 
    690 EXCHANGE SANCTIONSCHECK OPTIONS
    691 -------------------------------
    692 
    693 This section configures the taler-exchange-sanctionlist tool to enforce
    694 sanctions. The tool scores KYC records in two dimensions, the quality
    695 of the match (rating) and the number of attributes that were found in
    696 both sets (confidence).
    697 
    698 The following options must be in the section "[exchange-sanctionscheck]".
    699 
    700 RATER_COMMAND
    701   Program (and command-line arguments) for the helper program to
    702   execute to compare sanction list records. Usually set to
    703   something like "robocop $SANCTIONLIST.json", but can be any
    704   program that reads KYC attributes in JSON line-by-line and
    705   outputs a rating (0-1), confidence (0-1) and free-form sanction list
    706   identifier for each JSON input received.
    707 
    708 MIN_ROW_FILENAME
    709   Name of the file where taler-exchange-sanctionscheck will store the
    710   last row process during sanction list evaluation. Not in thed atabase
    711   as we frequently need to reset it when we get a new list, so no
    712   transactionality is needed or even desirable. There should be no
    713   need to change the default.
    714 
    715 FREEZE_RATING_LIMIT
    716   Match quality rating (on a scale of [0,1]) that must be exceeded
    717   for the exchange to automatically freeze an account. The account
    718   must satisfy both the rating limit and the confidence limit to be
    719   frozen.
    720 
    721 FREEZE_CONFIDENCE_LIMIT
    722   Match confidence rating (on a scale of [0,1]) that must be exceeded
    723   for the exchange to automatically freeze an account. A rating of 0
    724   means no attributes were available, while a rating of 1 indicates that
    725   we could compare the acconts across all dimensions.
    726 
    727 INVESTIGATION_LIMIT
    728   Limit (on a scale of [0,1]) that must be exceeded for an account to
    729   be flagged for manual investigation. Only applies of the account
    730   is not automatically frozen. The limit given is compared against
    731   the quality rating divided by the confidence score.
    732   If set at 0.95, a modest 0.8 match with low 0.5 confidence will
    733   trigger (1.6 > 0.95), but a good 0.9 match with a super-high 1.0
    734   confidence would not (0.9 < 0.95). On the other hand, a bad 0.2 match
    735   with super-low 0.1 confidence would again trigger (2.0 > 0.95).
    736 
    737 
    738 SEE ALSO
    739 ========
    740 
    741 taler-exchange-dbinit(1), taler-exchange-httpd(1), taler-exchange-offline(1), taler-exchange-sanctionscheck(1)
    742 
    743 BUGS
    744 ====
    745 
    746 Report bugs by using https://bugs.taler.net/ or by sending electronic
    747 mail to <taler@gnu.org>.