Example #1
0
def validate(m, R, Q, n, Elist, char, signature):
	# m, Q, n, Elist, char as above
	# R is d*Q, this is Alice's public key
	# signature is the list [r, s] as above
	r = signature[0]
	s = signature[1]
	z = HashMessage(m, n)
	w = EC.invMod(s, n)
	w = w%n
	u1 = (z*w)%n
	u2 = (r*w)%n
	u1Q = EC.nP(u1, Q, Elist, char)
	u2R = EC.nP(u2, R, Elist, char)
	T = EC.addPts(u1Q, u2R, Elist, char)
	
	return ( (T[0])%n == r%n)
Example #2
0
def sign(m, d, Q, n, Elist, char):
	z = HashMessage(m, n)
	myRand = random.SystemRandom() # a cryptographically secure random number generator
	r = 0
	while(r == 0):
		k = myRand.randint(1, n-1)
		kQ = EC.nP(k, Q, Elist, char)
		r = kQ[0]%n # if r = 0 we will keep looping
		
		# only compute s if r is not zero
		if(r != 0):
			k_inv = EC.invMod(k, n)	
			s = (k_inv*(z + r*d))%n
			if(s == 0): # if s equals 0
				r = 0	# choose a new k and compute r and s again
		
	return [r, s]