Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # OpenSSL "asn1parse -genconf" compatible DER configuration (RFC3447) generator
- # Using a bunch of public domain functions because they just work(TM)
- # -- SmilingWolf
- # Extended Euclidean Algorithm
- def xgcd(b, a):
- x0, x1, y0, y1 = 1, 0, 0, 1
- while a != 0:
- q, b, a = b // a, a, b % a
- x0, x1 = x1, x0 - q * x1
- y0, y1 = y1, y0 - q * y1
- return b, x0, y0
- # Least common multiple
- def lcm(a, b):
- return a * b / xgcd(a, b)[0]
- # Modular inverse
- def modinv(a, m):
- g, x, y = xgcd(a, m)
- if g != 1:
- raise Exception('modular inverse does not exist')
- else:
- return x % m
- E = 65537
- P = 398075086424064937397125500550386491199064362342526708406385189575946388957261768583317
- Q = 472772146107435302536223071973048224632914695302097116459852171130520711256363590397527
- N = P * Q
- PQlambda = lcm(P - 1, Q - 1)
- D = modinv(E, PQlambda)
- exp1 = D % (P - 1)
- exp2 = D % (Q - 1)
- coeff = modinv(Q, P)
- print('asn1=SEQUENCE:private_key')
- print('[private_key]')
- print('version=INTEGER:0')
- print('n=INTEGER:%d' % N)
- print('e=INTEGER:%d' % E)
- print('d=INTEGER:%d' % D)
- print('p=INTEGER:%d' % P)
- print('q=INTEGER:%d' % Q)
- print('exp1=INTEGER:%d' % exp1)
- print('exp2=INTEGER:%d' % exp2)
- print('coeff=INTEGER:%d' % coeff)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement