Exemple #1
0
 def generate(self, m):
     l, n, seed_len = self.l, self.n, self.seed_len
     p, q = PrimeGenerator(10).generate(2048, 224, 256)
     g = pow(2, (p - 1) / q, p)
     x = rnd.randrange(1, q)
     y = pow(g, x, p)
     k = rnd.randrange(1, q)
     r = pow(g, k, p) % q
     s = mul_by_mod(div_by_mod(1, k, q), sha256(m) + x * r, q)
     return DSAResult(r, s), p, q, g, y
Exemple #2
0
 def is_valid(self, m, p, q, g, y):
     if self.r <= 0 or self.r >= q:
         return False
     if self.s <= 0 or self.s >= q:
         return False
     w = div_by_mod(1, self.s, q)
     u1 = mul_by_mod(sha256(m), w, q)
     u2 = mul_by_mod(self.r, w, q)
     v = mul_by_mod(pow(g, u1, p), pow(y, u2, p), p) % q
     return v == self.r
Exemple #3
0
 def generate(self, M):
     alpha = sha256(M)
     e = alpha % self.ec.n
     e = 1 if e == 0 else e
     while True:
         k = rnd.randrange(1, self.ec.n)
         C = k * self.ec.G
         r = C.x % self.ec.n
         if r == 0:
             continue
         s = (r * self.d + k * e) % (self.ec.n)
         if s == 0:
             continue
         return r, s
Exemple #4
0
 def validate(self, M, r, s):
     if r <= 0 or r >= self.ec.n:
         return False
     if s <= 0 or s >= self.ec.n:
         return False
     alpha = sha256(M)
     e = alpha % self.ec.n
     e = 1 if e == 0 else e
     v = div_by_mod(1, e, self.ec.n)
     z1 = mul_by_mod(s, v, self.ec.n)
     z2 = mul_by_mod(-r, v, self.ec.n)
     C = z1 * self.ec.G + z2 * self.Q
     R = C.x % self.ec.n
     return R == r