Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.88 KB | None | 0 0
  1. from math import log2, ceil
  2. from random import randint
  3.  
  4.  
  5. def fast_pow(a, x, p):
  6.     t = ceil(log2(x))
  7.     x = list(bin(x))[2:]
  8.     y = 1
  9.     s = a
  10.     x.reverse()
  11.     for i in range(t):
  12.         if int(x[i]) == 1:
  13.             y = y * s % p
  14.         s = s * s % p
  15.     return y
  16.  
  17. def extended_gcd(a, b):
  18.     u = [a, 1, 0]
  19.     v = [b, 0, 1]
  20.     while v[0] != 0:
  21.         q = u[0] // v[0]
  22.         t = [u[0] % v[0], u[1] - q * v[1], u[2] - q * v[2]]
  23.         u = v
  24.         v = t
  25.     return u
  26.  
  27. def g_generate(p):
  28.     g = 2
  29.     q = (p - 1) // 2
  30.     while(g > 1 and (g < p - 1) and fast_pow(q, g, p) != 1):
  31.         g += 1
  32.     return g   
  33.  
  34. def diffie_hellman(p):
  35.     g = randint(1, p - 1)
  36.     Xa = randint(1, 1000)
  37.     Xb = randint(1, 1000)
  38.     Ya = fast_pow(g, Xa, p)
  39.     Yb = fast_pow(g, Xb, p)
  40.     Ka = fast_pow(Yb, Xa, p)
  41.     Kb = fast_pow(Ya, Xb, p)
  42.     return (Ka, Kb)
  43.  
  44.  
  45. print("ans=", fast_pow(17, 984, 31))
  46.  
  47. # print(extended_gcd(28, 19))
  48.  
  49. # print(diffie_hellman(9973))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement