PIVX Core  5.6.99
P2P Digital Currency
Commitment.h
Go to the documentation of this file.
1 
12 // Copyright (c) 2017-2021 The PIVX Core developers
13 
14 #ifndef PIVX_LIBZEROCOIN_COMMITMENT_H
15 #define PIVX_LIBZEROCOIN_COMMITMENT_H
16 
17 #include "Params.h"
18 #include "serialize.h"
19 
20 // We use a SHA256 hash for our PoK challenges. Update the following
21 // if we ever change hash functions.
22 #define COMMITMENT_EQUALITY_CHALLENGE_SIZE 256
23 
24 // A 512-bit security parameter for the statistical ZK PoK.
25 #define COMMITMENT_EQUALITY_SECMARGIN 512
26 
27 namespace libzerocoin {
28 
33 class Commitment {
34 public:
35  explicit Commitment(const IntegerGroupParams* p, const CBigNum& bnSerial, const CBigNum& bnRandomness):
36  params(p),
37  randomness(bnRandomness),
38  contents(bnSerial)
39  {
41  params->h.pow_mod(this->randomness, params->modulus), params->modulus));
42  }
43 
44  Commitment(const IntegerGroupParams* p, const CBigNum& value):
45  Commitment(p, value, CBigNum::randBignum(p->groupOrder)) {};
46 
47  const CBigNum& getCommitmentValue() const { return this->commitmentValue; };
48  const CBigNum& getRandomness() const { return this->randomness; };
49  const CBigNum& getContents() const { return this->contents; };
50 
51 private:
56 
57  SERIALIZE_METHODS(Commitment, obj) { READWRITE(obj.commitmentValue, obj.randomness, obj.contents); }
58 };
59 } /* namespace libzerocoin */
60 #endif // PIVX_LIBZEROCOIN_COMMITMENT_H
C++ wrapper for BIGNUM.
Definition: bignum.h:35
CBigNum pow_mod(const CBigNum &e, const CBigNum &m) const
modular exponentiation: this^e mod n
Definition: bignum.cpp:220
CBigNum mul_mod(const CBigNum &b, const CBigNum &m) const
modular multiplication: (this * b) mod m
Definition: bignum.cpp:207
A commitment, complete with contents and opening randomness.
Definition: Commitment.h:33
Commitment(const IntegerGroupParams *p, const CBigNum &value)
Definition: Commitment.h:44
SERIALIZE_METHODS(Commitment, obj)
Definition: Commitment.h:57
Commitment(const IntegerGroupParams *p, const CBigNum &bnSerial, const CBigNum &bnRandomness)
Definition: Commitment.h:35
const CBigNum contents
Definition: Commitment.h:55
const CBigNum & getContents() const
Definition: Commitment.h:49
const IntegerGroupParams * params
Definition: Commitment.h:49
const CBigNum & getRandomness() const
Definition: Commitment.h:48
const CBigNum & getCommitmentValue() const
Definition: Commitment.h:47
CBigNum h
A second generator for the group.
Definition: Params.h:47
CBigNum modulus
The modulus for the group.
Definition: Params.h:52
CBigNum g
A generator for the group.
Definition: Params.h:40
Parameter classes for Zerocoin.
#define READWRITE(...)
Definition: serialize.h:183