Import ZeroCoin adapted sources
[novacoin.git] / src / zerocoin / ParamGeneration.h
1 /// \file       ParamGeneration.h
2 ///
3 /// \brief      Parameter generation routines for Zerocoin.
4 ///
5 /// \author     Ian Miers, Christina Garman and Matthew Green
6 /// \date       June 2013
7 ///
8 /// \copyright  Copyright 2013 Ian Miers, Christina Garman and Matthew Green
9 /// \license    This project is released under the MIT license.
10
11 #ifndef PARAMGENERATION_H_
12 #define PARAMGENERATION_H_
13
14 namespace libzerocoin {
15
16 void CalculateParams(Params &params, Bignum N, std::string aux, uint32_t securityLevel);
17 void calculateGroupParamLengths(uint32_t maxPLen, uint32_t securityLevel,
18                                 uint32_t *pLen, uint32_t *qLen);
19
20 // Constants
21 #define STRING_COMMIT_GROUP         "COIN_COMMITMENT_GROUP"
22 #define STRING_AVC_GROUP            "ACCUMULATED_VALUE_COMMITMENT_GROUP"
23 #define STRING_AVC_ORDER            "ACCUMULATED_VALUE_COMMITMENT_ORDER"
24 #define STRING_AIC_GROUP            "ACCUMULATOR_INTERNAL_COMMITMENT_GROUP"
25 #define STRING_QRNCOMMIT_GROUPG     "ACCUMULATOR_QRN_COMMITMENT_GROUPG"
26 #define STRING_QRNCOMMIT_GROUPH     "ACCUMULATOR_QRN_COMMITMENT_GROUPH"
27 #define ACCUMULATOR_BASE_CONSTANT   31
28 #define MAX_PRIMEGEN_ATTEMPTS       10000
29 #define MAX_ACCUMGEN_ATTEMPTS       10000
30 #define MAX_GENERATOR_ATTEMPTS      10000
31 #define NUM_SCHNORRGEN_ATTEMPTS     10000
32
33 // Prototypes
34 bool                primalityTestByTrialDivision(uint32_t candidate);
35 uint256             calculateSeed(Bignum modulus, std::string auxString, uint32_t securityLevel, std::string groupName);
36 uint256             calculateGeneratorSeed(uint256 seed, uint256 pSeed, uint256 qSeed, std::string label, uint32_t index, uint32_t count);
37
38 uint256             calculateHash(uint256 input);
39 IntegerGroupParams  deriveIntegerGroupParams(uint256 seed, uint32_t pLen, uint32_t qLen);
40 IntegerGroupParams  deriveIntegerGroupFromOrder(Bignum &groupOrder);
41 void                calculateGroupModulusAndOrder(uint256 seed, uint32_t pLen, uint32_t qLen,
42         Bignum *resultModulus, Bignum *resultGroupOrder,
43         uint256 *resultPseed, uint256 *resultQseed);
44 Bignum              calculateGroupGenerator(uint256 seed, uint256 pSeed, uint256 qSeed, Bignum modulus,
45         Bignum groupOrder, uint32_t index);
46 Bignum              generateRandomPrime(uint32_t primeBitLen, uint256 in_seed, uint256 *out_seed,
47                                         uint32_t *prime_gen_counter);
48 Bignum              generateIntegerFromSeed(uint32_t numBits, uint256 seed, uint32_t *numIterations);
49 bool                primalityTestByTrialDivision(uint32_t candidate);
50
51 }/* namespace libzerocoin */
52
53 #endif /* PARAMGENERATION_H_ */