Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.86 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Apr 23 13:03:18 2019
  4.  
  5. @author: Sceri
  6. """
  7.  
  8. from prime_number import generate_prime_number
  9. import random
  10.  
  11. N_LENGTH = 32
  12.  
  13. def generateN():
  14.     p = generate_prime_number(N_LENGTH // 2)
  15.     q = generate_prime_number(N_LENGTH // 2)
  16.     return p * q
  17.  
  18. def egcd(a, b):
  19.         if a == 0:
  20.             return (b, 0, 1)
  21.         else:
  22.             g, x, y = egcd(b % a, a)
  23.             return (g, y - (b // a) * x, x)
  24.  
  25. def mulinv(b, n):
  26.     g, x, _ = egcd(b, n)
  27.     if g == 1:
  28.         return x % n
  29.     return -1
  30.  
  31. if __name__ == "__main__":
  32.     n = generateN()
  33.     print("N = " + str(n))
  34.     k = int(input("Enter number of keys: "))
  35.    
  36.     s_vector = []
  37.     v_vector = []
  38.     for i in range(0, k):
  39.         s = random.randint(1, n)
  40.         v = mulinv(s * s, n)
  41.         s_vector.append(s)
  42.         v_vector.append(v)
  43.     print("S Vector: ", s_vector)
  44.     print("V Vector: ", v_vector)
  45.    
  46.     t = int(input("Enter number of rounds: "))
  47.     for i in range(0, t):
  48.         print("----------------- Round {0} -----------------".format(i))
  49.        
  50.         r = random.randint(1, n)
  51.         x = pow(r, 2, n)
  52.        
  53.         print("A -> B: x = {0}".format(x))
  54.        
  55.         bool_vector = [random.choice([True, False]) for i in range(0, k)]
  56.         print("B -> A: e: {0}".format(bool_vector))
  57.        
  58.         y = r
  59.         for i in range(0, k):
  60.             if bool_vector[i]:
  61.                 y = (y * s_vector[i]) % n
  62.         print("A -> B: y: {0}".format(y))
  63.        
  64.         z = pow(y, 2, n)
  65.         for i in range(0, k):
  66.             if bool_vector[i]:
  67.                 z = (z * v_vector[i]) % n
  68.         passed = x == z
  69.         print("Passed: {0}".format(passed))
  70.        
  71.         if not passed:
  72.             print("Test Failed. Hackerman detected")
  73.             break
  74.     if passed:
  75.         print("Ok")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement