Open-Transactions  0.93.0-ge03d287
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TokenLucre.hpp
Go to the documentation of this file.
1 /************************************************************
2  *
3  * TokenLucre.hpp
4  *
5  */
6 
7 /************************************************************
8  -----BEGIN PGP SIGNED MESSAGE-----
9  Hash: SHA1
10 
11  * OPEN TRANSACTIONS
12  *
13  * Financial Cryptography and Digital Cash
14  * Library, Protocol, API, Server, CLI, GUI
15  *
16  * -- Anonymous Numbered Accounts.
17  * -- Untraceable Digital Cash.
18  * -- Triple-Signed Receipts.
19  * -- Cheques, Vouchers, Transfers, Inboxes.
20  * -- Basket Currencies, Markets, Payment Plans.
21  * -- Signed, XML, Ricardian-style Contracts.
22  * -- Scripted smart contracts.
23  *
24  * Copyright (C) 2010-2013 by "Fellow Traveler" (A pseudonym)
25  *
26  * EMAIL:
28  *
29  * BITCOIN: 1NtTPVVjDsUfDWybS4BwvHpG2pdS9RnYyQ
30  *
31  * KEY FINGERPRINT (PGP Key in license file):
32  * 9DD5 90EB 9292 4B48 0484 7910 0308 00ED F951 BB8E
33  *
34  * OFFICIAL PROJECT WIKI(s):
35  * https://github.com/FellowTraveler/Moneychanger
36  * https://github.com/FellowTraveler/Open-Transactions/wiki
37  *
38  * WEBSITE:
39  * http://www.OpenTransactions.org/
40  *
41  * Components and licensing:
42  * -- Moneychanger..A Java client GUI.....LICENSE:.....GPLv3
43  * -- otlib.........A class library.......LICENSE:...LAGPLv3
44  * -- otapi.........A client API..........LICENSE:...LAGPLv3
45  * -- opentxs/ot....Command-line client...LICENSE:...LAGPLv3
46  * -- otserver......Server Application....LICENSE:....AGPLv3
47  * Github.com/FellowTraveler/Open-Transactions/wiki/Components
48  *
49  * All of the above OT components were designed and written by
50  * Fellow Traveler, with the exception of Moneychanger, which
51  * was contracted out to Vicky C ([email protected]).
52  * The open-source community has since actively contributed.
53  *
54  * -----------------------------------------------------
55  *
56  * LICENSE:
57  * This program is free software: you can redistribute it
58  * and/or modify it under the terms of the GNU Affero
59  * General Public License as published by the Free Software
60  * Foundation, either version 3 of the License, or (at your
61  * option) any later version.
62  *
63  * ADDITIONAL PERMISSION under the GNU Affero GPL version 3
64  * section 7: (This paragraph applies only to the LAGPLv3
65  * components listed above.) If you modify this Program, or
66  * any covered work, by linking or combining it with other
67  * code, such other code is not for that reason alone subject
68  * to any of the requirements of the GNU Affero GPL version 3.
69  * (==> This means if you are only using the OT API, then you
70  * don't have to open-source your code--only your changes to
71  * Open-Transactions itself must be open source. Similar to
72  * LGPLv3, except it applies to software-as-a-service, not
73  * just to distributing binaries.)
74  *
75  * Extra WAIVER for OpenSSL, Lucre, and all other libraries
76  * used by Open Transactions: This program is released under
77  * the AGPL with the additional exemption that compiling,
78  * linking, and/or using OpenSSL is allowed. The same is true
79  * for any other open source libraries included in this
80  * project: complete waiver from the AGPL is hereby granted to
81  * compile, link, and/or use them with Open-Transactions,
82  * according to their own terms, as long as the rest of the
83  * Open-Transactions terms remain respected, with regard to
84  * the Open-Transactions code itself.
85  *
86  * Lucre License:
87  * This code is also "dual-license", meaning that Ben Lau-
88  * rie's license must also be included and respected, since
89  * the code for Lucre is also included with Open Transactions.
90  * See Open-Transactions/src/otlib/lucre/LUCRE_LICENSE.txt
91  * The Laurie requirements are light, but if there is any
92  * problem with his license, simply remove the Lucre code.
93  * Although there are no other blind token algorithms in Open
94  * Transactions (yet. credlib is coming), the other functions
95  * will continue to operate.
96  * See Lucre on Github: https://github.com/benlaurie/lucre
97  * -----------------------------------------------------
98  * You should have received a copy of the GNU Affero General
99  * Public License along with this program. If not, see:
100  * http://www.gnu.org/licenses/
101  *
102  * If you would like to use this software outside of the free
103  * software license, please contact FellowTraveler.
104  * (Unfortunately many will run anonymously and untraceably,
105  * so who could really stop them?)
106  *
107  * DISCLAIMER:
108  * This program is distributed in the hope that it will be
109  * useful, but WITHOUT ANY WARRANTY; without even the implied
110  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
111  * PURPOSE. See the GNU Affero General Public License for
112  * more details.
113 
114  -----BEGIN PGP SIGNATURE-----
115  Version: GnuPG v1.4.9 (Darwin)
116 
117  iQIcBAEBAgAGBQJRSsfJAAoJEAMIAO35UbuOQT8P/RJbka8etf7wbxdHQNAY+2cC
118  vDf8J3X8VI+pwMqv6wgTVy17venMZJa4I4ikXD/MRyWV1XbTG0mBXk/7AZk7Rexk
119  KTvL/U1kWiez6+8XXLye+k2JNM6v7eej8xMrqEcO0ZArh/DsLoIn1y8p8qjBI7+m
120  aE7lhstDiD0z8mwRRLKFLN2IH5rAFaZZUvj5ERJaoYUKdn4c+RcQVei2YOl4T0FU
121  LWND3YLoH8naqJXkaOKEN4UfJINCwxhe5Ke9wyfLWLUO7NamRkWD2T7CJ0xocnD1
122  sjAzlVGNgaFDRflfIF4QhBx1Ddl6wwhJfw+d08bjqblSq8aXDkmFA7HeunSFKkdn
123  oIEOEgyj+veuOMRJC5pnBJ9vV+7qRdDKQWaCKotynt4sWJDGQ9kWGWm74SsNaduN
124  TPMyr9kNmGsfR69Q2Zq/FLcLX/j8ESxU+HYUB4vaARw2xEOu2xwDDv6jt0j3Vqsg
125  x7rWv4S/Eh18FDNDkVRChiNoOIilLYLL6c38uMf1pnItBuxP3uhgY6COm59kVaRh
126  nyGTYCDYD2TK+fI9o89F1297uDCwEJ62U0Q7iTDp5QuXCoxkPfv8/kX6lS6T3y9G
127  M9mqIoLbIQ1EDntFv7/t6fUTS2+46uCrdZWbQ5RjYXdrzjij02nDmJAm2BngnZvd
128  kamH0Y/n11lCvo1oQxM+
129  =uSzz
130  -----END PGP SIGNATURE-----
131  **************************************************************/
132 
133 #ifndef OPENTXS_CASH_TOKENLUCRE_HPP
134 #define OPENTXS_CASH_TOKENLUCRE_HPP
135 
136 #include "Token.hpp"
137 
138 namespace opentxs
139 {
140 
141 class OTIdentifier;
142 class Mint;
143 class OTPseudonym;
144 class Purse;
145 
146 /*
147  Here's a rough sketch of the protocol:
148 
149  Client requests Mint for withdrawal of 100 ithica work hours.
150 
151 1) Client blinds and sends N tokens to the server, each worth 100 hours. Client
152 retains the keys.
153 2) Server responds with a single index, the one the server has chosen for
154 signing.
155 3) Client replies with 99 keys.
156 4) Server unblinds 99 tokens (or some randomly-chosen % of those) and verifies
157 them.
158  He signs the last one and returns it.
159 5) Client receives signed token, unblinds it, stores it for later.
160 6) When token is redeemed, it has already been unblinded. So Server simply
161 verifies it.
162 
163  LAST NAGGING QUESTION: Should the server sign the other 99 tokens before
164 unblinding them and verifying?
165  In fact, what is it verifying at all?? Certainly not the
166 amount, which is not even in
167  the Lucre token. If all it does is verify its signature,
168 then why sign it just to
169  verify it? Why exactly am I sending 99 tokens? What is
170 the server unblinding them
171  to look for?? Just to make sure all the IDs are random?
172 That they aren't spent
173  already?
174  I think that's it. The client has assurance he chose
175 his own random IDs, the server
176  verifies they are random and not spent already, and the
177 ID portion is the only part
178  that has to be randomized.
179 
180  UPDATE:
181  Ben Laurie has confirmed that the Chaumian 99 token requirement does not exist
182 with Lucre. All I have to
183  do is send a single blinded token. The server signs it and sends it back, and
184 the client unblinds it. Only the
185  ID itself is blinded -- the server can clearly see the amount and only the Mint
186 key for that denomination will work.
187  */
188 
189 // SUBCLASSES OF OTTOKEN FOR EACH DIGITAL CASH ALGORITHM.
190 #if defined(OT_CASH_USING_MAGIC_MONEY)
191 // Todo: Someday...
192 #endif // Magic Money
193 
194 #if defined(OT_CASH_USING_LUCRE)
195 
196 class Token_Lucre : public Token
197 {
198 private: // Private prevents erroneous use by other classes.
199  typedef Token ot_super;
200  friend class Token; // for the factory.
201 
202 protected:
203  EXPORT Token_Lucre();
204  EXPORT Token_Lucre(const OTIdentifier& SERVER_ID,
205  const OTIdentifier& ASSET_ID);
206  EXPORT Token_Lucre(const Purse& thePurse);
207 
208  EXPORT virtual bool GenerateTokenRequest(
209  const OTPseudonym& theNym, Mint& theMint, int64_t lDenomination,
210  int32_t nTokenCount = Token::GetMinimumPrototokenCount());
211 
212 public:
213  EXPORT virtual bool ProcessToken(const OTPseudonym& theNym, Mint& theMint,
214  Token& theRequest);
215 
216  EXPORT virtual ~Token_Lucre();
217 };
218 
219 #endif // Lucre
220 
221 } // namespace opentxs
222 
223 #endif // OPENTXS_CASH_TOKENLUCRE_HPP
static EXPORT int32_t GetMinimumPrototokenCount()
Definition: Token.cpp:180
virtual EXPORT bool GenerateTokenRequest(const OTPseudonym &theNym, Mint &theMint, int64_t lDenomination, int32_t nTokenCount=Token::GetMinimumPrototokenCount())
Definition: TokenLucre.cpp:183
virtual EXPORT ~Token_Lucre()
Definition: TokenLucre.cpp:175
virtual EXPORT bool ProcessToken(const OTPseudonym &theNym, Mint &theMint, Token &theRequest)
Definition: TokenLucre.cpp:332