Open-Transactions  0.93.0-ge03d287
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CoinRequest Class Reference

#include <bank.h>

Inheritance diagram for CoinRequest:
Collaboration diagram for CoinRequest:

Public Member Functions

 CoinRequest (BIO *bio)
 
 CoinRequest (PublicBank &bank)
 
 ~CoinRequest ()
 
BIGNUM * Unblind (BIGNUM *bnSignedCoin, PublicBank &bank)
 
void ProcessResponse (Coin *pCoin, PublicBank &bank, BIGNUM *bnSignedCoinRequest)
 
void WriteBIO (BIO *bio)
 
void ReadBIO (BIO *bio)
 
void Dump ()
 
- Public Member Functions inherited from PublicCoinRequest
 PublicCoinRequest ()
 
 PublicCoinRequest (BIO *bio)
 
 ~PublicCoinRequest ()
 
BIGNUM * Request ()
 
void WriteBIO (BIO *bio)
 
void ReadBIO (BIO *bio)
 
void Dump ()
 

Additional Inherited Members

- Protected Attributes inherited from PublicCoinRequest
BIGNUM * m_bnCoinRequest
 

Detailed Description

Definition at line 249 of file bank.h.

Constructor & Destructor Documentation

CoinRequest::CoinRequest ( BIO *  bio)
inline

Definition at line 262 of file bank.h.

263  {
264  m_ctx=NULL;
265  ReadBIO(bio);
266  }
void ReadBIO(BIO *bio)
CoinRequest::CoinRequest ( PublicBank bank)
inline

Definition at line 267 of file bank.h.

268  {
269  m_ctx=NULL;
270 
271  BIGNUM *y=BN_new();
272  for( ; ; )
273  {
274  m_coin.Random(bank.CoinLength());
275 
276  m_coin.GenerateCoinNumber(y,bank);
277 
278  if(BN_cmp(y,bank.p()) < 0)
279  break;
280  }
281 
282  // choose b
283  m_bnBlindingFactor=BN_new();
284  BN_rand(m_bnBlindingFactor,BLINDING_LENGTH*8,0,0);
285  DumpNumber("b= ",m_bnBlindingFactor);
286 
287  // calculate A->B: y g^b
288  m_bnCoinRequest=BN_new();
289  CheckCTX();
290 
291  BN_mod_exp(m_bnCoinRequest,bank.g(),m_bnBlindingFactor,bank.p(),m_ctx);
292  BN_mod_mul(m_bnCoinRequest,m_bnCoinRequest,y,bank.p(),m_ctx);
293  DumpNumber("A->B= ",m_bnCoinRequest);
294 
295  BN_free(y);
296  }
void DumpNumber(BIO *out, const char *szTitle, const BIGNUM *bn, const char *szTrailer=_NL)
boolean GenerateCoinNumber(BIGNUM *bnNumber, const PublicBank &bank)
Definition: bank.h:150
void Random(int nCoinLength)
Definition: bank.h:137
int CoinLength() const
Definition: bank.h:67
BIGNUM * m_bnCoinRequest
Definition: bank.h:229
BIGNUM * g()
Definition: bank.h:55
#define BLINDING_LENGTH
Definition: bank.h:14
const BIGNUM * p() const
Definition: bank.h:53
CoinRequest::~CoinRequest ( )
inline

Definition at line 297 of file bank.h.

298  {
299  BN_free(m_bnBlindingFactor);
300  BN_CTX_free(m_ctx);
301  }

Member Function Documentation

void CoinRequest::Dump ( )
inline

Definition at line 321 of file bank.h.

322  {
324  m_coin.Dump();
325  DumpNumber("blinding= ",m_bnBlindingFactor);
326  }
void DumpNumber(BIO *out, const char *szTitle, const BIGNUM *bn, const char *szTrailer=_NL)
void Dump()
Definition: bank.h:177
void Dump()
Definition: bank.h:245
void CoinRequest::ProcessResponse ( Coin pCoin,
PublicBank bank,
BIGNUM *  bnSignedCoinRequest 
)
inline

Definition at line 311 of file bank.h.

313  {
314  BIGNUM *bnCoinSignature=Unblind(bnSignedCoinRequest,bank);
315  DumpNumber("z= ",bnCoinSignature);
316  pCoin->Set(m_coin,bnCoinSignature);
317  }
void DumpNumber(BIO *out, const char *szTitle, const BIGNUM *bn, const char *szTrailer=_NL)
void Set(BIGNUM *bnCoinID, BIGNUM *bnCoinSignature)
Definition: bank.h:207
BIGNUM * Unblind(BIGNUM *bnSignedCoin, PublicBank &bank)
Definition: bank.h:302
void CoinRequest::ReadBIO ( BIO *  bio)
BIGNUM* CoinRequest::Unblind ( BIGNUM *  bnSignedCoin,
PublicBank bank 
)
inline

Definition at line 302 of file bank.h.

303  {
304  CheckCTX();
305  BIGNUM *z=BN_new();
306  BN_mod_exp(z,bank.pub_key(),m_bnBlindingFactor,bank.p(),m_ctx);
307  BN_mod_inverse(z,z,bank.p(),m_ctx);
308  BN_mod_mul(z,bnSignedCoin,z,bank.p(),m_ctx);
309  return z;
310  }
BIGNUM * pub_key()
Definition: bank.h:57
const BIGNUM * p() const
Definition: bank.h:53
void CoinRequest::WriteBIO ( BIO *  bio)

The documentation for this class was generated from the following file: