In [2]:
public_n = \
    22372619959586467809053769802237882581889757027732230613227897011530894747842858329994040492955713812652880210316692276105745796102474026823431443637835477569820625810377604850561976805688874758480340509611039549618351710307607148236316902456036244332445469171187516730474414325624749009364540468215844150201715175116969584764047838883378221778667124769930558663215690234394466659983499287582590375304084076006630565952551582630555131604012723576961862172273313304550004488482503262713337752113748914744383454611253319544464446490060830564840412409920562387134666345154211491259741325073094718648719808043783683189701
public_e = 65537

In [3]:
private_d = 14133902744812220985065737386851016258571213363736477777125511084859142701755311708450848505879814745643944632005462720411465175336538629057944856507580485494045857613669590820877024057951027383392000520613178364478822891830048045507548845879232626212616380977076716285332440855148106920285030883402361953564996342093748544501656221848060636048433669717073299900023888736667454647424318766739445323802460465528460018946841056490388592466553275171933082665705325130863355860051682107146041624010449129671140426329975498065074036695970491481220325803442936435082954436275979649964957506060992855890597177373657315727621

In [4]:
private_p = 165365953863350613045144760416078784491530172837607650081851239467597104613581918552784675052485741907750556552005247877207346048055338110005922218895057721963481234725012850536896536840110704560284977548027345682653828809054302101512301103705695351447389288662458108053747092124995562454758441145895232434923

In [5]:
private_q = 135291572641814640217393269005910240360716152346607618986902875926435402573077067220684907409489029716620649892319338661021210561862706459565691936028549206203368578970467968005001225109331164529012369283895871775228554957440166117489971746756863385081485570603801343021625465595025978006340488856746999631887

In [7]:
private_p * private_q == public_n


Out[7]:
True

In [21]:
nnnn1 = """00:b1:39:ac:7a:26:07:72:5e:93:76:14:d9:53:99:
    e8:50:93:cf:b5:ff:1b:1c:0e:e6:c0:61:2b:b9:6a:
    5a:b6:3f:20:a5:cd:0b:cc:55:05:4d:41:bf:71:a1:
    2c:44:78:53:03:ae:65:2a:0c:7b:46:4c:41:f3:b7:
    76:a8:33:8f:89:86:14:e5:97:0a:bf:11:d2:57:33:
    2a:8a:62:21:fa:86:24:79:3a:cf:83:fb:d7:c8:e8:
    ab:43:44:46:4f:a3:bb:bc:ed:8b:32:ce:2b:d8:f8:
    5c:df:6e:99:f7:73:1d:07:6d:63:f6:5c:c1:37:f7:
    97:5b:a6:d7:dd:e9:80:bd:f0:0b:4d:d9:4d:a6:bb:
    39:bd:04:7f:73:89:74:ff:6a:43:53:89:e8:ee:bc:
    8b:89:d8:b0:5f:37:1c:c2:8a:a3:16:10:45:ac:93:
    b9:05:3f:db:79:73:fa:3c:4f:55:93:21:f3:b0:15:
    8c:9d:bc:82:6f:28:b7:d9:d9:29:c8:98:8e:db:73:
    0c:bb:f4:af:c9:fb:cd:95:ff:05:4e:e5:7b:4f:be:
    64:ef:5d:43:44:ff:3d:fe:24:53:39:29:50:5d:27:
    c6:c8:9e:cb:5e:17:2a:b1:e9:aa:14:c4:dc:03:07:
    49:4f:c3:04:bd:6d:19:da:2b:64:58:1c:1d:e6:42:
    2b:c5"""

In [25]:
prime1 = """00:eb:7d:2a:d9:14:de:9a:d9:48:81:0b:24:e4:a1:
    bc:91:ca:2b:d0:be:2f:7b:68:67:ff:f6:27:df:5f:
    c1:bd:1e:8a:ad:9f:32:18:9c:2e:67:fe:b2:df:2f:
    1c:78:d6:91:37:a7:bf:ae:0e:00:a2:7a:b2:bf:d9:
    46:f7:38:9f:de:2f:ea:5d:14:2b:5d:11:8b:f1:f5:
    a2:12:4f:4c:9a:57:50:47:a6:16:e4:c9:2f:96:4d:
    09:96:22:27:5a:18:9a:8b:d9:38:f3:a8:41:ab:72:
    b9:55:c4:86:21:af:34:68:f9:06:fb:c2:da:bd:b7:
    c3:cc:7f:28:59:57:4b:72:eb"""
prime2 = """00:c0:a9:5e:43:7f:d1:7b:3b:1c:d1:94:32:f5:cf:
    7e:7f:ae:b8:dd:c7:9c:24:46:38:6d:42:37:1c:81:
    66:b5:21:ac:ea:a3:2e:7a:0e:fb:de:a6:ee:0c:4f:
    89:ed:7c:d8:fe:9f:65:24:bb:3f:bb:dc:74:2e:39:
    d3:25:16:c4:f2:f3:b6:28:d1:58:7c:76:b1:9f:0c:
    28:5c:1d:5e:56:6d:7e:be:61:2c:66:65:25:ea:e5:
    f6:f5:d8:f5:a7:b4:ac:8f:1c:40:eb:d4:ec:52:fc:
    6c:b2:95:47:60:c3:d2:0e:c2:4a:b0:8d:a6:2d:95:
    ba:e9:79:c6:cd:11:87:50:0f"""

In [13]:
def toInt(s):
    pieces = s.split(":")
    result = 0
    for p in pieces:
        assert(len(p)!=0)
        result *= 256
        result += int(p, base=16)
    return result

def toInt2(s):
    pieces = s.split(":")
    result = 0
    xx = 1
    for p in pieces:
        result += int(p, base=16)*xx
        xx *= 256
    return result

In [22]:
toInt(nnnn1)


Out[22]:
22372619959586467809053769802237882581889757027732230613227897011530894747842858329994040492955713812652880210316692276105745796102474026823431443637835477569820625810377604850561976805688874758480340509611039549618351710307607148236316902456036244332445469171187516730474414325624749009364540468215844150201715175116969584764047838883378221778667124769930558663215690234394466659983499287582590375304084076006630565952551582630555131604012723576961862172273313304550004488482503262713337752113748914744383454611253319544464446490060830564840412409920562387134666345154211491259741325073094718648719808043783683189701

In [24]:
toInt(prime1)


Out[24]:
165365953863350613045144760416078784491530172837607650081851239467597104613581918552784675052485741907750556552005247877207346048055338110005922218895057721963481234725012850536896536840110704560284977548027345682653828809054302101512301103705695351447389288662458108053747092124995562454758441145895232434923

In [26]:
toInt(prime2)


Out[26]:
135291572641814640217393269005910240360716152346607618986902875926435402573077067220684907409489029716620649892319338661021210561862706459565691936028549206203368578970467968005001225109331164529012369283895871775228554957440166117489971746756863385081485570603801343021625465595025978006340488856746999631887

In [27]:
toInt(prime2)*toInt(prime1) == toInt(nnnn1)


Out[27]:
True

In [28]:
e = 65537

In [29]:
totient = public_n - ( private_p + private_q - 1)

In [30]:
totient


Out[30]:
22372619959586467809053769802237882581889757027732230613227897011530894747842858329994040492955713812652880210316692276105745796102474026823431443637835477569820625810377604850561976805688874758480340509611039549618351710307607148236316902456036244332445469171187516730474414325624749009364540468215844150201414517590464419510785300853956232753814878444746343394146936119000434152796840301809120792842109304382259359508226996092326574994094679007390248017349706376383154674787022444171439990164307045655086107779330102086582062723566362345838139559458003650605791485887952040184368767353073178187620878041141451122892

In [31]:
( private_d * e ) % totient


Out[31]:
1

In [33]:
dmp1 = private_d % (private_p - 1)
dmp1


Out[33]:
114860667803127748545524431067951269494162762984890029134320311759837767964887964271195068328794474226508889402991148337860378098685125137030678629267771221775479946990513907705419339510485365248466247508487614672934143174343666722049246357657307446072243279509342135537400573426032973717183560422391883602699

In [35]:
dmp2 = private_d % (private_q - 1)
dmp2


Out[35]:
119864654681696221517352377612023318069252829239260643435853465794780737827534779301796671556900239886870949468966081450379717870271696718925528122641586906770105332397596046420226606874715118745328199491892059428366736577029858025938595289740002068928565210057511347501528312774609585226057862657402044442465

In [ ]:
iqmp =