aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-08-29 13:34:07 +0200
committerFlorian Dold <florian.dold@gmail.com>2019-08-29 13:34:19 +0200
commit180da005f4d8cf78121dfe765c47de060006e005 (patch)
tree264b7527fb14c73431498f78194d6e87e2bd92e2
parent7b20ee8c8d691c0d79403462411ec66c5ada36c4 (diff)
downloadexchange-180da005f4d8cf78121dfe765c47de060006e005.tar.gz
exchange-180da005f4d8cf78121dfe765c47de060006e005.zip
move documentation to docs repo
-rw-r--r--doc/Makefile.am16
-rw-r--r--doc/agpl.texi698
-rw-r--r--doc/brown-paper.css63
-rw-r--r--doc/configuration-format.texi73
-rw-r--r--doc/docstyle.css76
-rwxr-xr-xdoc/exchange-db-generate.sh3
-rw-r--r--doc/exchange-db.pngbin564934 -> 0 bytes
-rw-r--r--doc/fdl-1.3.texi506
-rw-r--r--doc/syntax.texi44
-rw-r--r--doc/taler-config.texi47
-rw-r--r--doc/taler-exchange.texi972
11 files changed, 0 insertions, 2498 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 09793ddcf..33bde2743 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -18,22 +18,6 @@ man_MANS = \
18 taler-exchange-benchmark.1 \ 18 taler-exchange-benchmark.1 \
19 taler.conf.5 19 taler.conf.5
20 20
21AM_MAKEINFOHTMLFLAGS = --no-split --css-ref=docstyle.css --css-ref=brown-paper.css
22
23DISTCLEANFILES = \
24 taler-exchange.cps \
25 taler-exchange.dvi
26
27info_TEXINFOS = \
28 taler-exchange.texi
29extra_TEXINFOS = \
30 fdl-1.3.texi \
31 agpl.texi \
32 syntax.texi
33EXTRA_DIST = \ 21EXTRA_DIST = \
34 coding-style.txt \ 22 coding-style.txt \
35 $(man_MANS) \ 23 $(man_MANS) \
36 $(extra_TEXINFOS) \
37 docstyle.css \
38 brown-paper.css \
39 exchange-db.png
diff --git a/doc/agpl.texi b/doc/agpl.texi
deleted file mode 100644
index e6ee662e3..000000000
--- a/doc/agpl.texi
+++ /dev/null
@@ -1,698 +0,0 @@
1@c The GNU Affero General Public License.
2@center Version 3, 19 November 2007
3
4@c This file is intended to be included within another document,
5@c hence no sectioning command or @node.
6
7@display
8Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
9
10Everyone is permitted to copy and distribute verbatim copies of this
11license document, but changing it is not allowed.
12@end display
13
14@heading Preamble
15
16The GNU Affero General Public License is a free, copyleft license
17for software and other kinds of works, specifically designed to ensure
18cooperation with the community in the case of network server software.
19
20The licenses for most software and other practical works are
21designed to take away your freedom to share and change the works. By
22contrast, our General Public Licenses are intended to guarantee your
23freedom to share and change all versions of a program--to make sure it
24remains free software for all its users.
25
26When we speak of free software, we are referring to freedom, not
27price. Our General Public Licenses are designed to make sure that you
28have the freedom to distribute copies of free software (and charge for
29them if you wish), that you receive source code or can get it if you
30want it, that you can change the software or use pieces of it in new
31free programs, and that you know you can do these things.
32
33Developers that use our General Public Licenses protect your rights
34with two steps: (1) assert copyright on the software, and (2) offer
35you this License which gives you legal permission to copy, distribute
36and/or modify the software.
37
38A secondary benefit of defending all users' freedom is that
39improvements made in alternate versions of the program, if they
40receive widespread use, become available for other developers to
41incorporate. Many developers of free software are heartened and
42encouraged by the resulting cooperation. However, in the case of
43software used on network servers, this result may fail to come about.
44The GNU General Public License permits making a modified version and
45letting the public access it on a server without ever releasing its
46source code to the public.
47
48The GNU Affero General Public License is designed specifically to
49ensure that, in such cases, the modified source code becomes available
50to the community. It requires the operator of a network server to
51provide the source code of the modified version running there to the
52users of that server. Therefore, public use of a modified version, on
53a publicly accessible server, gives the public access to the source
54code of the modified version.
55
56An older license, called the Affero General Public License and
57published by Affero, was designed to accomplish similar goals. This is
58a different license, not a version of the Affero GPL, but Affero has
59released a new version of the Affero GPL which permits relicensing under
60this license.
61
62The precise terms and conditions for copying, distribution and
63modification follow.
64
65@heading TERMS AND CONDITIONS
66
67@enumerate 0
68@item Definitions.
69
70``This License'' refers to version 3 of the GNU Affero General Public License.
71
72``Copyright'' also means copyright-like laws that apply to other kinds
73of works, such as semiconductor masks.
74
75``The Program'' refers to any copyrightable work licensed under this
76License. Each licensee is addressed as ``you''. ``Licensees'' and
77``recipients'' may be individuals or organizations.
78
79To ``modify'' a work means to copy from or adapt all or part of the work
80in a fashion requiring copyright permission, other than the making of
81an exact copy. The resulting work is called a ``modified version'' of
82the earlier work or a work ``based on'' the earlier work.
83
84A ``covered work'' means either the unmodified Program or a work based
85on the Program.
86
87To ``propagate'' a work means to do anything with it that, without
88permission, would make you directly or secondarily liable for
89infringement under applicable copyright law, except executing it on a
90computer or modifying a private copy. Propagation includes copying,
91distribution (with or without modification), making available to the
92public, and in some countries other activities as well.
93
94To ``convey'' a work means any kind of propagation that enables other
95parties to make or receive copies. Mere interaction with a user
96through a computer network, with no transfer of a copy, is not
97conveying.
98
99An interactive user interface displays ``Appropriate Legal Notices'' to
100the extent that it includes a convenient and prominently visible
101feature that (1) displays an appropriate copyright notice, and (2)
102tells the user that there is no warranty for the work (except to the
103extent that warranties are provided), that licensees may convey the
104work under this License, and how to view a copy of this License. If
105the interface presents a list of user commands or options, such as a
106menu, a prominent item in the list meets this criterion.
107
108@item Source Code.
109
110The ``source code'' for a work means the preferred form of the work for
111making modifications to it. ``Object code'' means any non-source form
112of a work.
113
114A ``Standard Interface'' means an interface that either is an official
115standard defined by a recognized standards body, or, in the case of
116interfaces specified for a particular programming language, one that
117is widely used among developers working in that language.
118
119The ``System Libraries'' of an executable work include anything, other
120than the work as a whole, that (a) is included in the normal form of
121packaging a Major Component, but which is not part of that Major
122Component, and (b) serves only to enable use of the work with that
123Major Component, or to implement a Standard Interface for which an
124implementation is available to the public in source code form. A
125``Major Component'', in this context, means a major essential component
126(kernel, window system, and so on) of the specific operating system
127(if any) on which the executable work runs, or a compiler used to
128produce the work, or an object code interpreter used to run it.
129
130The ``Corresponding Source'' for a work in object code form means all
131the source code needed to generate, install, and (for an executable
132work) run the object code and to modify the work, including scripts to
133control those activities. However, it does not include the work's
134System Libraries, or general-purpose tools or generally available free
135programs which are used unmodified in performing those activities but
136which are not part of the work. For example, Corresponding Source
137includes interface definition files associated with source files for
138the work, and the source code for shared libraries and dynamically
139linked subprograms that the work is specifically designed to require,
140such as by intimate data communication or control flow between those
141subprograms and other parts of the work.
142
143The Corresponding Source need not include anything that users can
144regenerate automatically from other parts of the Corresponding Source.
145
146The Corresponding Source for a work in source code form is that same
147work.
148
149@item Basic Permissions.
150
151All rights granted under this License are granted for the term of
152copyright on the Program, and are irrevocable provided the stated
153conditions are met. This License explicitly affirms your unlimited
154permission to run the unmodified Program. The output from running a
155covered work is covered by this License only if the output, given its
156content, constitutes a covered work. This License acknowledges your
157rights of fair use or other equivalent, as provided by copyright law.
158
159You may make, run and propagate covered works that you do not convey,
160without conditions so long as your license otherwise remains in force.
161You may convey covered works to others for the sole purpose of having
162them make modifications exclusively for you, or provide you with
163facilities for running those works, provided that you comply with the
164terms of this License in conveying all material for which you do not
165control copyright. Those thus making or running the covered works for
166you must do so exclusively on your behalf, under your direction and
167control, on terms that prohibit them from making any copies of your
168copyrighted material outside their relationship with you.
169
170Conveying under any other circumstances is permitted solely under the
171conditions stated below. Sublicensing is not allowed; section 10
172makes it unnecessary.
173
174@item Protecting Users' Legal Rights From Anti-Circumvention Law.
175
176No covered work shall be deemed part of an effective technological
177measure under any applicable law fulfilling obligations under article
17811 of the WIPO copyright treaty adopted on 20 December 1996, or
179similar laws prohibiting or restricting circumvention of such
180measures.
181
182When you convey a covered work, you waive any legal power to forbid
183circumvention of technological measures to the extent such
184circumvention is effected by exercising rights under this License with
185respect to the covered work, and you disclaim any intention to limit
186operation or modification of the work as a means of enforcing, against
187the work's users, your or third parties' legal rights to forbid
188circumvention of technological measures.
189
190@item Conveying Verbatim Copies.
191
192You may convey verbatim copies of the Program's source code as you
193receive it, in any medium, provided that you conspicuously and
194appropriately publish on each copy an appropriate copyright notice;
195keep intact all notices stating that this License and any
196non-permissive terms added in accord with section 7 apply to the code;
197keep intact all notices of the absence of any warranty; and give all
198recipients a copy of this License along with the Program.
199
200You may charge any price or no price for each copy that you convey,
201and you may offer support or warranty protection for a fee.
202
203@item Conveying Modified Source Versions.
204
205You may convey a work based on the Program, or the modifications to
206produce it from the Program, in the form of source code under the
207terms of section 4, provided that you also meet all of these
208conditions:
209
210@enumerate a
211@item
212The work must carry prominent notices stating that you modified it,
213and giving a relevant date.
214
215@item
216The work must carry prominent notices stating that it is released
217under this License and any conditions added under section 7. This
218requirement modifies the requirement in section 4 to ``keep intact all
219notices''.
220
221@item
222You must license the entire work, as a whole, under this License to
223anyone who comes into possession of a copy. This License will
224therefore apply, along with any applicable section 7 additional terms,
225to the whole of the work, and all its parts, regardless of how they
226are packaged. This License gives no permission to license the work in
227any other way, but it does not invalidate such permission if you have
228separately received it.
229
230@item
231If the work has interactive user interfaces, each must display
232Appropriate Legal Notices; however, if the Program has interactive
233interfaces that do not display Appropriate Legal Notices, your work
234need not make them do so.
235@end enumerate
236
237A compilation of a covered work with other separate and independent
238works, which are not by their nature extensions of the covered work,
239and which are not combined with it such as to form a larger program,
240in or on a volume of a storage or distribution medium, is called an
241``aggregate'' if the compilation and its resulting copyright are not
242used to limit the access or legal rights of the compilation's users
243beyond what the individual works permit. Inclusion of a covered work
244in an aggregate does not cause this License to apply to the other
245parts of the aggregate.
246
247@item Conveying Non-Source Forms.
248
249You may convey a covered work in object code form under the terms of
250sections 4 and 5, provided that you also convey the machine-readable
251Corresponding Source under the terms of this License, in one of these
252ways:
253
254@enumerate a
255@item
256Convey the object code in, or embodied in, a physical product
257(including a physical distribution medium), accompanied by the
258Corresponding Source fixed on a durable physical medium customarily
259used for software interchange.
260
261@item
262Convey the object code in, or embodied in, a physical product
263(including a physical distribution medium), accompanied by a written
264offer, valid for at least three years and valid for as long as you
265offer spare parts or customer support for that product model, to give
266anyone who possesses the object code either (1) a copy of the
267Corresponding Source for all the software in the product that is
268covered by this License, on a durable physical medium customarily used
269for software interchange, for a price no more than your reasonable
270cost of physically performing this conveying of source, or (2) access
271to copy the Corresponding Source from a network server at no charge.
272
273@item
274Convey individual copies of the object code with a copy of the written
275offer to provide the Corresponding Source. This alternative is
276allowed only occasionally and noncommercially, and only if you
277received the object code with such an offer, in accord with subsection
2786b.
279
280@item
281Convey the object code by offering access from a designated place
282(gratis or for a charge), and offer equivalent access to the
283Corresponding Source in the same way through the same place at no
284further charge. You need not require recipients to copy the
285Corresponding Source along with the object code. If the place to copy
286the object code is a network server, the Corresponding Source may be
287on a different server (operated by you or a third party) that supports
288equivalent copying facilities, provided you maintain clear directions
289next to the object code saying where to find the Corresponding Source.
290Regardless of what server hosts the Corresponding Source, you remain
291obligated to ensure that it is available for as long as needed to
292satisfy these requirements.
293
294@item
295Convey the object code using peer-to-peer transmission, provided you
296inform other peers where the object code and Corresponding Source of
297the work are being offered to the general public at no charge under
298subsection 6d.
299
300@end enumerate
301
302A separable portion of the object code, whose source code is excluded
303from the Corresponding Source as a System Library, need not be
304included in conveying the object code work.
305
306A ``User Product'' is either (1) a ``consumer product'', which means any
307tangible personal property which is normally used for personal,
308family, or household purposes, or (2) anything designed or sold for
309incorporation into a dwelling. In determining whether a product is a
310consumer product, doubtful cases shall be resolved in favor of
311coverage. For a particular product received by a particular user,
312``normally used'' refers to a typical or common use of that class of
313product, regardless of the status of the particular user or of the way
314in which the particular user actually uses, or expects or is expected
315to use, the product. A product is a consumer product regardless of
316whether the product has substantial commercial, industrial or
317non-consumer uses, unless such uses represent the only significant
318mode of use of the product.
319
320``Installation Information'' for a User Product means any methods,
321procedures, authorization keys, or other information required to
322install and execute modified versions of a covered work in that User
323Product from a modified version of its Corresponding Source. The
324information must suffice to ensure that the continued functioning of
325the modified object code is in no case prevented or interfered with
326solely because modification has been made.
327
328If you convey an object code work under this section in, or with, or
329specifically for use in, a User Product, and the conveying occurs as
330part of a transaction in which the right of possession and use of the
331User Product is transferred to the recipient in perpetuity or for a
332fixed term (regardless of how the transaction is characterized), the
333Corresponding Source conveyed under this section must be accompanied
334by the Installation Information. But this requirement does not apply
335if neither you nor any third party retains the ability to install
336modified object code on the User Product (for example, the work has
337been installed in ROM).
338
339The requirement to provide Installation Information does not include a
340requirement to continue to provide support service, warranty, or
341updates for a work that has been modified or installed by the
342recipient, or for the User Product in which it has been modified or
343installed. Access to a network may be denied when the modification
344itself materially and adversely affects the operation of the network
345or violates the rules and protocols for communication across the
346network.
347
348Corresponding Source conveyed, and Installation Information provided,
349in accord with this section must be in a format that is publicly
350documented (and with an implementation available to the public in
351source code form), and must require no special password or key for
352unpacking, reading or copying.
353
354@item Additional Terms.
355
356``Additional permissions'' are terms that supplement the terms of this
357License by making exceptions from one or more of its conditions.
358Additional permissions that are applicable to the entire Program shall
359be treated as though they were included in this License, to the extent
360that they are valid under applicable law. If additional permissions
361apply only to part of the Program, that part may be used separately
362under those permissions, but the entire Program remains governed by
363this License without regard to the additional permissions.
364
365When you convey a copy of a covered work, you may at your option
366remove any additional permissions from that copy, or from any part of
367it. (Additional permissions may be written to require their own
368removal in certain cases when you modify the work.) You may place
369additional permissions on material, added by you to a covered work,
370for which you have or can give appropriate copyright permission.
371
372Notwithstanding any other provision of this License, for material you
373add to a covered work, you may (if authorized by the copyright holders
374of that material) supplement the terms of this License with terms:
375
376@enumerate a
377@item
378Disclaiming warranty or limiting liability differently from the terms
379of sections 15 and 16 of this License; or
380
381@item
382Requiring preservation of specified reasonable legal notices or author
383attributions in that material or in the Appropriate Legal Notices
384displayed by works containing it; or
385
386@item
387Prohibiting misrepresentation of the origin of that material, or
388requiring that modified versions of such material be marked in
389reasonable ways as different from the original version; or
390
391@item
392Limiting the use for publicity purposes of names of licensors or
393authors of the material; or
394
395@item
396Declining to grant rights under trademark law for use of some trade
397names, trademarks, or service marks; or
398
399@item
400Requiring indemnification of licensors and authors of that material by
401anyone who conveys the material (or modified versions of it) with
402contractual assumptions of liability to the recipient, for any
403liability that these contractual assumptions directly impose on those
404licensors and authors.
405@end enumerate
406
407All other non-permissive additional terms are considered ``further
408restrictions'' within the meaning of section 10. If the Program as you
409received it, or any part of it, contains a notice stating that it is
410governed by this License along with a term that is a further
411restriction, you may remove that term. If a license document contains
412a further restriction but permits relicensing or conveying under this
413License, you may add to a covered work material governed by the terms
414of that license document, provided that the further restriction does
415not survive such relicensing or conveying.
416
417If you add terms to a covered work in accord with this section, you
418must place, in the relevant source files, a statement of the
419additional terms that apply to those files, or a notice indicating
420where to find the applicable terms.
421
422Additional terms, permissive or non-permissive, may be stated in the
423form of a separately written license, or stated as exceptions; the
424above requirements apply either way.
425
426@item Termination.
427
428You may not propagate or modify a covered work except as expressly
429provided under this License. Any attempt otherwise to propagate or
430modify it is void, and will automatically terminate your rights under
431this License (including any patent licenses granted under the third
432paragraph of section 11).
433
434However, if you cease all violation of this License, then your license
435from a particular copyright holder is reinstated (a) provisionally,
436unless and until the copyright holder explicitly and finally
437terminates your license, and (b) permanently, if the copyright holder
438fails to notify you of the violation by some reasonable means prior to
43960 days after the cessation.
440
441Moreover, your license from a particular copyright holder is
442reinstated permanently if the copyright holder notifies you of the
443violation by some reasonable means, this is the first time you have
444received notice of violation of this License (for any work) from that
445copyright holder, and you cure the violation prior to 30 days after
446your receipt of the notice.
447
448Termination of your rights under this section does not terminate the
449licenses of parties who have received copies or rights from you under
450this License. If your rights have been terminated and not permanently
451reinstated, you do not qualify to receive new licenses for the same
452material under section 10.
453
454@item Acceptance Not Required for Having Copies.
455
456You are not required to accept this License in order to receive or run
457a copy of the Program. Ancillary propagation of a covered work
458occurring solely as a consequence of using peer-to-peer transmission
459to receive a copy likewise does not require acceptance. However,
460nothing other than this License grants you permission to propagate or
461modify any covered work. These actions infringe copyright if you do
462not accept this License. Therefore, by modifying or propagating a
463covered work, you indicate your acceptance of this License to do so.
464
465@item Automatic Licensing of Downstream Recipients.
466
467Each time you convey a covered work, the recipient automatically
468receives a license from the original licensors, to run, modify and
469propagate that work, subject to this License. You are not responsible
470for enforcing compliance by third parties with this License.
471
472An ``entity transaction'' is a transaction transferring control of an
473organization, or substantially all assets of one, or subdividing an
474organization, or merging organizations. If propagation of a covered
475work results from an entity transaction, each party to that
476transaction who receives a copy of the work also receives whatever
477licenses to the work the party's predecessor in interest had or could
478give under the previous paragraph, plus a right to possession of the
479Corresponding Source of the work from the predecessor in interest, if
480the predecessor has it or can get it with reasonable efforts.
481
482You may not impose any further restrictions on the exercise of the
483rights granted or affirmed under this License. For example, you may
484not impose a license fee, royalty, or other charge for exercise of
485rights granted under this License, and you may not initiate litigation
486(including a cross-claim or counterclaim in a lawsuit) alleging that
487any patent claim is infringed by making, using, selling, offering for
488sale, or importing the Program or any portion of it.
489
490@item Patents.
491
492A ``contributor'' is a copyright holder who authorizes use under this
493License of the Program or a work on which the Program is based. The
494work thus licensed is called the contributor's ``contributor version''.
495
496A contributor's ``essential patent claims'' are all patent claims owned
497or controlled by the contributor, whether already acquired or
498hereafter acquired, that would be infringed by some manner, permitted
499by this License, of making, using, or selling its contributor version,
500but do not include claims that would be infringed only as a
501consequence of further modification of the contributor version. For
502purposes of this definition, ``control'' includes the right to grant
503patent sublicenses in a manner consistent with the requirements of
504this License.
505
506Each contributor grants you a non-exclusive, worldwide, royalty-free
507patent license under the contributor's essential patent claims, to
508make, use, sell, offer for sale, import and otherwise run, modify and
509propagate the contents of its contributor version.
510
511In the following three paragraphs, a ``patent license'' is any express
512agreement or commitment, however denominated, not to enforce a patent
513(such as an express permission to practice a patent or covenant not to
514sue for patent infringement). To ``grant'' such a patent license to a
515party means to make such an agreement or commitment not to enforce a
516patent against the party.
517
518If you convey a covered work, knowingly relying on a patent license,
519and the Corresponding Source of the work is not available for anyone
520to copy, free of charge and under the terms of this License, through a
521publicly available network server or other readily accessible means,
522then you must either (1) cause the Corresponding Source to be so
523available, or (2) arrange to deprive yourself of the benefit of the
524patent license for this particular work, or (3) arrange, in a manner
525consistent with the requirements of this License, to extend the patent
526license to downstream recipients. ``Knowingly relying'' means you have
527actual knowledge that, but for the patent license, your conveying the
528covered work in a country, or your recipient's use of the covered work
529in a country, would infringe one or more identifiable patents in that
530country that you have reason to believe are valid.
531
532If, pursuant to or in connection with a single transaction or
533arrangement, you convey, or propagate by procuring conveyance of, a
534covered work, and grant a patent license to some of the parties
535receiving the covered work authorizing them to use, propagate, modify
536or convey a specific copy of the covered work, then the patent license
537you grant is automatically extended to all recipients of the covered
538work and works based on it.
539
540A patent license is ``discriminatory'' if it does not include within the
541scope of its coverage, prohibits the exercise of, or is conditioned on
542the non-exercise of one or more of the rights that are specifically
543granted under this License. You may not convey a covered work if you
544are a party to an arrangement with a third party that is in the
545business of distributing software, under which you make payment to the
546third party based on the extent of your activity of conveying the
547work, and under which the third party grants, to any of the parties
548who would receive the covered work from you, a discriminatory patent
549license (a) in connection with copies of the covered work conveyed by
550you (or copies made from those copies), or (b) primarily for and in
551connection with specific products or compilations that contain the
552covered work, unless you entered into that arrangement, or that patent
553license was granted, prior to 28 March 2007.
554
555Nothing in this License shall be construed as excluding or limiting
556any implied license or other defenses to infringement that may
557otherwise be available to you under applicable patent law.
558
559@item No Surrender of Others' Freedom.
560
561If conditions are imposed on you (whether by court order, agreement or
562otherwise) that contradict the conditions of this License, they do not
563excuse you from the conditions of this License. If you cannot convey
564a covered work so as to satisfy simultaneously your obligations under
565this License and any other pertinent obligations, then as a
566consequence you may not convey it at all. For example, if you agree
567to terms that obligate you to collect a royalty for further conveying
568from those to whom you convey the Program, the only way you could
569satisfy both those terms and this License would be to refrain entirely
570from conveying the Program.
571
572@item Remote Network Interaction; Use with the GNU General Public License.
573
574Notwithstanding any other provision of this License, if you modify the
575Program, your modified version must prominently offer all users interacting
576with it remotely through a computer network (if your version supports such
577interaction) an opportunity to receive the Corresponding Source of your
578version by providing access to the Corresponding Source from a network
579server at no charge, through some standard or customary means of
580facilitating copying of software. This Corresponding Source shall include
581the Corresponding Source for any work covered by version 3 of the GNU
582General Public License that is incorporated pursuant to the following
583paragraph.
584
585Notwithstanding any other provision of this License, you have permission to
586link or combine any covered work with a work licensed under version 3 of
587the GNU General Public License into a single combined work, and to convey
588the resulting work. The terms of this License will continue to apply to
589the part which is the covered work, but the work with which it is combined
590will remain governed by version 3 of the GNU General Public License.
591
592@item Revised Versions of this License.
593
594The Free Software Foundation may publish revised and/or new versions
595of the GNU Affero General Public License from time to time. Such new
596versions will be similar in spirit to the present version, but may
597differ in detail to address new problems or concerns.
598
599Each version is given a distinguishing version number. If the Program
600specifies that a certain numbered version of the GNU Affero General Public
601License ``or any later version'' applies to it, you have the option of
602following the terms and conditions either of that numbered version or
603of any later version published by the Free Software Foundation. If
604the Program does not specify a version number of the GNU Affero General
605Public License, you may choose any version ever published by the Free
606Software Foundation.
607
608If the Program specifies that a proxy can decide which future versions
609of the GNU Affero General Public License can be used, that proxy's public
610statement of acceptance of a version permanently authorizes you to
611choose that version for the Program.
612
613Later license versions may give you additional or different
614permissions. However, no additional obligations are imposed on any
615author or copyright holder as a result of your choosing to follow a
616later version.
617
618@item Disclaimer of Warranty.
619
620THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
621APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
622HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
623WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
624LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
625A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
626PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
627DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
628CORRECTION.
629
630@item Limitation of Liability.
631
632IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
633WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
634CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
635INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
636ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
637NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
638LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
639TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
640PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
641
642@item Interpretation of Sections 15 and 16.
643
644If the disclaimer of warranty and limitation of liability provided
645above cannot be given local legal effect according to their terms,
646reviewing courts shall apply local law that most closely approximates
647an absolute waiver of all civil liability in connection with the
648Program, unless a warranty or assumption of liability accompanies a
649copy of the Program in return for a fee.
650
651@end enumerate
652
653@heading END OF TERMS AND CONDITIONS
654
655@heading How to Apply These Terms to Your New Programs
656
657If you develop a new program, and you want it to be of the greatest
658possible use to the public, the best way to achieve this is to make it
659free software which everyone can redistribute and change under these
660terms.
661
662To do so, attach the following notices to the program. It is safest
663to attach them to the start of each source file to most effectively
664state the exclusion of warranty; and each file should have at least
665the ``copyright'' line and a pointer to where the full notice is found.
666
667@smallexample
668@var{one line to give the program's name and a brief idea of what it does.}
669Copyright (C) @var{year} @var{name of author}
670
671This program is free software: you can redistribute it and/or modify
672it under the terms of the GNU Affero General Public License as published by
673the Free Software Foundation, either version 3 of the License, or (at
674your option) any later version.
675
676This program is distributed in the hope that it will be useful, but
677WITHOUT ANY WARRANTY; without even the implied warranty of
678MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
679Affero General Public License for more details.
680
681You should have received a copy of the GNU Affero General Public License
682along with this program. If not, see @url{http://www.gnu.org/licenses/}.
683@end smallexample
684
685Also add information on how to contact you by electronic and paper mail.
686
687If your software can interact with users remotely through a computer
688network, you should also make sure that it provides a way for users to
689get its source. For example, if your program is a web application, its
690interface could display a ``Source'' link that leads users to an archive
691of the code. There are many ways you could offer source, and different
692solutions will be better for different programs; see section 13 for the
693specific requirements.
694
695You should also get your employer (if you work as a programmer) or school,
696if any, to sign a ``copyright disclaimer'' for the program, if necessary.
697For more information on this, and how to apply and follow the GNU AGPL, see
698@url{http://www.gnu.org/licenses/}.
diff --git a/doc/brown-paper.css b/doc/brown-paper.css
deleted file mode 100644
index 65e2e7902..000000000
--- a/doc/brown-paper.css
+++ /dev/null
@@ -1,63 +0,0 @@
1/*
2
3Brown Paper style from goldblog.com.ua (c) Zaripov Yura <yur4ik7@ukr.net>
4
5*/
6
7.hljs {
8 display: block;
9 overflow-x: auto;
10 padding: 0.5em;
11}
12
13.hljs-keyword,
14.hljs-selector-tag,
15.hljs-literal {
16 color:#005599;
17 font-weight:bold;
18}
19
20.hljs,
21.hljs-subst {
22 color: #363c69;
23}
24
25.hljs-string,
26.hljs-title,
27.hljs-section,
28.hljs-type,
29.hljs-attribute,
30.hljs-symbol,
31.hljs-bullet,
32.hljs-built_in,
33.hljs-addition,
34.hljs-variable,
35.hljs-template-tag,
36.hljs-template-variable,
37.hljs-link,
38.hljs-name {
39 color: #2c009f;
40}
41
42.hljs-comment,
43.hljs-quote,
44.hljs-meta,
45.hljs-deletion {
46 color: #802022;
47}
48
49.hljs-keyword,
50.hljs-selector-tag,
51.hljs-literal,
52.hljs-doctag,
53.hljs-title,
54.hljs-section,
55.hljs-type,
56.hljs-name,
57.hljs-strong {
58 font-weight: bold;
59}
60
61.hljs-emphasis {
62 font-style: italic;
63}
diff --git a/doc/configuration-format.texi b/doc/configuration-format.texi
deleted file mode 100644
index 6453ba601..000000000
--- a/doc/configuration-format.texi
+++ /dev/null
@@ -1,73 +0,0 @@
1@c This file is used both in the exchange and merchant
2@c manuals. Edits should be propagated to both Gits!
3
4@node Configuration format
5@section Configuration format
6@cindex configuration
7
8In Taler realm, any component obeys to the same pattern to get configuration
9values. According to this pattern, once the component has been installed, the
10installation deploys default values in @cite{$@{prefix@}/share/taler/config.d/}, in
11@cite{.conf} files. In order to override these defaults, the user can write a custom
12@cite{.conf} file and either pass it to the component at execution time, or name it
13@cite{taler.conf} and place it under @cite{$HOME/.config/}.
14
15
16A config file is a text file containing @cite{sections}, and each section contains
17its @cite{values}. The right format follows:
18
19@example
20[section1]
21value1 = string
22value2 = 23
23
24[section2]
25value21 = string
26value22 = /path22
27@end example
28
29Throughout any configuration file, it is possible to use @code{$}-prefixed variables,
30like @code{$VAR}, especially when they represent filesystem paths.
31It is also possible to provide defaults values for those variables that are unset,
32by using the following syntax: @code{$@{VAR:-default@}}.
33However, there are two ways a user can set @code{$}-prefixable variables:
34
35by defining them under a @code{[paths]} section, see example below,
36
37@example
38[paths]
39TALER_DEPLOYMENT_SHARED = $@{HOME@}/shared-data
40..
41[section-x]
42path-x = $@{TALER_DEPLOYMENT_SHARED@}/x
43@end example
44
45or by setting them in the environment:
46
47@example
48$ export VAR=/x
49@end example
50
51The configuration loader will give precedence to variables set under @code{[path]},
52though.
53
54The utility @code{taler-config}, which gets installed along with the exchange, serves
55to get and set configuration values without directly editing the @cite{.conf}.
56The option @code{-f} is particularly useful to resolve pathnames, when they use
57several levels of @code{$}-expanded variables. See @code{taler-config --help}.
58
59Note that, in this stage of development, the file @code{$HOME/.config/taler.conf}
60can contain sections for @emph{all} the component. For example, both an exchange and
61a bank can read values from it.
62
63The repository @code{git://taler.net/deployment} contains examples of configuration
64file used in our demos. See under @code{deployment/config}.
65
66@cartouche
67@quotation Note
68Expectably, some components will not work just by using default values, as their
69work is often interdependent. For example, a merchant needs to know an exchange
70URL, or a database name.
71@end quotation
72@end cartouche
73
diff --git a/doc/docstyle.css b/doc/docstyle.css
deleted file mode 100644
index c91d3f796..000000000
--- a/doc/docstyle.css
+++ /dev/null
@@ -1,76 +0,0 @@
1html, body {
2 font-size: 1em;
3 text-align: left;
4 text-decoration: none;
5}
6html { background-color: #e7e7e7; }
7
8body {
9 max-width: 74.92em;
10 margin: 0 auto;
11 padding: .5em 1em 1em 1em;
12 background-color: white;
13 border: .1em solid #c0c0c0;
14}
15
16h1, h2, h3, h4 { color: #333; }
17h5, h6, dt { color: #222; }
18
19
20a h3 {
21 color: #005090;
22}
23
24a[href] { color: #005090; }
25a[href]:visited { color: #100070; }
26a[href]:active, a[href]:hover {
27 color: #100070;
28 text-decoration: none;
29}
30
31.linkrow {
32 margin: 3em 0;
33}
34
35.linkrow {
36 text-align: center;
37}
38
39div.example { padding: .8em 1.2em .4em; }
40pre.example { padding: .8em 1.2em; }
41div.example, pre.example {
42 margin: 1em 0 1em 3% ;
43 -webkit-border-radius: .3em;
44 -moz-border-radius: .3em;
45 border-radius: .3em;
46 border: 1px solid #d4cbb6;
47 background-color: #f2efe4;
48}
49div.example > pre.example {
50 padding: 0 0 .4em;
51 margin: 0;
52 border: none;
53}
54
55
56/* This makes the very long tables of contents in Gnulib and other
57 manuals easier to read. */
58.contents ul, .shortcontents ul { font-weight: bold; }
59.contents ul ul, .shortcontents ul ul { font-weight: normal; }
60.contents ul { list-style: none; }
61
62/* For colored navigation bars (Emacs manual): make the bar extend
63 across the whole width of the page and give it a decent height. */
64.header, .node { margin: 0 -1em; padding: 0 1em; }
65.header p, .node p { line-height: 2em; }
66
67/* For navigation links */
68.node a, .header a { display: inline-block; line-height: 2em; }
69.node a:hover, .header a:hover { background: #f2efe4; }
70
71table.cartouche {
72 border-collapse: collapse;
73 border-color: darkred;
74 border-style: solid;
75 border-width: 3px;
76}
diff --git a/doc/exchange-db-generate.sh b/doc/exchange-db-generate.sh
deleted file mode 100755
index b296e0c9d..000000000
--- a/doc/exchange-db-generate.sh
+++ /dev/null
@@ -1,3 +0,0 @@
1#!/bin/sh
2taler-exchange-dbinit -r
3java -jar schemaSpy_5.0.0.jar -t pgsql -db taler -o taler -host localhost -dp /usr/share/java/postgresql-jdbc3-9.2.jar -u grothoff -p test -s public -hq
diff --git a/doc/exchange-db.png b/doc/exchange-db.png
deleted file mode 100644
index 421e5941b..000000000
--- a/doc/exchange-db.png
+++ /dev/null
Binary files differ
diff --git a/doc/fdl-1.3.texi b/doc/fdl-1.3.texi
deleted file mode 100644
index 8805f1a47..000000000
--- a/doc/fdl-1.3.texi
+++ /dev/null
@@ -1,506 +0,0 @@
1@c The GNU Free Documentation License.
2@center Version 1.3, 3 November 2008
3
4@c This file is intended to be included within another document,
5@c hence no sectioning command or @node.
6
7@display
8Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
9@uref{http://fsf.org/}
10
11Everyone is permitted to copy and distribute verbatim copies
12of this license document, but changing it is not allowed.
13@end display
14
15@enumerate 0
16@item
17PREAMBLE
18
19The purpose of this License is to make a manual, textbook, or other
20functional and useful document @dfn{free} in the sense of freedom: to
21assure everyone the effective freedom to copy and redistribute it,
22with or without modifying it, either commercially or noncommercially.
23Secondarily, this License preserves for the author and publisher a way
24to get credit for their work, while not being considered responsible
25for modifications made by others.
26
27This License is a kind of ``copyleft'', which means that derivative
28works of the document must themselves be free in the same sense. It
29complements the GNU General Public License, which is a copyleft
30license designed for free software.
31
32We have designed this License in order to use it for manuals for free
33software, because free software needs free documentation: a free
34program should come with manuals providing the same freedoms that the
35software does. But this License is not limited to software manuals;
36it can be used for any textual work, regardless of subject matter or
37whether it is published as a printed book. We recommend this License
38principally for works whose purpose is instruction or reference.
39
40@item
41APPLICABILITY AND DEFINITIONS
42
43This License applies to any manual or other work, in any medium, that
44contains a notice placed by the copyright holder saying it can be
45distributed under the terms of this License. Such a notice grants a
46world-wide, royalty-free license, unlimited in duration, to use that
47work under the conditions stated herein. The ``Document'', below,
48refers to any such manual or work. Any member of the public is a
49licensee, and is addressed as ``you''. You accept the license if you
50copy, modify or distribute the work in a way requiring permission
51under copyright law.
52
53A ``Modified Version'' of the Document means any work containing the
54Document or a portion of it, either copied verbatim, or with
55modifications and/or translated into another language.
56
57A ``Secondary Section'' is a named appendix or a front-matter section
58of the Document that deals exclusively with the relationship of the
59publishers or authors of the Document to the Document's overall
60subject (or to related matters) and contains nothing that could fall
61directly within that overall subject. (Thus, if the Document is in
62part a textbook of mathematics, a Secondary Section may not explain
63any mathematics.) The relationship could be a matter of historical
64connection with the subject or with related matters, or of legal,
65commercial, philosophical, ethical or political position regarding
66them.
67
68The ``Invariant Sections'' are certain Secondary Sections whose titles
69are designated, as being those of Invariant Sections, in the notice
70that says that the Document is released under this License. If a
71section does not fit the above definition of Secondary then it is not
72allowed to be designated as Invariant. The Document may contain zero
73Invariant Sections. If the Document does not identify any Invariant
74Sections then there are none.
75
76The ``Cover Texts'' are certain short passages of text that are listed,
77as Front-Cover Texts or Back-Cover Texts, in the notice that says that
78the Document is released under this License. A Front-Cover Text may
79be at most 5 words, and a Back-Cover Text may be at most 25 words.
80
81A ``Transparent'' copy of the Document means a machine-readable copy,
82represented in a format whose specification is available to the
83general public, that is suitable for revising the document
84straightforwardly with generic text editors or (for images composed of
85pixels) generic paint programs or (for drawings) some widely available
86drawing editor, and that is suitable for input to text formatters or
87for automatic translation to a variety of formats suitable for input
88to text formatters. A copy made in an otherwise Transparent file
89format whose markup, or absence of markup, has been arranged to thwart
90or discourage subsequent modification by readers is not Transparent.
91An image format is not Transparent if used for any substantial amount
92of text. A copy that is not ``Transparent'' is called ``Opaque''.
93
94Examples of suitable formats for Transparent copies include plain
95@sc{ascii} without markup, Texinfo input format, La@TeX{} input
96format, @acronym{SGML} or @acronym{XML} using a publicly available
97@acronym{DTD}, and standard-conforming simple @acronym{HTML},
98PostScript or @acronym{PDF} designed for human modification. Examples
99of transparent image formats include @acronym{PNG}, @acronym{XCF} and
100@acronym{JPG}. Opaque formats include proprietary formats that can be
101read and edited only by proprietary word processors, @acronym{SGML} or
102@acronym{XML} for which the @acronym{DTD} and/or processing tools are
103not generally available, and the machine-generated @acronym{HTML},
104PostScript or @acronym{PDF} produced by some word processors for
105output purposes only.
106
107The ``Title Page'' means, for a printed book, the title page itself,
108plus such following pages as are needed to hold, legibly, the material
109this License requires to appear in the title page. For works in
110formats which do not have any title page as such, ``Title Page'' means
111the text near the most prominent appearance of the work's title,
112preceding the beginning of the body of the text.
113
114The ``publisher'' means any person or entity that distributes copies
115of the Document to the public.
116
117A section ``Entitled XYZ'' means a named subunit of the Document whose
118title either is precisely XYZ or contains XYZ in parentheses following
119text that translates XYZ in another language. (Here XYZ stands for a
120specific section name mentioned below, such as ``Acknowledgements'',
121``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
122of such a section when you modify the Document means that it remains a
123section ``Entitled XYZ'' according to this definition.
124
125The Document may include Warranty Disclaimers next to the notice which
126states that this License applies to the Document. These Warranty
127Disclaimers are considered to be included by reference in this
128License, but only as regards disclaiming warranties: any other
129implication that these Warranty Disclaimers may have is void and has
130no effect on the meaning of this License.
131
132@item
133VERBATIM COPYING
134
135You may copy and distribute the Document in any medium, either
136commercially or noncommercially, provided that this License, the
137copyright notices, and the license notice saying this License applies
138to the Document are reproduced in all copies, and that you add no other
139conditions whatsoever to those of this License. You may not use
140technical measures to obstruct or control the reading or further
141copying of the copies you make or distribute. However, you may accept
142compensation in exchange for copies. If you distribute a large enough
143number of copies you must also follow the conditions in section 3.
144
145You may also lend copies, under the same conditions stated above, and
146you may publicly display copies.
147
148@item
149COPYING IN QUANTITY
150
151If you publish printed copies (or copies in media that commonly have
152printed covers) of the Document, numbering more than 100, and the
153Document's license notice requires Cover Texts, you must enclose the
154copies in covers that carry, clearly and legibly, all these Cover
155Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
156the back cover. Both covers must also clearly and legibly identify
157you as the publisher of these copies. The front cover must present
158the full title with all words of the title equally prominent and
159visible. You may add other material on the covers in addition.
160Copying with changes limited to the covers, as long as they preserve
161the title of the Document and satisfy these conditions, can be treated
162as verbatim copying in other respects.
163
164If the required texts for either cover are too voluminous to fit
165legibly, you should put the first ones listed (as many as fit
166reasonably) on the actual cover, and continue the rest onto adjacent
167pages.
168
169If you publish or distribute Opaque copies of the Document numbering
170more than 100, you must either include a machine-readable Transparent
171copy along with each Opaque copy, or state in or with each Opaque copy
172a computer-network location from which the general network-using
173public has access to download using public-standard network protocols
174a complete Transparent copy of the Document, free of added material.
175If you use the latter option, you must take reasonably prudent steps,
176when you begin distribution of Opaque copies in quantity, to ensure
177that this Transparent copy will remain thus accessible at the stated
178location until at least one year after the last time you distribute an
179Opaque copy (directly or through your agents or retailers) of that
180edition to the public.
181
182It is requested, but not required, that you contact the authors of the
183Document well before redistributing any large number of copies, to give
184them a chance to provide you with an updated version of the Document.
185
186@item
187MODIFICATIONS
188
189You may copy and distribute a Modified Version of the Document under
190the conditions of sections 2 and 3 above, provided that you release
191the Modified Version under precisely this License, with the Modified
192Version filling the role of the Document, thus licensing distribution
193and modification of the Modified Version to whoever possesses a copy
194of it. In addition, you must do these things in the Modified Version:
195
196@enumerate A
197@item
198Use in the Title Page (and on the covers, if any) a title distinct
199from that of the Document, and from those of previous versions
200(which should, if there were any, be listed in the History section
201of the Document). You may use the same title as a previous version
202if the original publisher of that version gives permission.
203
204@item
205List on the Title Page, as authors, one or more persons or entities
206responsible for authorship of the modifications in the Modified
207Version, together with at least five of the principal authors of the
208Document (all of its principal authors, if it has fewer than five),
209unless they release you from this requirement.
210
211@item
212State on the Title page the name of the publisher of the
213Modified Version, as the publisher.
214
215@item
216Preserve all the copyright notices of the Document.
217
218@item
219Add an appropriate copyright notice for your modifications
220adjacent to the other copyright notices.
221
222@item
223Include, immediately after the copyright notices, a license notice
224giving the public permission to use the Modified Version under the
225terms of this License, in the form shown in the Addendum below.
226
227@item
228Preserve in that license notice the full lists of Invariant Sections
229and required Cover Texts given in the Document's license notice.
230
231@item
232Include an unaltered copy of this License.
233
234@item
235Preserve the section Entitled ``History'', Preserve its Title, and add
236to it an item stating at least the title, year, new authors, and
237publisher of the Modified Version as given on the Title Page. If
238there is no section Entitled ``History'' in the Document, create one
239stating the title, year, authors, and publisher of the Document as
240given on its Title Page, then add an item describing the Modified
241Version as stated in the previous sentence.
242
243@item
244Preserve the network location, if any, given in the Document for
245public access to a Transparent copy of the Document, and likewise
246the network locations given in the Document for previous versions
247it was based on. These may be placed in the ``History'' section.
248You may omit a network location for a work that was published at
249least four years before the Document itself, or if the original
250publisher of the version it refers to gives permission.
251
252@item
253For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
254the Title of the section, and preserve in the section all the
255substance and tone of each of the contributor acknowledgements and/or
256dedications given therein.
257
258@item
259Preserve all the Invariant Sections of the Document,
260unaltered in their text and in their titles. Section numbers
261or the equivalent are not considered part of the section titles.
262
263@item
264Delete any section Entitled ``Endorsements''. Such a section
265may not be included in the Modified Version.
266
267@item
268Do not retitle any existing section to be Entitled ``Endorsements'' or
269to conflict in title with any Invariant Section.
270
271@item
272Preserve any Warranty Disclaimers.
273@end enumerate
274
275If the Modified Version includes new front-matter sections or
276appendices that qualify as Secondary Sections and contain no material
277copied from the Document, you may at your option designate some or all
278of these sections as invariant. To do this, add their titles to the
279list of Invariant Sections in the Modified Version's license notice.
280These titles must be distinct from any other section titles.
281
282You may add a section Entitled ``Endorsements'', provided it contains
283nothing but endorsements of your Modified Version by various
284parties---for example, statements of peer review or that the text has
285been approved by an organization as the authoritative definition of a
286standard.
287
288You may add a passage of up to five words as a Front-Cover Text, and a
289passage of up to 25 words as a Back-Cover Text, to the end of the list
290of Cover Texts in the Modified Version. Only one passage of
291Front-Cover Text and one of Back-Cover Text may be added by (or
292through arrangements made by) any one entity. If the Document already
293includes a cover text for the same cover, previously added by you or
294by arrangement made by the same entity you are acting on behalf of,
295you may not add another; but you may replace the old one, on explicit
296permission from the previous publisher that added the old one.
297
298The author(s) and publisher(s) of the Document do not by this License
299give permission to use their names for publicity for or to assert or
300imply endorsement of any Modified Version.
301
302@item
303COMBINING DOCUMENTS
304
305You may combine the Document with other documents released under this
306License, under the terms defined in section 4 above for modified
307versions, provided that you include in the combination all of the
308Invariant Sections of all of the original documents, unmodified, and
309list them all as Invariant Sections of your combined work in its
310license notice, and that you preserve all their Warranty Disclaimers.
311
312The combined work need only contain one copy of this License, and
313multiple identical Invariant Sections may be replaced with a single
314copy. If there are multiple Invariant Sections with the same name but
315different contents, make the title of each such section unique by
316adding at the end of it, in parentheses, the name of the original
317author or publisher of that section if known, or else a unique number.
318Make the same adjustment to the section titles in the list of
319Invariant Sections in the license notice of the combined work.
320
321In the combination, you must combine any sections Entitled ``History''
322in the various original documents, forming one section Entitled
323``History''; likewise combine any sections Entitled ``Acknowledgements'',
324and any sections Entitled ``Dedications''. You must delete all
325sections Entitled ``Endorsements.''
326
327@item
328COLLECTIONS OF DOCUMENTS
329
330You may make a collection consisting of the Document and other documents
331released under this License, and replace the individual copies of this
332License in the various documents with a single copy that is included in
333the collection, provided that you follow the rules of this License for
334verbatim copying of each of the documents in all other respects.
335
336You may extract a single document from such a collection, and distribute
337it individually under this License, provided you insert a copy of this
338License into the extracted document, and follow this License in all
339other respects regarding verbatim copying of that document.
340
341@item
342AGGREGATION WITH INDEPENDENT WORKS
343
344A compilation of the Document or its derivatives with other separate
345and independent documents or works, in or on a volume of a storage or
346distribution medium, is called an ``aggregate'' if the copyright
347resulting from the compilation is not used to limit the legal rights
348of the compilation's users beyond what the individual works permit.
349When the Document is included in an aggregate, this License does not
350apply to the other works in the aggregate which are not themselves
351derivative works of the Document.
352
353If the Cover Text requirement of section 3 is applicable to these
354copies of the Document, then if the Document is less than one half of
355the entire aggregate, the Document's Cover Texts may be placed on
356covers that bracket the Document within the aggregate, or the
357electronic equivalent of covers if the Document is in electronic form.
358Otherwise they must appear on printed covers that bracket the whole
359aggregate.
360
361@item
362TRANSLATION
363
364Translation is considered a kind of modification, so you may
365distribute translations of the Document under the terms of section 4.
366Replacing Invariant Sections with translations requires special
367permission from their copyright holders, but you may include
368translations of some or all Invariant Sections in addition to the
369original versions of these Invariant Sections. You may include a
370translation of this License, and all the license notices in the
371Document, and any Warranty Disclaimers, provided that you also include
372the original English version of this License and the original versions
373of those notices and disclaimers. In case of a disagreement between
374the translation and the original version of this License or a notice
375or disclaimer, the original version will prevail.
376
377If a section in the Document is Entitled ``Acknowledgements'',
378``Dedications'', or ``History'', the requirement (section 4) to Preserve
379its Title (section 1) will typically require changing the actual
380title.
381
382@item
383TERMINATION
384
385You may not copy, modify, sublicense, or distribute the Document
386except as expressly provided under this License. Any attempt
387otherwise to copy, modify, sublicense, or distribute it is void, and
388will automatically terminate your rights under this License.
389
390However, if you cease all violation of this License, then your license
391from a particular copyright holder is reinstated (a) provisionally,
392unless and until the copyright holder explicitly and finally
393terminates your license, and (b) permanently, if the copyright holder
394fails to notify you of the violation by some reasonable means prior to
39560 days after the cessation.
396
397Moreover, your license from a particular copyright holder is
398reinstated permanently if the copyright holder notifies you of the
399violation by some reasonable means, this is the first time you have
400received notice of violation of this License (for any work) from that
401copyright holder, and you cure the violation prior to 30 days after
402your receipt of the notice.
403
404Termination of your rights under this section does not terminate the
405licenses of parties who have received copies or rights from you under
406this License. If your rights have been terminated and not permanently
407reinstated, receipt of a copy of some or all of the same material does
408not give you any rights to use it.
409
410@item
411FUTURE REVISIONS OF THIS LICENSE
412
413The Free Software Foundation may publish new, revised versions
414of the GNU Free Documentation License from time to time. Such new
415versions will be similar in spirit to the present version, but may
416differ in detail to address new problems or concerns. See
417@uref{http://www.gnu.org/copyleft/}.
418
419Each version of the License is given a distinguishing version number.
420If the Document specifies that a particular numbered version of this
421License ``or any later version'' applies to it, you have the option of
422following the terms and conditions either of that specified version or
423of any later version that has been published (not as a draft) by the
424Free Software Foundation. If the Document does not specify a version
425number of this License, you may choose any version ever published (not
426as a draft) by the Free Software Foundation. If the Document
427specifies that a proxy can decide which future versions of this
428License can be used, that proxy's public statement of acceptance of a
429version permanently authorizes you to choose that version for the
430Document.
431
432@item
433RELICENSING
434
435``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
436World Wide Web server that publishes copyrightable works and also
437provides prominent facilities for anybody to edit those works. A
438public wiki that anybody can edit is an example of such a server. A
439``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
440site means any set of copyrightable works thus published on the MMC
441site.
442
443``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
444license published by Creative Commons Corporation, a not-for-profit
445corporation with a principal place of business in San Francisco,
446California, as well as future copyleft versions of that license
447published by that same organization.
448
449``Incorporate'' means to publish or republish a Document, in whole or
450in part, as part of another Document.
451
452An MMC is ``eligible for relicensing'' if it is licensed under this
453License, and if all works that were first published under this License
454somewhere other than this MMC, and subsequently incorporated in whole
455or in part into the MMC, (1) had no cover texts or invariant sections,
456and (2) were thus incorporated prior to November 1, 2008.
457
458The operator of an MMC Site may republish an MMC contained in the site
459under CC-BY-SA on the same site at any time before August 1, 2009,
460provided the MMC is eligible for relicensing.
461
462@end enumerate
463
464@page
465@heading ADDENDUM: How to use this License for your documents
466
467To use this License in a document you have written, include a copy of
468the License in the document and put the following copyright and
469license notices just after the title page:
470
471@smallexample
472@group
473 Copyright (C) @var{year} @var{your name}.
474 Permission is granted to copy, distribute and/or modify this document
475 under the terms of the GNU Free Documentation License, Version 1.3
476 or any later version published by the Free Software Foundation;
477 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
478 Texts. A copy of the license is included in the section entitled ``GNU
479 Free Documentation License''.
480@end group
481@end smallexample
482
483If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
484replace the ``with@dots{}Texts.'' line with this:
485
486@smallexample
487@group
488 with the Invariant Sections being @var{list their titles}, with
489 the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
490 being @var{list}.
491@end group
492@end smallexample
493
494If you have Invariant Sections without Cover Texts, or some other
495combination of the three, merge those two alternatives to suit the
496situation.
497
498If your document contains nontrivial examples of program code, we
499recommend releasing these examples in parallel under your choice of
500free software license, such as the GNU General Public License,
501to permit their use in free software.
502
503@c Local Variables:
504@c ispell-local-pdict: "ispell-dict"
505@c End:
506
diff --git a/doc/syntax.texi b/doc/syntax.texi
deleted file mode 100644
index 8aca39d8d..000000000
--- a/doc/syntax.texi
+++ /dev/null
@@ -1,44 +0,0 @@
1@c Syntax highlighting for texinfo's HTML output
2
3@html
4<script src="highlight.pack.js"></script>
5<script>
6var hls = [];
7var syntaxAuto = true;
8addEventListener("DOMContentLoaded", function() {
9 // Highlight blocks with fixed language
10 for (let x of hls) {
11 let next = x[0].nextElementSibling;
12 console.log("next", next);
13 let blocks = next.querySelectorAll("pre.example");
14 for (let i = 0; i < blocks.length; i++) {
15 blocks[i].classList.add("language-" + x[1]);
16 hljs.highlightBlock(blocks[i]);
17 }
18 }
19 // auto-detect other blocks if not disabled
20 if (syntaxAuto) {
21 let blocks = document.querySelectorAll("pre.example");
22 for (let i = 0; i < blocks.length; i++) {
23 hljs.highlightBlock(blocks[i]);
24 }
25 }
26});
27</script>
28@end html
29
30@macro setsyntax{lang}
31@html
32<script>
33hls.push([document.currentScript, "\lang\"]);
34</script>
35@end html
36@end macro
37
38@macro setsyntaxnoauto{}
39@html
40<script>
41syntaxAuto = false;
42</script>
43@end html
44@end macro
diff --git a/doc/taler-config.texi b/doc/taler-config.texi
deleted file mode 100644
index efca5a2d7..000000000
--- a/doc/taler-config.texi
+++ /dev/null
@@ -1,47 +0,0 @@
1@c This file is used both in the exchange and merchant
2@c manuals. Edits should be propagated to both Gits!
3
4@node Using taler-config
5@section Using taler-config
6@cindex taler-config
7
8The tool @code{taler-config} can be used to
9extract or manipulate configuration values; however, the configuration
10use the well-known INI file format and can also be edited by hand.
11
12Run
13@example
14$ taler-config -s $SECTION
15@end example
16to list all of the configuration values in section @code{$SECTION}.
17
18Run
19@example
20$ taler-config -s $section -o $option
21@end example
22to extract the respective configuration value for option @code{$option}
23in section @code{$section}.
24
25Finally, to change a setting, run
26@example
27$ taler-config -s $section -o $option -V $value
28@end example
29to set the respective configuration value to @code{$value}. Note that you have to
30manually restart the Taler backend after you change the configuration to
31make the new configuration go into effect.
32
33Some default options will use $-variables, such as @code{$DATADIR}
34within their value. To expand the @code{$DATADIR} or other $-variables
35in the configuration, pass the @code{-f} option to
36@code{taler-config}. For example, compare:
37@example
38$ taler-config -s ACCOUNT-bank \
39 -o WIRE_RESPONSE
40$ taler-config -f -s ACCOUNT-bank \
41 -o WIRE_RESPONSE
42@end example
43
44While the configuration file is typically located at
45@code{$HOME/.config/taler.conf}, an alternative location can be
46specified to @code{taler-merchant-httpd} and @code{taler-config} using
47the @code{-c} option.
diff --git a/doc/taler-exchange.texi b/doc/taler-exchange.texi
deleted file mode 100644
index 209e2dd5b..000000000
--- a/doc/taler-exchange.texi
+++ /dev/null
@@ -1,972 +0,0 @@
1\input texinfo @c -*-texinfo-*-
2@setfilename taler-exchange.info
3@documentencoding UTF-8
4@include version.texi
5@settitle The GNU Taler Exchange Operator Manual
6@paragraphindent 0
7@exampleindent 4
8
9@include syntax.texi
10
11@copying
12This manual is for the GNU Taler Exchange
13(version @value{VERSION}, @value{UPDATED}),
14a payment service provider for GNU Taler.
15
16Copyright @copyright{} 2014-2018 Taler Systems SA
17
18@quotation
19Permission is granted to copy, distribute and/or modify this document
20under the terms of the GNU Free Documentation License, Version 1.3
21or any later version published by the Free Software Foundation;
22with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
23Texts. A copy of the license is included in the section entitled "GNU
24Free Documentation License".
25@end quotation
26@end copying
27
28@dircategory Network applications
29@direntry
30* GNU Taler Exchange: (taler-exchange). Electronic payment system.
31@end direntry
32
33
34@titlepage
35@title The GNU Taler Exchange Operator Manual
36@subtitle Version @value{VERSION}
37@subtitle @value{UPDATED}
38@author Christian Grothoff (@email{grothoff@@taler.net})
39@author Marcello Stanisci (@email{stanisci@@taler.net})
40@page
41@vskip 0pt plus 1filll
42@insertcopying
43@end titlepage
44
45@summarycontents
46@contents
47
48@ifnottex
49@node Top
50@top The GNU Taler Exchange Operator Manual
51@insertcopying
52@end ifnottex
53
54
55@menu
56* Introduction::
57* Installation::
58* Configuration::
59* Deployment::
60* Diagnostics::
61
62
63
64Appendices
65
66* GNU-AGPL:: The GNU Affero General Public License says how you
67 can copy and share the code of the `GNU Taler Exchange'.
68* GNU-FDL:: The GNU Free Documentation License says how you
69 can copy and share the documentation of `GNU Taler'.
70
71Indices
72
73* Concept Index:: Index of concepts and programs.
74@end menu
75
76@node Introduction
77@chapter Introduction
78
79This manual is an early draft that still needs significant editing
80work to become readable.
81
82
83@section About GNU Taler
84
85GNU Taler is an open protocol for an electronic payment system with a
86free software reference implementation. GNU Taler offers secure, fast
87and easy payment processing using well understood cryptographic
88techniques. GNU Taler allows customers to remain anonymous, while
89ensuring that merchants can be held accountable by governments.
90Hence, GNU Taler is compatible with anti-money-laundering (AML) and
91know-your-customer (KYC) regulation, as well as data protection
92regulation (such as GDPR).
93
94GNU Taler is not yet production-ready, after following this manual
95you will have a backend that can process payments in ``KUDOS'', but
96not regular currencies. This is not so much because of limitations
97in the backend, but because we are not aware of a Taler exchange
98operator offering regular currencies today.
99
100@section About this manual
101
102This tutorial targets system administrators who want to install and
103operate a GNU Taler exchange.
104
105@section Organizational prerequisites
106
107Operating a GNU Taler exchange means that you are operating a payment
108service provider, which means that you will most likely need a bank
109license and/or follow applicable financial regulation.
110
111@cindex availability
112@cindex backup
113@cindex replication
114GNU Taler payment service providers generally need to ensure high
115availability and have @emph{really} good backups (synchronous
116replication, asynchronous remote replication, off-site backup, 24/7
117monitoring, etc.).@footnote{Naturally, you could operate a Taler
118exchange for a toy currency without any real value on low-cost setups
119like a Raspberry Pi, but we urge you to limit the use of such setups
120to research and education as with GNU Taler data loss instantly
121results in financial losses.} This manual will not cover these
122aspects of operating a payment service provider.
123
124@cindex HSM
125@cindex offline
126@cindex database
127@cindex operational security
128We will assume that you can operate a (high-availability,
129high-assurance) Postgres database. Furthermore, we expect some
130moderate familiarity with the compilation and installation of free
131software packages. You need to understand the cryptographic concepts
132of private and public keys and must be able to protect private keys
133stored in files on disk. An exchange uses an @emph{offline} master
134key as well as @emph{online} keys. You are advised to secure your
135private master key and any copies on encrypted, always-offline
136computers. Again, we assume that you are familiar with good best
137practices in operational security, including securing key
138material.@footnote{The current implementation does not make provisions
139for secret splitting. Still, the use of a hardware security module
140(HSM) for protecting private keys is adviseable, so please contact the
141developers for HSM integration support.}
142
143
144@section Architecture overview
145
146@cindex crypto-currency
147@cindex bank
148@cindex escrow
149@cindex coin
150Taler is a pure payment system, not a new crypto-currency. As such, it
151operates in a traditional banking context. In particular, this means
152that in order to receive funds via Taler, the merchant must have a
153regular bank account, and payments can be executed in ordinary
154currencies such as USD or EUR. Similarly, the Taler exchange must
155interact with a bank. The bank of the exchange holds the exchange's
156funds in an escrow account.
157
158@cindex reserve
159@cindex fee
160@cindex aggregator
161@cindex deposit
162When customers wire money to the escrow account, the bank notifies
163the exchange about the incoming wire transfers. The exchange then
164creates a @emph{reserve} based on the subject of the wire transfer.
165The wallet which knows the secret key matching the wire transfer
166subject can then withdraw coins from the reserve, thereby draining
167it. The liability of the exchange against the reserve is thereby
168converted into a liability against digital coins issued by the
169exchange. When the customer later spends the coins at a merchant,
170and the merchant @emph{deposits} the coins at the exchange, the
171exchange first @emph{aggregates} the amount from multiple deposits
172from the same merchant and then instructs its bank to make a
173wire transfer to the merchant, thereby fulfilling its obligation
174and eliminating the liability. The exchange charges @emph{fees}
175for some or all of its operations to cover costs and possibly make
176a profit.
177
178@cindex auditor
179@cindex accounting
180@emph{Auditors} are third parties, for example financial regulators,
181that verify that the exchange operates correctly. The same software
182is also used to calculate the exchange's profits, risk and liabilities
183by the accountants of the exchange.
184
185The Taler software stack for an exchange consists of the
186following components:
187
188@itemize
189@cindex HTTP frontend
190@item The HTTP frontend interacts with Taler wallets and
191 merchant backends. It is used to withdraw coins, deposit
192 coins, refresh coins, issue refunds, map wire transfers to
193 Taler transactions, inquire about the exchange's bank account
194 details, signing keys and fee structure.
195 The binary is the @code{taler-exchange-httpd}.
196@cindex Aggregator
197@item The aggregator combines multiple deposits made by
198 the same merchant and (eventually) triggers wire transfers for the
199 aggregate amount. The merchant can control how quickly wire
200 transfers are made. The exchange may be charge a fee per wire transfer
201 to discourage excessively frequent transfers. The binary
202 is the @code{taler-exchange-aggregator}.
203@cindex Auditor
204@item The auditor verifies that the transactions performed by
205 the exchange were done properly. It checks the various signatures,
206 totals up the amounts and alerts the operator to any inconsistencies.
207 It also computes the expected bank balance, revenue and risk exposure
208 of the exchange operator. The main binary is the
209 @code{taler-auditor}.
210@cindex Wire plugin
211@item A wire plugin enables the HTTP frontend to talk to the
212 bank. Its role is to allow the exchange to validate bank
213 addresses (i.e. IBAN numbers), for the aggregator to execute
214 wire transfers and for the auditor to query bank transaction
215 histories. Wire plugins are @emph{plugins} as there can be
216 many different implementations to deal with different
217 banking standards. Wire plugins are automatically located
218 and used by the exchange, aggregator and auditor.
219@cindex DBMS
220@cindex Postgres
221@item The exchange requires a DBMS to stores the transaction history for
222 the Taler exchange and aggregator, and a (typically separate) DBMS for
223 the Taler auditor.
224 For now, the GNU Taler reference implemenation only supports Postgres,
225 but the code could be easily extended to support another DBMS.
226@end itemize
227
228@c The following image illustrates the various interactions of these
229@c key components:
230
231@c @center @image{arch, 3in, 4in}
232
233
234@node Installation
235@chapter Installation
236
237Please install the following packages before proceeding with the exchange compilation.
238
239@itemize
240
241@item
242GNU autoconf >= 2.69
243
244@item
245GNU automake >= 1.14
246
247@item
248GNU libtool >= 2.4
249
250@item
251GNU autopoint >= 0.19
252
253@item
254GNU libltdl >= 2.4
255
256@item
257GNU libunistring >= 0.9.3
258
259@item
260libcurl >= 7.26 (or libgnurl >= 7.26)
261
262@item
263GNU libmicrohttpd >= 0.9.59
264
265@item
266GNU libgcrypt >= 1.6
267
268@item
269libjansson >= 2.7
270
271@item
272Postgres >= 9.6, including libpq
273
274@item
275libgnunetutil (from Git)
276
277@item
278GNU Taler exchange (from Git)
279@end itemize
280
281Except for the last two, these are available in most GNU/Linux
282distributions and should just be installed using the respective
283package manager.
284
285The following instructions will show how to install libgnunetutil and
286the GNU Taler exchange.
287
288Before you install libgnunetutil, you must download and install the
289dependencies mentioned above, otherwise the build may succeed but fail
290to export some of the tooling required by Taler.
291
292To download and install libgnunetutil, proceed as follows:
293
294@example
295$ git clone https://git.gnunet.org/gnunet/
296$ cd gnunet/
297$ ./bootstrap
298$ ./configure [--prefix=GNUNETPFX]
299$ # Each dependency can be fetched from non standard locations via
300$ # the '--with-<LIBNAME>' option. See './configure --help'.
301$ make
302# make install
303@end example
304
305If you did not specify a prefix, GNUnet will install to
306@code{/usr/local}, which requires you to run the last step as
307@code{root}.
308
309To download and install the GNU Taler exchange, proceeds as follows:
310
311@setsyntax shell
312@example
313$ git clone git://git.taler.net/exchange
314$ cd exchange
315$ ./bootstrap
316$ ./configure [--prefix=EXCHANGEPFX] \
317 [--with-gnunet=GNUNETPFX]
318$ # Each dependency can be fetched from non standard locations via
319$ # the '--with-<LIBNAME>' option. See './configure --help'.
320$ make
321# make install
322@end example
323
324If you did not specify a prefix, the exchange will install to
325@code{/usr/local}, which requires you to run the last step as
326@code{root}. Note that you have to specify @code{--with-gnunet=/usr/local}
327if you installed GNUnet to @code{/usr/local} in the previous step.
328
329
330
331
332@node Configuration
333@chapter Configuration
334
335@c In this document, we assume that @code{$HOME/.config/taler.conf} is being customized.
336
337This chapter provides an overview of the exchange configuration. Or
338at least eventually will do so, for now it is a somewhat wild
339description of some of the options.
340
341@menu
342* Configuration format::
343* Using taler-config::
344* Keying::
345* Serving::
346* Currency::
347* Bank account::
348* Database::
349* Coins (denomination keys): Coins denomination keys.
350* Keys duration::
351
352@end menu
353
354@include configuration-format.texi
355@include taler-config.texi
356
357
358
359
360@node Keying
361@section Keying
362
363The exchange works with three types of keys:
364
365@c FIXME: explain better!
366
367@itemize
368
369@item
370@cite{master key}
371
372@item
373@cite{sign keys}
374
375@item
376@cite{denomination keys} (see section @cite{Coins})
377@end itemize
378
379@c FIXME: text here.
380
381@itemize
382@item
383@cite{MASTER_PRIV_FILE}: Path to the exchange's master private file.
384
385@item
386@cite{MASTER_PUBLIC_KEY}: Must specify the exchange's master public key.
387@end itemize
388
389
390
391
392
393@node Serving
394@section Serving
395
396
397The exchange can serve HTTP over both TCP and UNIX domain socket.
398
399The following values are to be configured in the section
400@cite{[exchange]}:
401
402
403@itemize
404
405@item
406@cite{serve}: must be set to @cite{tcp} to serve HTTP over TCP, or
407@cite{unix} to serve HTTP over a UNIX domain socket
408
409@item
410@cite{port}: Set to the TCP port to listen on if @cite{serve} Is
411@cite{tcp}.
412
413@item
414@cite{unixpath}: set to the UNIX domain socket path to listen on if
415@cite{serve} Is @cite{unix}
416
417@item
418@cite{unixpath_mode}: number giving the mode with the access
419permission MASK for the @cite{unixpath} (i.e. 660 = rw-rw----).
420@end itemize
421
422
423@node Currency
424@section Currency
425
426
427The exchange supports only one currency. This data is set under the respective
428option @cite{currency} in section @cite{[taler]}.
429
430@node Bank account
431@section Bank account
432
433To configure a bank account in Taler, we need to furnish four
434pieces of information:
435@itemize
436@item
437 The @code{payto://} URL of the bank account, which uniquely idenfies
438 the account. Examples for such URLs include
439 @code{payto://sepa/CH9300762011623852957} for a bank account
440 in the single European payment area (SEPA) or
441 @code{payto://x-taler-bank/localhost:8080/2} for the 2nd bank
442 account a the Taler bank demonstrator running at @code{localhost}
443 on port 8080. The first part of the URL following @code{payto://}
444 (``sepa'' or ``x-taler-bank'') is called the wire method.
445@item
446 A matching wire plugin that implements a protocol to interact
447 with the banking system. For example, the EBICS plugin can
448 be used for SEPA transfers, or the ``taler-bank'' plugin can
449 interact with the Taler bank demonstrator. A wire plugin
450 only supports one particular wire method. Thus, you must make
451 sure to pick a plugin that supports the wire method used in the
452 URL.
453@item
454 A file containing the signed JSON-encoded bank account details
455 for the /wire API. This is necessary as Taler supports offline
456 signing for bank accounts for additional security.
457@item
458 Finally, the plugin needs to be provided resources for
459 authentication to the respective banking service. The format
460 in which the authentication information must be provided
461 depends on the wire plugin.
462@end itemize
463
464You can configure multiple accounts for an exchange by creating
465sections starting with ``account-'' for the section name. You can
466ENABLE for each account whether it should be used, and for what
467(incoming or outgoing wire transfers):
468
469@setsyntax ini
470@example
471
472[account-1]
473URL = "payto://sepa/CH9300762011623852957"
474WIRE_RESPONSE = $@{TALER_CONFIG_HOME@}/account-1.json
475
476# Currently, only the 'taler_bank' plugin is implemented.
477PLUGIN = <plugin_name_here>
478
479# Use for exchange-aggregator (outgoing transfers)
480ENABLE_DEBIT = YES
481# Use for exchange-wirewatch (and listed in /wire)
482ENABLE_CREDIT = YES
483
484# Authentication options for the chosen plugin go here.
485# (Next sections have examples of authentication mechanisms)
486@end example
487
488The command line tool @cite{taler-exchange-wire} is used to create
489the @code{account-1.json} file.
490For example, the utility may be invoked as follows to create
491all of the WIRE_RESPONSE files (in the locations specified by the configuration):
492
493@example
494$ taler-exchange-wire
495@end example
496
497The generated file will be echoed by the exchange when serving
498/wire@footnote{https://api.taler.net/api-exchange.html#wire-req}
499requests.
500
501
502@menu
503* Wire plugin ``taler_bank''::
504* Wire plugin ``ebics''::
505* Wire fee structure::
506@end menu
507
508@node Wire plugin ``taler_bank''
509@subsection Wire plugin ``taler_bank''
510@cindex x-taler-bank
511@cindex taler_bank plugin
512
513The @code{taler_bank} plugin implements the wire method ``x-taler-bank''.
514
515The format of the @code{payto://} URL is @code{payto://x-taler-bank/HOSTNAME[:PORT]}.
516
517For basic authentication, the @code{taler_bank} plugin only supports
518simple password-based authentication. For this, the configuration
519must contain the ``USERNAME'' and ``PASSWORD'' of the respective
520account at the bank.
521
522@setsyntax ini
523@example
524[account-1]
525
526# Bank account details here..
527# ..
528
529# Authentication options for the taler_bank plugin below:
530
531TALER_BANK_AUTH_METHOD = basic
532USERNAME = exchange
533PASSWORD = super-secure
534@end example
535
536
537@node Wire plugin ``ebics''
538@subsection Wire plugin ``ebics''
539
540The ``ebics'' wire plugin is not fully implemented and today
541does not support actual wire transfers.
542
543
544@cartouche
545@quotation Note
546The rationale behind having multiple bank accounts is that the exchange operator, as a security
547measure, may want to instruct the bank that the incoming bank account is only supposed to
548@emph{receive} money.
549@end quotation
550@end cartouche
551
552
553@node Wire fee structure
554@subsection Wire fee structure
555@cindex wire fee
556@cindex fee
557
558For each wire method (``sepa'' or ``x-taler-wire'', but not per plugin!) the
559exchange configuration must specify applicable wire fees. This is done
560in configuration sections of the format @code{fees-METHOD}. There are two
561types of fees, simple wire fees and closing fees. Wire fees apply whenever
562the aggregator transfers funds to a merchant. Closing fees apply whenever
563the exchange closes a reserve (sending back funds to the customer). The
564fees must be constant for a full year, which is specified as part of the name
565of the option.
566
567@setsyntax ini
568@example
569[fees-iban]
570WIRE-FEE-2018 = EUR:0.01
571WIRE-FEE-2019 = EUR:0.01
572CLOSING-FEE-2018 = EUR:0.01
573CLOSING-FEE-2019 = EUR:0.01
574
575[fees-x-taler-bank]
576WIRE-FEE-2018 = KUDOS:0.01
577WIRE-FEE-2019 = KUDOS:0.01
578CLOSING-FEE-2018 = KUDOS:0.01
579CLOSING-FEE-2019 = KUDOS:0.01
580@end example
581
582
583@node Database
584@section Database
585
586
587The option @cite{db} under section @cite{[exchange]} gets the DB backend's name the exchange
588is going to use. So far, only @cite{db = postgres} is supported. After choosing the backend,
589it is mandatory to supply the connection string (namely, the database name). This is
590possible in two ways:
591
592
593@itemize
594
595@item
596via an environment variable: @cite{TALER_EXCHANGEDB_POSTGRES_CONFIG}.
597
598@item
599via configuration option @cite{CONFIG}, under section @cite{[exchangedb-BACKEND]}. For example, the demo exchange is configured as follows:
600@end itemize
601
602@setsyntax ini
603@example
604[exchange]
605...
606DB = postgres
607...
608
609[exchangedb-postgres]
610CONFIG = postgres:///talerdemo
611@end example
612
613@node Coins denomination keys
614@section Coins (denomination keys)
615
616
617Sections specifying denomination (coin) information start with
618"coin_". By convention, the name continues with
619"$CURRENCY_[$SUBUNIT]_$VALUE", i.e. @cite{[coin_eur_ct_10]} for a 10
620cent piece. However, only the "coin_" prefix is mandatory. Each
621"coin_"-section must then have the following options:
622
623
624@itemize
625
626@item
627@cite{value}: How much is the coin worth, the format is
628CURRENCY:VALUE.FRACTION. For example, a 10 cent piece is "EUR:0.10".
629
630@item
631@cite{duration_withdraw}: How long can a coin of this type be
632withdrawn? This limits the losses incurred by the exchange when a
633denomination key is compromised.
634
635@item
636@cite{duration_overlap}: What is the overlap of the withdrawal
637timespan for this coin type?
638
639@item
640@cite{duration_spend}: How long is a coin of the given type valid?
641Smaller values result in lower storage costs for the exchange.
642
643@item
644@cite{fee_withdraw}: What does it cost to withdraw this coin?
645Specified using the same format as @cite{value}.
646
647@item
648@cite{fee_deposit}: What does it cost to deposit this coin? Specified
649using the same format as @cite{value}.
650
651@item
652@cite{fee_refresh}: What does it cost to refresh this coin? Specified
653using the same format as @cite{value}.
654
655@item
656@cite{rsa_keysize}: How many bits should the RSA modulus (product of
657the two primes) have for this type of coin.
658@end itemize
659
660
661@node Keys duration
662@section Keys duration
663
664
665Both @cite{signkeys} and @cite{denom keys} have a starting date. The
666option @cite{lookahead_provide}, under section @cite{[exchange]},
667is such that only keys whose starting date is younger than
668@cite{lookahead_provide} will be issued by the exchange.
669
670@cite{signkeys}. The option @cite{lookahead_sign} is such that, being
671@cite{t} the time when @cite{taler-exchange-keyup} is run,
672@cite{taler-exchange-keyup} will generate @cite{n} @cite{signkeys},
673where @cite{t + (n * signkey_duration) = t + lookahead_sign}. In other
674words, we generate a number of keys which is sufficient to cover a
675period of @cite{lookahead_sign}. As for the starting date, the first
676generated key will get a starting time of @cite{t}, and the
677@cite{j}-th key will get a starting time of @cite{x +
678signkey_duration}, where @cite{x} is the starting time of the
679@cite{(j-1)}-th key.
680
681@cite{denom keys}. The option @cite{lookahead_sign} is such that,
682being @cite{t} the time when @cite{taler-exchange-keyup} is run,
683@cite{taler-exchange-keyup} will generate @cite{n} @cite{denom keys}
684for each denomination, where @cite{t + (n * duration_withdraw) = t +
685lookahead_sign}. In other words, for each denomination, we generate a
686number of keys which is sufficient to cover a period of
687@cite{lookahead_sign}. As for the starting date, the first generated
688key will get a starting time of @cite{t}, and the @cite{j}-th key will
689get a starting time of @cite{x + duration_withdraw}, where @cite{x} is
690the starting time of the @cite{(j-1)}-th key.
691
692To change these settings, edit the following
693values in section @cite{[exchange]}:
694
695@itemize
696@item
697@cite{SIGNKEY_DURATION}: How long should one signing key be used?
698
699@item
700@cite{LOOKAHEAD_SIGN}: How much time we want to cover with our
701signing keys? Note that if @cite{SIGNKEY_DURATION} is bigger than
702@cite{LOOKAHEAD_SIGN}, @code{taler-exchange-keyup} will generate a
703quantity of signing keys which is sufficient to cover all the
704gap.
705@end itemize
706
707@c FIXME: LEGAL_DURATION not covered!
708@c FIXME: LOOKAHEAD_PROVIDE not covered!
709
710
711@node Deployment
712@chapter Deployment
713
714
715@menu
716* Keys generation::
717* Database upgrades::
718@end menu
719
720@node Keys generation
721@section Keys generation
722
723Once the configuration is properly set up, all the keys can be generated
724by the tool @code{taler-exchange-keyup}. The following command generates denomkeys
725and signkeys, plus the "blob" that is to be signed by the auditor.
726
727@example
728taler-exchange-keyup -o blob
729@end example
730
731@emph{blob} contains data about denomkeys that the exchange operator needs to
732get signed by every auditor he wishes (or is forced to) work with.
733
734In a normal scenario, an auditor must have some way of receiving the blob to
735sign (Website, manual delivery, ..). Nonetheless, the exchange admin can fake
736an auditor signature --- for testing purposes --- by running the following command
737
738@example
739taler-auditor-sign -m EXCHANGE_MASTER_PUB -r BLOB -u AUDITOR_URL -o OUTPUT_FILE
740@end example
741
742Those arguments are all mandatory.
743
744@itemize
745@item @code{EXCHANGE_MASTER_PUB} the base32 Crockford-encoded exchange's master
746public key. Tipically, this value lies in the configuration option
747@code{[exchange]/master_public_key}.
748@item @code{BLOB} the blob generated in the previous step.
749@item @code{AUDITOR_URL} the URL that identifies the auditor.
750@item @code{OUTPUT_FILE} where on the disk the signed blob is to be saved.
751@end itemize
752
753@code{OUTPUT_FILE} must then be copied into the directory specified
754by the option @code{AUDITOR_BASE_DIR} under the section @code{[exchangedb]}.
755Assuming @code{AUDITOR_BASE_DIR = $@{HOME@}/.local/share/taler/auditors}, the
756following command will "add" the auditor identified by @code{AUDITOR_URL} to
757the exchange.
758
759@example
760cp OUTPUT_FILE $@{HOME@}/.local/share/taler/auditors
761@end example
762
763If the auditor has been correctly added, the exchange's @code{/keys} response
764must contain an entry in the @code{auditors} array mentioning the auditor's URL.
765
766
767@c FIXME: reference section about where keys are stored.
768
769@node Database upgrades
770@section Database upgrades
771
772Currently, there is no way to upgrade the database between Taler versions.
773
774The exchange database can be re-initialized using:
775
776@example
777$ taler-exchange-dbinit -r
778@end example
779
780However, running this command will result in all data in the database
781being lost, which may result in significant financial liabilities as
782the exchange can then not detect double-spending. Hence this
783operation must not be performed in a production system.
784
785@node Diagnostics
786@chapter Diagnostics
787
788This chapter includes various (very unpolished) sections on specific topics
789that might be helpful to understand how the exchange operates, which files
790should be backed up. The information may also be helpful for diagnostics.
791
792@menu
793* Reserve management::
794* Database Scheme::
795* Signing key storage::
796* Denomination key storage::
797* Auditor signature storage::
798@end menu
799
800
801@node Reserve management
802@section Reserve management
803
804
805Incoming transactions to the exchange's provider result in the
806creation or update of reserves, identified by their reserve key. The
807command line tool @cite{taler-exchange-reservemod} allows create and
808add money to reserves in the exchange's database.
809
810
811
812
813@node Database Scheme
814@section Database Scheme
815
816
817The exchange database must be initialized using @cite{taler-exchange-dbinit}. This
818tool creates the tables required by the Taler exchange to operate. The
819tool also allows you to reset the Taler exchange database, which is useful
820for test cases but should never be used in production. Finally,
821@cite{taler-exchange-dbinit} has a function to garbage collect a database,
822allowing administrators to purge records that are no longer required.
823
824The database scheme used by the exchange look as follows:
825
826@image{exchange-db,5in,,,png}
827
828
829@node Signing key storage
830@section Signing key storage
831
832
833The private online signing keys of the exchange are stored in a
834subdirectory "signkeys/" of the "KEYDIR" which is an option in the
835"[exchange]" section of the configuration file. The filename is the
836starting time at which the signing key can be used in microseconds
837since the Epoch. The file format is defined by the @cite{struct TALER_EXCHANGEDB_PrivateSigningKeyInformationP}:
838
839@example
840struct TALER_EXCHANGEDB_PrivateSigningKeyInformationP @{
841 struct TALER_ExchangePrivateKeyP signkey_priv;
842 struct TALER_ExchangeSigningKeyValidityPS issue;
843@};
844@end example
845
846
847@node Denomination key storage
848@section Denomination key storage
849
850The private denomination keys of the exchange are store in a
851subdirectory "denomkeys/" of the "KEYDIR" which is an option in the
852"[exchange]" section of the configuration file. "denomkeys/" contains
853further subdirectories, one per denomination. The specific name of
854the subdirectory under "denomkeys/" is ignored by the exchange.
855However, the name is important for the "taler-exchange-keyup" tool
856that generates the keys. The tool combines a human-readable encoding
857of the denomination (i.e. for EUR:1.50 the prefix would be
858"EUR_1_5-", or for EUR:0.01 the name would be "EUR_0_01-") with a
859postfix that is a truncated Crockford32 encoded hash of the various
860attributes of the denomination key (relative validity periods, fee
861structure and key size). Thus, if any attributes of a coin change,
862the name of the subdirectory will also change, even if the
863denomination remains the same.
864
865Within this subdirectory, each file represents a particular
866denomination key. The filename is the starting time at which the
867signing key can be used in microseconds since the Epoch. The
868format on disk begins with a
869@cite{struct TALER_EXCHANGEDB_DenominationKeyInformationP} giving
870the attributes of the denomination key and the associated
871signature with the exchange's long-term offline key:
872
873@example
874struct TALER_EXCHANGEDB_DenominationKeyInformationP @{
875 struct TALER_MasterSignatureP signature;
876 struct TALER_DenominationKeyValidityPS properties;
877@};
878@end example
879
880This is then followed by the variable-size RSA private key in
881libgcrypt's S-expression format, which can be decoded using
882@cite{GNUNET_CRYPTO_rsa_private_key_decode()}.
883
884@menu
885* Revocations::
886@end menu
887
888@node Revocations
889@subsection Revocations
890
891@cindex payback
892@cindex revocation
893When an exchange goes out of business or detects that the private
894key of a denomination key pair has been compromised, it may revoke
895some or all of its denomination keys. At this point, the hashes
896of the revoked keys must be returned as part of the @code{/keys} response
897under ``payback''. Wallets detect this, and then return unspent
898coins of the respective denomination key using the @code{/payback}
899API.
900
901When a denomination key is revoked, a revocation file is placed
902into the respective subdirectory of ``denomkeys/''. The file has the
903same prefix as the file that stores the
904@cite{struct TALER_EXCHANGEDB_DenominationKeyInformationP} information,
905but is followed by the ``.rev'' suffix. It contains a 64-byte
906EdDSA signature made with the master key of the exchange with purpose
907@code{TALER_SIGNATURE_MASTER_DENOMINATION_KEY_REVOKED}. If such a file
908is present, the exchange must check the signature and if it is valid
909treat the respective denomination key as revoked.
910
911Revocation files can be generated using the
912@code{taler-exchange-keyup} command-line tool using the @code{-r}
913option. The Taler auditor will instruct operators to generate
914revocations if it detects a key compromise (which is possible more
915coins of a particular denomination were deposited than issued).
916
917It should be noted that denomination key revocations should only happen
918under highly unusual (``emergency'') conditions and not under normal
919conditions.
920
921
922@node Auditor signature storage
923@section Auditor signature storage
924
925
926Signatures from auditors are stored in the directory specified
927in the exchange configuration section "exchangedb" under the
928option "AUDITOR_BASE_DIR". The exchange does not care about
929the specific names of the files in this directory.
930
931Each file must contain a header with the public key information
932of the auditor, the master public key of the exchange, and
933the number of signed denomination keys:
934
935@example
936struct AuditorFileHeaderP @{
937 struct TALER_AuditorPublicKeyP apub;
938 struct TALER_MasterPublicKeyP mpub;
939 uint32_t dki_len;
940@};
941@end example
942
943This is then followed by @cite{dki_len} signatures of the auditor of type
944@cite{struct TALER_AuditorSignatureP}, which are then followed by another
945@cite{dki_len} blocks of type @cite{struct TALER_DenominationKeyValidityPS}.
946The auditor's signatures must be signatures over the information of
947the corresponding denomination key validity structures embedded in a
948@cite{struct TALER_ExchangeKeyValidityPS} structure using the
949@cite{TALER_SIGNATURE_AUDITOR_EXCHANGE_KEYS} purpose.
950
951
952
953@c **********************************************************
954@c ******************* Appendices *************************
955@c **********************************************************
956
957@node GNU-AGPL
958@chapter GNU Affero GPL
959@cindex license
960@include agpl.texi
961
962@node GNU-FDL
963@chapter GNU Free Documentation License
964@cindex license
965@include fdl-1.3.texi
966
967@node Concept Index
968@chapter Concept Index
969
970@printindex cp
971
972@bye