def verify(self, message, s, e): r = (pow(self.g, s, self.p) * pow(self.publicKey, e, self.p)) % self.p h = HashWrapper() h.add(message) h.add(int2bin(r)) e1 = h.digest() return bin2int(e1) == e
def sign(self, message): k = random.SystemRandom().randrange(self.q) r = pow(self.g, k, self.p) h = HashWrapper() h.add(message) h.add(int2bin(r)) e = h.digest() s = (k - self.x * bin2int(e)) % self.q signature = (e, int2bin(s)) return signature