Advertisement
SmilingWolf

DERGen.py

Jul 26th, 2018
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.22 KB | None | 0 0
  1. # OpenSSL "asn1parse -genconf" compatible DER configuration (RFC3447) generator
  2. # Using a bunch of public domain functions because they just work(TM)
  3. # -- SmilingWolf
  4.  
  5. # Extended Euclidean Algorithm
  6. def xgcd(b, a):
  7.     x0, x1, y0, y1 = 1, 0, 0, 1
  8.     while a != 0:
  9.         q, b, a = b // a, a, b % a
  10.         x0, x1 = x1, x0 - q * x1
  11.         y0, y1 = y1, y0 - q * y1
  12.     return  b, x0, y0
  13.  
  14. # Least common multiple
  15. def lcm(a, b):
  16.     return a * b / xgcd(a, b)[0]
  17.  
  18. # Modular inverse
  19. def modinv(a, m):
  20.     g, x, y = xgcd(a, m)
  21.     if g != 1:
  22.         raise Exception('modular inverse does not exist')
  23.     else:
  24.         return x % m
  25.  
  26. E = 65537
  27. P = 398075086424064937397125500550386491199064362342526708406385189575946388957261768583317
  28. Q = 472772146107435302536223071973048224632914695302097116459852171130520711256363590397527
  29.  
  30. N = P * Q
  31. PQlambda = lcm(P - 1, Q - 1)
  32. D = modinv(E, PQlambda)
  33. exp1 = D % (P - 1)
  34. exp2 = D % (Q - 1)
  35. coeff = modinv(Q, P)
  36.  
  37. print('asn1=SEQUENCE:private_key')
  38. print('[private_key]')
  39. print('version=INTEGER:0')
  40. print('n=INTEGER:%d' % N)
  41. print('e=INTEGER:%d' % E)
  42. print('d=INTEGER:%d' % D)
  43. print('p=INTEGER:%d' % P)
  44. print('q=INTEGER:%d' % Q)
  45. print('exp1=INTEGER:%d' % exp1)
  46. print('exp2=INTEGER:%d' % exp2)
  47. print('coeff=INTEGER:%d' % coeff)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement