Exemplo n.º 1
0
// generates new public and secret keys
void PublicKeyGen(Integer secretKey, Integer& publicKeyX, Integer& publicKeyY)
{
	Integer q;
	ECP ec;
	ECPPoint G, Q;
	LoadSECP256r1Curve(q, ec, G);

	Q = ec.ScalarMultiply(G, secretKey);
	publicKeyX = Q.x;
	publicKeyY = Q.y;
}
Exemplo n.º 2
0
void Sign(Integer& sigE, Integer& sigS, const Integer& secretKey,
	      const byte* message, int mlen, AutoSeededRandomPool& rng)
{
	Integer q,k;
	ECP ec;
	ECPPoint G, r;
	LoadSECP256r1Curve(q, ec, G);

	k = Integer(rng, 256) % q; // choose random k
	r = ec.ScalarMultiply(G, k); // r = G^k
	sigE = HashPointMessage(ec, r, message, mlen) % q; // e = H(M||r)
	sigS = (k - secretKey*sigE) % q;
}
Exemplo n.º 3
0
// generates new public and secret keys
void KeyGen(Integer& secretKey, Integer& publicKeyX, Integer& publicKeyY, AutoSeededRandomPool& rng)
{
	Integer q;
	ECP ec;
	ECPPoint G, Q;
	LoadSECP256r1Curve(q, ec, G);

	secretKey = Integer(rng, 256) % q;

	Q = ec.ScalarMultiply(G, secretKey);
	publicKeyX = Q.x;
	publicKeyY = Q.y;
}
Exemplo n.º 4
0
NAMESPACE_END

ECP::ECP(const ECP &ecp, bool convertToMontgomeryRepresentation)
{
	if (convertToMontgomeryRepresentation && !ecp.GetField().IsMontgomeryRepresentation())
	{
		m_fieldPtr.reset(new MontgomeryRepresentation(ecp.GetField().GetModulus()));
		m_a = GetField().ConvertIn(ecp.m_a);
		m_b = GetField().ConvertIn(ecp.m_b);
	}
	else
		operator=(ecp);
}
Exemplo n.º 5
0
bool Verify(const Integer& publicKeyX, const Integer& publicKeyY,
	        const Integer& sigE, const Integer& sigS,
	        const byte* message,int mlen)
{
	Integer q, sigEv;
	ECP ec;
	ECPPoint G, rv, Q;
	LoadSECP256r1Curve(q, ec, G);

	Q = ECPPoint(publicKeyX,publicKeyY); 
	rv = ec.CascadeScalarMultiply(G, sigS, Q, sigE); // r = G^s.Q^e

	sigEv = HashPointMessage(ec, rv, message, mlen) % q;
	return (sigE == sigEv);
}
Exemplo n.º 6
0
Integer HashPointMessage(const ECP& ec, const ECPPoint& R,
	const byte* message, int mlen, bool compress = false)
{
	const int digestsize = 256/8;
	SHA3 sha(digestsize);

	int len = ec.EncodedPointSize();
	byte *buffer = new byte[len];
	ec.EncodePoint(buffer, R, compress);
	sha.Update(buffer, len);
	delete[] buffer;

	sha.Update(message, mlen);

	byte digest[digestsize];
	sha.Final(digest);
	
	Integer ans;
	ans.Decode(digest, digestsize);
	return ans;
}
Exemplo n.º 7
0
Arquivo: ecp.cpp Projeto: mentat/nnim
void EcPrecomputation<ECP>::SetCurveAndBase(const ECP &ec, const ECP::Point &base)
{
	m_mr.reset(new MontgomeryRepresentation(ec.GetField().GetModulus()));
	m_ec.reset(new ECP(*m_mr, m_mr->ConvertIn(ec.GetA()), m_mr->ConvertIn(ec.GetB())));
	m_ep.SetGroupAndBase(*m_ec, ToMontgomery(*m_mr, base));
}