#!/usr/bin/python

# RSA tool from https://bitbucket.org/nmichaels/rsatool/src
import rsa

# From openssl rsa -in comp1.key

string_modulus = "37:c0:04:af:3e:8e:80:cb:75:b1:53:0c:9f:b2:dc:f4:d3:ce:4a:82:8b:52:f6:a8:48:e0:c5:d8:35:8b:26:6c:84:94:de:29:47:24:49:85:72:28:17:8e:06:d0:77:17:0c:2a:5d:56:ba:88:d1:07:25:e2:c5:7b:01:44:ea:e9:44:38:87:1a:b5:5a:75:d5:98:34:89:b3:1f:9e:a4:e2:bd:b7:7a:b7:cf:f3:dc:ac:ea:ac:59:2c:83:dc:50:8a:27:0c:69:cb:66:4e:a1:64:9b:ca:e8:e4:e0:dc:d8:d4:d0:cc:c8:c4:c0:bc:b8:b4:b0:ac:94:13:82:39:51:f1"
string_private = "13:5b:5d:85:07:60:6d:41:b7:9c:99:2c:61:ea:b5:a3:60:43:59:45:98:60:76:fa:19:4b:ca:05:f7:19:58:7f:07:4d:b5:11:79:fd:14:75:fc:1c:05:89:af:be:04:0b:81:92:d8:13:bb:f2:b3:39:1b:23:70:d3:f3:ad:dd:2e:4c:26:d3:1b:a8:56:f1:83:ca:d9:13:95:38:e7:80:30:77:a4:f0:d9:77:f9:25:b9:c1:d7:8f:2a:e5:b0:31:d8:c3:0e:3a:b1:5c:39:ec:f9:90:b5:77:60:a9:cf:95:7e:c7:ed:b3:9c:e6:0b:d1:bb:04:29:e8:b4:b1:69:7b:2d"

# Turn our :-separated hex strings into big big numbers
modulus = long(''.join(string_modulus.split(':')), 16);
private = long(''.join(string_private.split(':')), 16);
public = 0x10001L

# From Challenge 3 page
ciphertext = "2910404C21CF8BF4CC93B7D4A518BABF34B42A8AB0047627998D633E653AF63A873C8FABBE8D095ED125D4539706932425E78C261E2AB9273D177578F20E38AFEF124E068D230BA64AEB8FF80256EA015AA3BFF102FE652A4CBD33B4036F519E5899316A6250840D141B8535AB560BDCBDE8A67A09B7C97CB2FA308DFFBAD9F9"

a, b, c, plain_list = rsa.decrypt(modulus, public, private, rsa.unhexify(ciphertext), True)

plain = ''
for c in plain_list.split():
   plain = plain + chr(int(c, 16))

print plain

# Looks familiar...
