예제 #1
0
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;
}
예제 #2
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;
	};
예제 #3
0
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;
}
예제 #4
0
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;
}
예제 #5
0
	/**
	* 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;
	}