int main20(){ // initiate a discrete log group // (in this case the OpenSSL implementation of the elliptic curve group K-233) DlogGroup * dlog = new OpenSSLDlogZpSafePrime(128); // get the group generator and order GroupElement * g = dlog->getGenerator(); biginteger q = dlog->getOrder(); // create a random exponent r mt19937 gen(get_seeded_random()); boost::random::uniform_int_distribution<biginteger> ui(0, q - 1); biginteger r = ui(gen); // exponentiate g in r to receive a new group element GroupElement * g1 = dlog->exponentiate(g, r); // create a random group element GroupElement * h = dlog->createRandomElement(); // multiply elements GroupElement * gMult = dlog->multiplyGroupElements(g1, h); cout << "genrator value is: " << ((OpenSSLZpSafePrimeElement *)g)->getElementValue() << endl; cout << "exponentiate value is: " << r << endl; cout << "exponentiation result is: " << ((OpenSSLZpSafePrimeElement *)g1)->getElementValue() << endl; cout << "random element chosen is: " << ((OpenSSLZpSafePrimeElement *)h)->getElementValue() << endl; cout << "element multplied by expresult: " << ((OpenSSLZpSafePrimeElement *)gMult)->getElementValue() << endl; return 0; }
/** * Constructor that accepts the underlying channel and sigma protocol's verifier. * @param channel used for communication * @param sVerifier underlying sigma verifier to use. * @param random */ ZKPOKFromSigmaCmtPedersenVerifier(shared_ptr<ChannelServer> channel, shared_ptr<SigmaVerifierComputation> sVerifier, std::mt19937_64 random, shared_ptr<CmtRCommitPhaseOutput> emptyTrap, shared_ptr<DlogGroup> dg) { this->channel = channel; this->sVerifier = sVerifier; this->committer = make_shared<CmtPedersenTrapdoorCommitter>(channel, dg, get_seeded_random()); this->random = random; this->trap = emptyTrap; };
RSAElement::RSAElement(biginteger modN){ /* * samples a number between 1 to n-1 */ mt19937 generator = get_seeded_random(); biginteger randNumber; int numbit = NumberOfBits(modN); biginteger expo = mp::pow(biginteger(2), numbit-1); boost::random::uniform_int_distribution<biginteger> ui(0, expo); do { randNumber = ui(generator); // samples a random BigInteger with modN.bitLength()+1 bits } while (randNumber > (modN - 2)); // drops the element if it's bigger than mod(N)-2 // gets a random biginteger between 1 to modN-1 randNumber += 1; // sets it to be the element element = randNumber; }
RSAElement::RSAElement(biginteger modN){ /* * samples a number between 1 to n-1 */ mt19937 generator = get_seeded_random(); biginteger randNumber; int numbit = NumberOfBits(modN); biginteger expo = mp::pow(biginteger(2), numbit-1); do { // samples a random BigInteger with modN.bitLength()+1 bits randNumber = getRandomInRange(0, expo, generator); } while (randNumber > (modN - 2)); // drops the element if it's bigger than mod(N)-2 // gets a random biginteger between 1 to modN-1 randNumber += 1; // sets it to be the element element = randNumber; }
/** * Constructor that accepts the underlying channel and sigma protocol's prover. * @param channel used for communication * @param sProver underlying sigma prover to use. */ ZKPOKFromSigmaCmtPedersenProver(shared_ptr<ChannelServer> channel, shared_ptr<SigmaProverComputation> sProver, shared_ptr<DlogGroup> dg) { this->sProver = sProver; this->receiver = make_shared<CmtPedersenTrapdoorReceiver>(channel, dg, get_seeded_random()); this->channel = channel; }