import sys,math,random,binascii as ba,os from struct import unpack as u from struct import pack is2 = sys.version_info[0]<3 def bt(b): if is2: return b return ord(b) def b2i(b): return int(ba.b2a_hex(b),16) def i2b(i): h='%x'%i if len(h)%2==1: h ='0'+h if not is2: h=h.encode('utf-8') return ba.a2b_hex(h) def rs(a,o): if a[o]==bt(pack('B',0x81)): return(u('B',a[o+1])[0],2+o) elif a[o] == bt(pack('B',0x82)): return(u('>H',a[o+1:o+3])[0],3+o) def ri(b,o): i,o =rs(b,o) return(b[o:o+i],o+i) def b2me(b): if b[0]!=bt(pack('B',0x30)): return(None,None) _,o=rs(b,1) if b[o]!=bt(pack('B',2)): return(None,None) (m,o)=ri(b,o+1) if b[o]!=bt(pack('B',2)): return(None,None) e=b[o+2:] return(b2i(m),b2i(e)) def der2me(d): if d[0]!=bt(pack('B',0x30)): return(None,None) _,o=rs(d,1) while o