taler-docs

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

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


      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. Should be given as a hint
    128   for merchants what amount they need to transfer to begin the
    129   KYC transfer. Note that the amount is not enforced by the
    130   exchange *and* that this option is optional. However, if it is
    131   not given, merchants will have to guess what amount to transfer,
    132   so it really should be configured.
    133 
    134 SHOPPING_URL
    135   Web URL where users can discover shops that accept digital cash
    136   offered by this exchange. Optional, but highly recommended.
    137 
    138 OPEN_BANKING_GATEWAY_URL
    139   URL where wallets can find an open banking gateway to
    140   initiate wire transfers when withdrawing digital cash
    141   from this exchange. Optional (as obviously not every
    142   exchange will have an open banking gateway attached).
    143 
    144 AML_SPA_DIALECT
    145   Determines the variant of the AML SPA that should be shown. This
    146   will determine the set of forms shown to AML staff, statistics to
    147   be displayed on the main page, and influence the default set of
    148   properties/events the AML forms show when AML staff makes decisions.
    149   Possible values for now include "gls", "tops" and "magnet".
    150   Optional. The AML SPA will only show certain default forms and
    151   generic decisions if this option is not set.
    152 
    153 GLOBAL_PDF_FORM_DATA
    154   Set to a JSON object that should be provided as additional input
    155   to the PDF form generation logic when generating AML records in
    156   PDF format. Useful to specify global attributes for the Typst forms.
    157   Optional, global PDF form data injection will simply be off if
    158   this option is not specified.
    159 
    160 BANK_COMPLIANCE_LANGUAGE
    161   Determines the legal language (and possibly other UI/UX aspects)
    162   wallets should use when providing the user interface for this bank.
    163   Allows banks to communicate the desired compliance language they
    164   want to see used to the wallet. Wallets SHOULD follow the guidance
    165   provided by the bank, but some wallets MAY not understand all compliance
    166   languages. Optional, if not set wallets will use their default UI/UX.
    167 
    168 STEFAN_ABS
    169   Absolute amount to add as an offset in the STEFAN fee approximation
    170   curve (see DD47).  Defaults to CURRENCY:0 if not specified.
    171 
    172 STEFAN_LOG
    173   Amount to multiply by the base-2 logarithm of the total amount
    174   divided by the amount of the smallest denomination
    175   in the STEFAN fee approximation curve (see DD47).
    176   Defaults to CURRENCY:0 if not specified.
    177 
    178 STEFAN_LIN
    179   Linear floating point factor to be multiplied by the total amount
    180   to use in the STEFAN fee approximation curve (see DD47).
    181   Defaults to 0.0 if not specified.
    182 
    183 BASE_URL
    184   The base URL under which the exchange can be reached.
    185   Added to wire transfers to enable tracking by merchants.
    186   Used by the KYC logic when interacting with OAuth 2.0.
    187 
    188 TOPLEVEL_REDIRECT_URL
    189   Where to redirect visitors that access the top-level
    190   "/" endpoint of the exchange. Should point users to
    191   information about the exchange operator.
    192   Optional setting, defaults to "/terms".
    193 
    194 AGGREGATOR_IDLE_SLEEP_INTERVAL
    195   For how long should the taler-exchange-aggregator sleep when it is idle
    196   before trying to look for more work? Default is 60 seconds.
    197 
    198 CLOSER_IDLE_SLEEP_INTERVAL
    199   For how long should the taler-exchange-closer sleep when it is idle
    200   before trying to look for more work? Default is 60 seconds.
    201 
    202 TRANSFER_IDLE_SLEEP_INTERVAL
    203   For how long should the taler-exchange-transfer sleep when it is idle
    204   before trying to look for more work? Default is 60 seconds.
    205 
    206 WIREWATCH_IDLE_SLEEP_INTERVAL
    207   For how long should the taler-exchange-wirewatch sleep when it is idle
    208   before trying to look for more work? Default is 60 seconds.
    209 
    210 AGGREGATOR_SHARD_SIZE
    211   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).
    212 
    213 SIGNKEY_LEGAL_DURATION
    214   For how long are signatures with signing keys legally valid?
    215 
    216 MAX_KEYS_CACHING
    217   For how long should clients cache ``/keys`` responses at most?
    218 
    219 MAX_REQUESTS
    220   How many requests should the HTTP server process at most before committing suicide?
    221 
    222 TERMS_DIR
    223   Directory where the terms of service of the exchange operator can be fund.
    224   The directory must contain sub-directories for every supported language,
    225   using the two-character language code in lower case, e.g. "en/" or "fr/".
    226   Each subdirectory must then contain files with the terms of service in
    227   various formats.  The basename of the file of the current policy must be
    228   specified under ``TERMS_ETAG``.  The extension defines the mime type.
    229   Supported extensions include "html", "htm", "txt", "pdf", "jpg", "jpeg",
    230   "png" and "gif".  For example, using a ``TERMS_ETAG`` of "0", the structure
    231   could be the following:
    232 
    233   - $TERMS_DIR/en/0.pdf
    234   - $TERMS_DIR/en/0.html
    235   - $TERMS_DIR/en/0.txt
    236   - $TERMS_DIR/fr/0.pdf
    237   - $TERMS_DIR/fr/0.html
    238   - $TERMS_DIR/de/0.txt
    239 
    240 TERMS_ETAG
    241   Basename of the file(s) in the ``TERMS_DIR`` with the current terms of service.
    242   The value is also used for the "Etag" in the HTTP request to control
    243   caching.  Whenever the terms of service change, the ``TERMS_ETAG`` MUST also
    244   change, and old values MUST NOT be repeated.  For example, the date or
    245   version number of the terms of service SHOULD be used for the Etag.  If
    246   there are minor (e.g. spelling) fixes to the terms of service, the
    247   ``TERMS_ETAG`` probably SHOULD NOT be changed. However, whenever users must
    248   approve the new terms, the ``TERMS_ETAG`` MUST change.
    249 
    250 PRIVACY_DIR
    251   Works the same as ``TERMS_DIR``, just for the privacy policy.
    252 
    253 PRIVACY_ETAG
    254   Works the same as ``TERMS_ETAG``, just for the privacy policy.
    255 
    256 ENABLE_KYC
    257   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``.
    258 
    259 DISABLE_DIRECT_DEPOSIT
    260   Set to ``YES`` to indicate to wallets that deposits by non-merchants
    261   are not supported.  Defaults to ``NO``.
    262 
    263 
    264 EXCHANGE KYC PROVIDER OPTIONS
    265 -----------------------------
    266 
    267 The following options must be in the section "[kyc-provider-$PROVIDER_NAME]" sections.
    268 
    269 LOGIC
    270   API type of the KYC provider.
    271 
    272 Additional logic-specific options may be given in the
    273 section.
    274 
    275 
    276 EXCHANGE KYC OAUTH2 OPTIONS
    277 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    278 
    279 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = oauth2".
    280 
    281 
    282 KYC_OAUTH2_VALIDITY
    283   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    284 
    285 KYC_OAUTH2_AUTHORIZE_URL
    286   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.
    287 
    288 KYC_OAUTH2_TOKEN_URL
    289   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")
    290 
    291 KYC_OAUTH2_INFO_URL
    292   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"
    293 
    294 KYC_OAUTH2_CLIENT_ID
    295   Client ID of the exchange when it talks to the KYC OAuth2 endpoint.
    296 
    297 KYC_OAUTH2_CLIENT_SECRET
    298   Client secret of the exchange to use when talking to the KYC Oauth2 endpoint.
    299 
    300 KYC_OAUTH2_SCOPE
    301   Scope argument to pass in the Oauth2 /authorize request.
    302   Optional, if not given no scope will be provided.
    303 
    304 KYC_OAUTH2_POST_URL
    305   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"
    306 
    307 KYC_OAUTH2_CONVERTER_HELPER
    308   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.
    309 
    310 KYC_OAUTH2_DEBUG_MODE
    311   Set to YES to allow error responses to include potentially
    312   sensitive private information (such as full responses
    313   from the OAuth 2.0 server) that might aid in debugging
    314   problems.  Should be set to "NO" in production.
    315 
    316 
    317 EXCHANGE KYC KYCAID OPTIONS
    318 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    319 
    320 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = kycaid".
    321 
    322 
    323 KYC_KYCAID_VALIDITY
    324   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    325 
    326 KYC_KYCAID_AUTH_TOKEN
    327   Authentication token to access the KYC service.
    328 
    329 KYC_KYCAID_CONVERTER_HELPER
    330   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".
    331 
    332 KYC_KYCAID_FORM_ID
    333   ID that specifies the form to use for the KYC process.
    334 
    335 KYC_KYCAID_POST_URL
    336   URL to which the exchange will redirect the client's browser after successful authorization/login for the KYC process.
    337 
    338 
    339 EXCHANGE KYC PERSONA OPTIONS
    340 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    341 
    342 The following options must be in the section "[kyc-provider-XXX]" sections with "LOGIC = persona".
    343 
    344 
    345 KYC_PERSONA_VALIDITY
    346   Duration (e.g. "12 months") of the validity of the performed KYC check. Can be "forever".
    347 
    348 KYC_PERSONA_AUTH_TOKEN
    349   Authentication token to access the KYC service.
    350 
    351 KYC_PERSONA_SALT
    352   Salt value to use for request idempotency. Optional, generated at random per process if not given.
    353 
    354 KYC_PERSONA_SUBDOMAIN
    355   Subdomain to use under Persona.
    356 
    357 KYC_PERSONA_CONVERTER_HELPER
    358   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".
    359 
    360 KYC_PERSONA_POST_URL
    361   URL to which the exchange will redirect the client's browser after successful authorization/login for the KYC process.
    362 
    363 KYC_PERSONA_TEMPLATE_ID
    364   ID of the Persona template to use.
    365 
    366 EXCHANGE KYC PERSONA GLOBAL OPTIONS
    367 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    368 
    369 The following option must be in the section "[kyclogic-persona]".
    370 
    371 
    372 WEBHOOK_AUTH_TOKEN
    373   Authentication token Persona must supply to our webhook. This is an optional setting.
    374 
    375 
    376 EXCHANGE KYC CHECK OPTIONS
    377 --------------------------
    378 
    379 The following options must be in "[kyc-check-$CHECK_NAME]" sections.
    380 
    381 TYPE
    382   Which type of check is this? Also determines
    383   the SPA form to show to the user for this check.
    384 
    385   * INFO: wait for staff or contact staff out-of band
    386     (only information shown, no SPA action)
    387   * FORM: SPA should show an inline (HTML) form
    388   * LINK: SPA may start external KYC process or upload
    389 
    390 PROVIDER_ID
    391   Provider id, present only if type is LINK.
    392   Refers to a ``kyc-provider-$PROVIDER_ID`` section.
    393 
    394 FORM_NAME
    395   Name of the SPA form, if type is FORM
    396   "INFO" and "LINK" are reserved and must not be used.
    397   The exchange server and the SPA must agree on a list
    398   of supported forms and the resulting attributes.
    399   The SPA should include a JSON resource file
    400   "forms.json" mapping form names to arrays of
    401   attribute names each form provides.
    402   The list of possible FORM names is fixed in the SPA
    403   for a particular exchange release.
    404 
    405 DESCRIPTION
    406   Descriptions to use in the SPA to display the check.
    407 
    408 DESCRIPTION_I18N
    409   JSON with internationalized descriptions to use
    410   in the SPA to display the check.
    411 
    412 REQUIRES
    413   ';'-separated list of fields that the CONTEXT must
    414   provide as inputs to this check. For example,
    415   for a FORM of type CHOICE, this might state
    416   ``choices: string[];``. The type after the ":"
    417   is for now purely for documentation and is
    418   not checked. However, it may be shown to AML staff
    419   when they configure measures.
    420 
    421 OUTPUTS = "business_name street city country registration"
    422   Description of the outputs provided by the check.
    423   Basically, the check's output is expected to
    424   provide the following fields as attribute inputs into
    425   a subsequent AML program. INFO never has any outputs.
    426 
    427 FALLBACK
    428   Name of an **original** measure to take if the check fails
    429   (for any reason, e.g. provider or form fail to
    430   satisfy constraints or provider signals user error)
    431   Usually should point to a measure that requests
    432   AML staff to investigate.  The fallback measure
    433   context always includes the reasons for the
    434   failure.
    435 
    436 EXCHANGE KYC RULES
    437 ------------------
    438 
    439 The following options must be in "[kyc-rule-$RULE_NAME]" sections.
    440 
    441 OPERATION_TYPE = WITHDRAW
    442   Operation that triggers this rule.
    443   Must be one of AGGREGATE, BALANCE, CLOSE, DEPOSIT, MERGE,
    444   REFUND, TRANSACTION or WITHDRAW
    445   See the Exchange KYC/AML Operator Manual for the
    446   operations these refer to.
    447 
    448 NEXT_MEASURES
    449   Space-separated list of next measures to be performed.
    450   The SPA should display *all* of these measures to the user.
    451   (They have a choice of either which ones, or in
    452   which order they are to be performed.)
    453   A special measure name "verboten" is used if the
    454   specified threshold may never be crossed
    455   (under this set of rules). This option is equivalent
    456   to the "new_measure" string in an AmlDecisionRequest
    457   (with IS_AND_COMBINATOR replacing the "+"-prefix).
    458 
    459 IS_AND_COMBINATOR
    460   "YES" if all NEXT_MEASURES will eventually need
    461   to be satisfied, "NO" the user has a choice between
    462   them. Not actually enforced by the exchange, but
    463   primarily used to inform the user whether this is
    464   an "and" or "or". YES for "and".
    465 
    466 EXPOSED
    467   YES if the rule (specifically, operation type,
    468   threshold, timeframe) and the general nature of
    469   the next measure (verboten or approval required)
    470   should be exposed to the client.
    471   Defaults to NO if not set.
    472 
    473 THRESHOLD
    474   Threshold amount above which the rule is
    475   triggered.  The total must be exceeded in the given
    476   timeframe.
    477 
    478 TIMEFRAME
    479   Timeframe over which the amount to be compared to
    480   the THRESHOLD is calculated (for example, "30 days").
    481   Ignored for BALANCE.  Can be 'forever'.
    482 
    483 ENABLED = NO
    484   Set to YES to enable the rule (default is NO).
    485 
    486 
    487 EXCHANGE AML PROGRAMS
    488 ---------------------
    489 
    490 The following options must be in "[aml-program-$PROG_NAME]" sections.
    491 
    492 COMMAND
    493   Name of the program to run. Must match a binary
    494   on the local machine where the exchange is running.
    495 
    496 DESCRIPTION
    497   Human-readable description of what this
    498   AML helper program will do. Used to show
    499   to the AML staff.
    500 
    501 ENABLED
    502   True if this AML program is enabled (and thus can be
    503   used in measures and exposed to AML staff).
    504   Optional, default is NO.
    505 
    506 FALLBACK
    507   Name of an **original** measure to take if COMMAND fails
    508   Usually points to a measure that asks AML staff
    509   to contact the systems administrator. The fallback measure
    510   context always includes the reasons for the
    511   failure.
    512 
    513 EXCHANGE KYC MEASURES
    514 ---------------------
    515 
    516 The following options must be in "[kyc-measure-$MEASURE_NAME]" sections.
    517 These sections define the **original** measures.
    518 
    519 CHECK_NAME
    520   Name of a possible check for this measure.  Optional.
    521   If not given or set to ``SKIP``, PROGRAM should be run immediately
    522   (on an empty set of attributes).
    523 
    524 CONTEXT = {"choices":["individual","business"]}
    525   Context for the check. The context can be
    526   just an empty JSON object if there is none.
    527 
    528 PROGRAM
    529   Program to run on the context and check data to
    530   determine the outcome and next measure.
    531   Refers to a ``[aml-program-$PROG_NAME]`` section name.
    532 
    533 VOLUNTARY
    534   Optional. Set to YES to allow this measure to be
    535   done voluntarily by a client. Used to offer the
    536   SPA to display measures even if they are
    537   not required. Default is NO.
    538 
    539 
    540 
    541 EXCHANGE EXTENSIONS OPTIONS
    542 ---------------------------
    543 
    544 The functionality of the exchange can be extended by extensions.  Those are
    545 shared libraries which implement the extension-API of the exchange and are
    546 located under ``$LIBDIR``, starting with prefix ``libtaler_extension_``. Each
    547 extension can be enabled by adding a dedicated section
    548 "[exchange-extension-<extensionname>]" and the following option:
    549 
    550 ENABLED
    551   If set to ``YES`` the extension ``<extensionsname>`` is enabled.  Extension-specific
    552   options might be set in the same section.
    553 
    554 
    555 EXCHANGE EXTENSION FOR AGE RESTRICTION
    556 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    557 
    558 The extension for age restriction support can be enabled by adding a section
    559 "[exchange-extension-age_restriction]" with the following options:
    560 
    561 ENABLE
    562   Must be set to ``YES`` in order to activate the extension.
    563 
    564 AGE_GROUPS
    565   A colon-seperated string of increasing non-negative integers, defining the
    566   buckets of age groups supported by the exchange.  Each integer marks the
    567   beginning of the next age group.  The zero'th age group implicitly starts
    568   with 0.  For example, the string "10:18" would define three age groups:
    569 
    570     1. Group 0: ages 0 through 9 (including)
    571     2. Group 1: ages 10 through 17 (including)
    572     3. Group 2: ages 18 and above
    573 
    574   If not provided, the default value is "8:10:12:14:16:18:21".
    575 
    576 **Note**: Age restriction is bound to specific denominations and must be
    577 enabled for each selected denomination in the corresponding section by adding
    578 the option ``AGE_RESTRICTED = YES``, see `EXCHANGE COIN OPTIONS`_. However, the
    579 age groups are defined globally for all denominations.
    580 
    581 
    582 
    583 EXCHANGE OFFLINE SIGNING OPTIONS
    584 --------------------------------
    585 
    586 The following options must be in the section "[exchange-offline]".
    587 
    588 MASTER_PRIV_FILE
    589   Location of the master private key on disk. Only used by tools that
    590   can be run offline (as the master key is for offline signing).
    591   Mandatory.
    592 
    593 SECM_TOFU_FILE
    594   Where to store the public keys of both crypto helper modules.
    595   Used to persist the keys after the first invocation of the tool,
    596   so that if they ever change in the future, this is detected and
    597   the tool can abort.
    598   Mandatory.
    599 
    600 SECM_DENOM_PUBKEY
    601   Public key of the (RSA) crypto helper module. Optional. If not given,
    602   we will rely on TOFU.  Note that once TOFU has been established,
    603   this option will also be ignored.
    604 
    605 SECM_ESIGN_PUBKEY
    606   Public key of the (EdDSA) crypto helper module. Optional. If not given,
    607   we will rely on TOFU.  Note that once TOFU has been established,
    608   this option will also be ignored.
    609 
    610 
    611 EXCHANGE RSA CRYPTO HELPER OPTIONS
    612 ----------------------------------
    613 
    614 The following options must be in the section "[taler-exchange-secmod-rsa]".
    615 
    616 LOOKAHEAD_SIGN
    617   How long do we generate denomination and signing keys ahead of time?
    618 
    619 OVERLAP_DURATION
    620   How much should validity periods for coins overlap?
    621   Should be long enough to avoid problems with
    622   wallets picking one key and then due to network latency
    623   another key being valid.  The ``DURATION_WITHDRAW`` period
    624   must be longer than this value.
    625 
    626 SM_PRIV_KEY
    627   Where should the security module store its long-term private key?
    628 
    629 KEY_DIR
    630   Where should the security module store the private keys it manages?
    631 
    632 UNIXPATH
    633   On which path should the security module listen for signing requests?
    634 
    635 Note that the **taler-exchange-secmod-rsa** also evaluates the ``[coin_*]``
    636 configuration sections described below.
    637 
    638 
    639 EXCHANGE CS CRYPTO HELPER OPTIONS
    640 ---------------------------------
    641 
    642 The following options must be in the section "[taler-exchange-secmod-cs]".
    643 
    644 LOOKAHEAD_SIGN
    645   How long do we generate denomination and signing keys ahead of time?
    646 
    647 OVERLAP_DURATION
    648   How much should validity periods for coins overlap?
    649   Should be long enough to avoid problems with
    650   wallets picking one key and then due to network latency
    651   another key being valid.  The ``DURATION_WITHDRAW`` period
    652   must be longer than this value.
    653 
    654 SM_PRIV_KEY
    655   Where should the security module store its long-term private key?
    656 
    657 KEY_DIR
    658   Where should the security module store the private keys it manages?
    659 
    660 UNIXPATH
    661   On which path should the security module listen for signing requests?
    662 
    663 Note that the **taler-exchange-secmod-cs** also evaluates the ``[coin_*]``
    664 configuration sections described below.
    665 
    666 
    667 
    668 EXCHANGE EDDSA CRYPTO HELPER OPTIONS
    669 ------------------------------------
    670 
    671 The following options must be in the section "[taler-exchange-secmod-eddsa]".
    672 
    673 LOOKAHEAD_SIGN
    674   How long do we generate denomination and signing keys ahead of time?
    675 
    676 OVERLAP_DURATION
    677   How much should validity periods for coins overlap?
    678   Should be long enough to avoid problems with
    679   wallets picking one key and then due to network latency
    680   another key being valid.  The ``DURATION_WITHDRAW`` period
    681   must be longer than this value.
    682 
    683 DURATION
    684   For how long should EdDSA keys be valid for signing?
    685 
    686 SM_PRIV_KEY
    687   Where should the security module store its long-term private key?
    688 
    689 KEY_DIR
    690   Where should the security module store the private keys it manages?
    691 
    692 UNIXPATH
    693   On which path should the security module listen for signing requests?
    694 
    695 .. include:: frags/exchange-database.rst
    696 .. include:: frags/exchange-account.rst
    697 .. include:: frags/exchange-coin.rst
    698 
    699 EXCHANGE SANCTIONSCHECK OPTIONS
    700 -------------------------------
    701 
    702 This section configures the taler-exchange-sanctionlist tool to enforce
    703 sanctions. The tool scores KYC records in two dimensions, the quality
    704 of the match (rating) and the number of attributes that were found in
    705 both sets (confidence).
    706 
    707 The following options must be in the section "[exchange-sanctionscheck]".
    708 
    709 RATER_COMMAND
    710   Program (and command-line arguments) for the helper program to
    711   execute to compare sanction list records. Usually set to
    712   something like "robocop $SANCTIONLIST.json", but can be any
    713   program that reads KYC attributes in JSON line-by-line and
    714   outputs a rating (0-1), confidence (0-1) and free-form sanction list
    715   identifier for each JSON input received.
    716 
    717 MIN_ROW_FILENAME
    718   Name of the file where taler-exchange-sanctionscheck will store the
    719   last row process during sanction list evaluation. Not in thed atabase
    720   as we frequently need to reset it when we get a new list, so no
    721   transactionality is needed or even desirable. There should be no
    722   need to change the default.
    723 
    724 FREEZE_RATING_LIMIT
    725   Match quality rating (on a scale of [0,1]) that must be exceeded
    726   for the exchange to automatically freeze an account. The account
    727   must satisfy both the rating limit and the confidence limit to be
    728   frozen.
    729 
    730 FREEZE_CONFIDENCE_LIMIT
    731   Match confidence rating (on a scale of [0,1]) that must be exceeded
    732   for the exchange to automatically freeze an account. A rating of 0
    733   means no attributes were available, while a rating of 1 indicates that
    734   we could compare the acconts across all dimensions.
    735 
    736 INVESTIGATION_LIMIT
    737   Limit (on a scale of [0,1]) that must be exceeded for an account to
    738   be flagged for manual investigation. Only applies of the account
    739   is not automatically frozen. The limit given is compared against
    740   the quality rating divided by the confidence score.
    741   If set at 0.95, a modest 0.8 match with low 0.5 confidence will
    742   trigger (1.6 > 0.95), but a good 0.9 match with a super-high 1.0
    743   confidence would not (0.9 < 0.95). On the other hand, a bad 0.2 match
    744   with super-low 0.1 confidence would again trigger (2.0 > 0.95).
    745 
    746 
    747 SEE ALSO
    748 ========
    749 
    750 taler-exchange-dbinit(1), taler-exchange-httpd(1), taler-exchange-offline(1), taler-exchange-sanctionscheck(1)
    751 
    752 BUGS
    753 ====
    754 
    755 Report bugs by using https://bugs.taler.net/ or by sending electronic
    756 mail to <taler@gnu.org>.