Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Chris M. Thomasson
- import math;
- import random;
- def is_prime(n):
- if (not (n % 2)): return (n == 2);
- if (not (n % 3)): return (n == 3);
- m = int(math.sqrt(n));
- for i in range(5, m + 1, 6):
- if (not (n % i) or not (n % (i + 2))):
- return False;
- return True;
- def get_primes(nmin, nmax):
- c = nmin;
- p = [];
- for i in range(nmax):
- while (not is_prime(c)):
- c = c + 1;
- p.append(c);
- c = c + 2;
- return p;
- def dh_get_primes(p):
- dh_p = [];
- for i in p:
- c = i*2 + 1;
- if (is_prime(c)):
- dh_p.append(c);
- return dh_p;
- def dh_gen_mbase(p, g):
- return (p, g);
- def dh_gen_rand_mbase(dh_p):
- p = random.randint(0, len(dh_p) - 1);
- g = random.randint(2, p - 2);
- return dh_gen_mbase(p, g);
- def dh_gen(mbase, r_n):
- p = mbase[1]**r_n % mbase[0];
- return (r_n, p);
- def dh_gen_rand(mbase, nmin, nmax):
- r_n = random.randint(nmin, nmax);
- return dh_gen(mbase, r_n);
- def dh_get(mbase, gen, p):
- return p**gen[0] % mbase[0];
- def dh_calc_range(mbase, n):
- h = [];
- for y in range(1, n + 1):
- for x in range(1, n + 1):
- alice = dh_gen(mbase, x);
- bob = dh_gen(mbase, y);
- a_s = dh_get(mbase, alice, bob[1]);
- b_s = dh_get(mbase, bob, alice[1]);
- try:
- i = h.index(a_s);
- except ValueError:
- if (a_s != b_s):
- print("******** SECRET KEY ERROR! *********");
- h.append(a_s);
- #print("(%s, %s):s:%s" % (x, y, a_s));
- return (h, len(h) / mbase[0]);
- def dh_calc_display(mbase, calc):
- n = len(calc[0]);
- print("mbase:%s" % (str(mbase)));
- print("\n\n%s Unique Secret Values" % (n));
- print("__________________________________________");
- a = "";
- for i in range(n):
- a = a + "%s\t" % (calc[0][i]);
- if (not ((i + 1) % 6)): a = a + "\n";
- print(a);
- print("\n%s of %s used, %s" % (n, mbase[0], calc[1]));
- # Main Program
- primes = dh_get_primes(get_primes(256, 1024));
- mbase = dh_gen_mbase(23, 5);
- calc = dh_calc_range(mbase, mbase[0] + 1);
- dh_calc_display(mbase, calc);
Advertisement
Add Comment
Please, Sign In to add comment