Chris_M_Thomasson

DH Secret Key Space Calc

Aug 30th, 2016
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.26 KB | None | 0 0
  1. # Chris M. Thomasson
  2.  
  3.  
  4. import math;
  5. import random;
  6.  
  7.  
  8. def is_prime(n):
  9.     if (not (n % 2)): return (n == 2);
  10.     if (not (n % 3)): return (n == 3);
  11.  
  12.     m = int(math.sqrt(n));
  13.  
  14.     for i in range(5, m + 1, 6):
  15.         if (not (n % i) or not (n % (i + 2))):
  16.             return False;
  17.  
  18.     return True;
  19.  
  20.  
  21. def get_primes(nmin, nmax):
  22.     c = nmin;
  23.     p = [];
  24.     for i in range(nmax):
  25.         while (not is_prime(c)):
  26.             c = c + 1;
  27.         p.append(c);
  28.         c = c + 2;
  29.     return p;
  30.  
  31. def dh_get_primes(p):
  32.     dh_p = [];
  33.     for i in p:
  34.         c = i*2 + 1;
  35.         if (is_prime(c)):
  36.             dh_p.append(c);
  37.     return dh_p;
  38.  
  39.  
  40. def dh_gen_mbase(p, g):
  41.     return (p, g);
  42.  
  43. def dh_gen_rand_mbase(dh_p):
  44.     p = random.randint(0, len(dh_p) - 1);
  45.     g = random.randint(2, p - 2);
  46.     return dh_gen_mbase(p, g);
  47.  
  48.  
  49. def dh_gen(mbase, r_n):
  50.     p = mbase[1]**r_n % mbase[0];
  51.     return (r_n, p);
  52.  
  53. def dh_gen_rand(mbase, nmin, nmax):
  54.     r_n = random.randint(nmin, nmax);
  55.     return dh_gen(mbase, r_n);
  56.  
  57. def dh_get(mbase, gen, p):
  58.     return p**gen[0] % mbase[0];
  59.  
  60.  
  61. def dh_calc_range(mbase, n):
  62.     h = [];
  63.     for y in range(1, n + 1):
  64.         for x in range(1, n + 1):
  65.             alice = dh_gen(mbase, x);
  66.             bob = dh_gen(mbase, y);
  67.  
  68.             a_s = dh_get(mbase, alice, bob[1]);
  69.             b_s = dh_get(mbase, bob, alice[1]);
  70.  
  71.             try:
  72.                 i = h.index(a_s);
  73.             except ValueError:
  74.                 if (a_s != b_s):
  75.                     print("******** SECRET KEY ERROR! *********");
  76.                 h.append(a_s);
  77.            
  78.             #print("(%s, %s):s:%s" % (x, y, a_s));
  79.     return (h, len(h) / mbase[0]);
  80.  
  81. def dh_calc_display(mbase, calc):
  82.     n = len(calc[0]);
  83.     print("mbase:%s" % (str(mbase)));
  84.     print("\n\n%s Unique Secret Values" % (n));
  85.     print("__________________________________________");
  86.     a = "";
  87.     for i in range(n):
  88.         a = a + "%s\t" % (calc[0][i]);
  89.         if (not ((i + 1) % 6)): a = a + "\n";
  90.     print(a);
  91.     print("\n%s of %s used, %s" % (n, mbase[0], calc[1]));
  92.  
  93.  
  94.  
  95. # Main Program
  96. primes = dh_get_primes(get_primes(256, 1024));
  97. mbase = dh_gen_mbase(23, 5);
  98. calc = dh_calc_range(mbase, mbase[0] + 1);
  99. dh_calc_display(mbase, calc);
Advertisement
Add Comment
Please, Sign In to add comment