NimaBoscarino commited on
Commit
839d8d8
1 Parent(s): 2fad31c

wrapping up for Ola

Browse files
.idea/.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
6
+ # Datasource local storage ignored files
7
+ /dataSources/
8
+ /dataSources.local.xml
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
5
+ <option name="ignoredPackages">
6
+ <value>
7
+ <list size="1">
8
+ <item index="0" class="java.lang.String" itemvalue="pytest-runner" />
9
+ </list>
10
+ </value>
11
+ </option>
12
+ </inspection_tool>
13
+ <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
14
+ <option name="ignoredErrors">
15
+ <list>
16
+ <option value="N801" />
17
+ <option value="N806" />
18
+ </list>
19
+ </option>
20
+ </inspection_tool>
21
+ <inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
22
+ <option name="ignoredIdentifiers">
23
+ <list>
24
+ <option value="dict.labels" />
25
+ <option value="geograpy.places.countries" />
26
+ </list>
27
+ </option>
28
+ </inspection_tool>
29
+ </profile>
30
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/misc.xml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (hackathon)" project-jdk-type="Python SDK" />
4
+ </project>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/review-claim.iml" filepath="$PROJECT_DIR$/.idea/review-claim.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/review-claim.iml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="jdk" jdkName="Python 3.10 (hackathon)" jdkType="Python SDK" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ </component>
8
+ </module>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="Git" />
5
+ </component>
6
+ </project>
.python-version ADDED
@@ -0,0 +1 @@
 
1
+ hackathon
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from huggingface_hub import get_repo_discussions, get_discussion_details
3
+ from Crypto.PublicKey import RSA
4
+ from Crypto.Cipher import AES, PKCS1_OAEP
5
+ import base64
6
+
7
+
8
+ def decrypt_claim(encrypted_claim_encoded, private_key_file):
9
+ base64_encoded = encrypted_claim_encoded.split("\n")[1]
10
+ encrypted_claim_encoded = encrypted_claim_encoded.split('\n')[1]
11
+ b64_fixed = bytes(base64_encoded[2:-1], 'utf-8')
12
+ encrypted_claim = base64.b64decode(b64_fixed)
13
+
14
+ private_key = RSA.import_key(open(private_key_file.name).read())
15
+
16
+ enc_session_key, nonce, tag, ciphertext = \
17
+ [encrypted_claim for x in (private_key.size_in_bytes(), 16, 16, -1)]
18
+
19
+ # Decrypt the session key with the private RSA key
20
+ cipher_rsa = PKCS1_OAEP.new(private_key)
21
+ session_key = cipher_rsa.decrypt(enc_session_key)
22
+
23
+ # Decrypt the data with the AES session key
24
+ cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce)
25
+ data = cipher_aes.decrypt_and_verify(ciphertext, tag)
26
+ decrypted_claim = data.decode("utf-8")
27
+
28
+ return decrypted_claim
29
+
30
+
31
+ def get_claim(claim_id, private_key):
32
+ claims = []
33
+
34
+ # TODO: Currently fetching ALL discussions, in case we want to build a view to see list of discussions in the claim-review space
35
+ # for discussion in get_repo_discussions(repo_id="Team8/dataset", repo_type="dataset"):
36
+ # claims = claims + [discussion]
37
+ # # print(f"{discussion.num} - {discussion.title}, pr: {discussion.is_pull_request}")
38
+ #
39
+ # claim = [c for c in claims if c.num == claim_id][0]
40
+
41
+ claim = get_discussion_details(
42
+ repo_id="Team8/dataset",
43
+ repo_type="dataset",
44
+ discussion_num=int(claim_id)
45
+ )
46
+
47
+ return gr.Textbox.update(value=claim.title), gr.Textbox.update(value=decrypt_claim(claim.events[0].content, private_key))
48
+
49
+
50
+ demo = gr.Blocks()
51
+
52
+ with demo:
53
+ gr.Markdown(
54
+ """
55
+ # Flip Text!
56
+ Start typing below to see the output.
57
+ """
58
+ )
59
+ button = gr.Button(value="Fetch Claim")
60
+ private_key = gr.File(label="Private Key")
61
+
62
+ claim_id = gr.Number()
63
+ claim_title = gr.Textbox(label="Claim Title", value="")
64
+ claim_text = gr.Textbox(label="Claim Text", value="")
65
+
66
+ button.click(
67
+ fn=get_claim,
68
+ inputs=[claim_id, private_key],
69
+ outputs=[claim_title, claim_text]
70
+ )
71
+
72
+ demo.launch()
decrypt.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from Crypto.PublicKey import RSA
2
+ from Crypto.Cipher import AES, PKCS1_OAEP
3
+
4
+ file_in = open("encrypted_data.bin", "rb")
5
+
6
+ private_key = RSA.import_key(open("private.pem").read())
7
+
8
+ enc_session_key, nonce, tag, ciphertext = \
9
+ [ file_in.read(x) for x in (private_key.size_in_bytes(), 16, 16, -1) ]
10
+
11
+ # Decrypt the session key with the private RSA key
12
+ cipher_rsa = PKCS1_OAEP.new(private_key)
13
+ session_key = cipher_rsa.decrypt(enc_session_key)
14
+
15
+ # Decrypt the data with the AES session key
16
+ cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce)
17
+ data = cipher_aes.decrypt_and_verify(ciphertext, tag)
18
+ print(data.decode("utf-8"))
encrypt.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from Crypto.PublicKey import RSA
2
+ from Crypto.Random import get_random_bytes
3
+ from Crypto.Cipher import AES, PKCS1_OAEP
4
+
5
+ from huggingface_hub import hf_hub_download
6
+
7
+ import yaml
8
+ import io
9
+
10
+ loc = hf_hub_download(repo_id="Team8/dataset", repo_type="dataset", filename="receiver.pem")
11
+ data = "I met aliens in UFO. Here is the map.".encode("utf-8")
12
+ file_out = open("encrypted_data.bin", "wb")
13
+
14
+ recipient_key = RSA.import_key(open(loc).read())
15
+ session_key = get_random_bytes(16)
16
+
17
+ # Encrypt the session key with the public RSA key
18
+ cipher_rsa = PKCS1_OAEP.new(recipient_key)
19
+ enc_session_key = cipher_rsa.encrypt(session_key)
20
+
21
+ # Encrypt the data with the AES session key
22
+ cipher_aes = AES.new(session_key, AES.MODE_EAX)
23
+ ciphertext, tag = cipher_aes.encrypt_and_digest(data)
24
+ [ file_out.write(x) for x in (enc_session_key, cipher_aes.nonce, tag, ciphertext) ]
25
+ file_out.close()
encrypted_data.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3982bcc86b1f5ffdfc8ed12d9cef4fce794d92aad44e661a5dad9f474f0e4ddd
3
+ size 325
gen_keys.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from Crypto.PublicKey import RSA
2
+
3
+ key = RSA.generate(2048)
4
+ private_key = key.export_key()
5
+ file_out = open("private.pem", "wb")
6
+ file_out.write(private_key)
7
+ file_out.close()
8
+
9
+ public_key = key.publickey().export_key()
10
+ file_out = open("receiver.pem", "wb")
11
+ file_out.write(public_key)
12
+ file_out.close()
mykey.pem ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEA2nXsl3K5c2IhY23sSOdvfxSxjG/CqiWBqpljyk9pv/eRGgJr
3
+ FGQMRiG/09Rkf4185PbUC66/nOeOHPgaSzrkReOpFpfm7Gp0t4PeM5CZKx9V5TUw
4
+ x0w3usZUgytU1ikKj6kVlJ+ZiBEUM3lrL7Mg0uzobXwZ/psoOFhqDbeCCEjHI1HX
5
+ z4DwGhXKV5DE2fFAYFRdkdwlGDuhd3Q45ZHzG96awBkpgGTiFNwJN2dp2mV7T6cS
6
+ L8fApSIqWDUZVSm7JYfYVBQcCbyRtwROfF5/dwlh95W6jQ7BHgytHDBvet5H/CaM
7
+ Asm4ANbvjjbryMSdHSk2M2BbJdaUBqCo4AymIwIDAQABAoIBAA8MBEnCKyfZYHda
8
+ wOWcmz9ji38iy4Owpae8fPUYVy5TvPjPpdR3t6i09mN+w5VNh4a1wZE0bho+kLlK
9
+ FXWNDuAJeEIIIG20P2nMeWeP1Bz2QZJSAZQYmdYRhwyp1WQS25ldihD8lTScCIor
10
+ GMjmS6J7kt7Hp3qz8SdAX72mIBy11fyIre2Bz/uW8tQco34rIFMzHnzKxIC5M0rL
11
+ YBg+eik6E5QlfJzISFV1kDsgKCYMZVtIs08j0wLQcUEKPFo+RmVC+2iTffmZuOmb
12
+ 5YRo7WvBBHUl/b4L+IPd4zbBhxphG4HVXlcVbtkKtrFvaCfQeNPaMgIZLCa3ms+0
13
+ NEMfm5ECgYEA6JoX4HDjTKP8SxygJIaYmupKcBl79fN5e/fUM5ZN698vVzTOZ00o
14
+ F6HKN2IiDWQNaBkJEkhcSvHhy98/PsiR3SUGI5hJr8pD4MrGaDAThzPKvkwfhpAR
15
+ GsfwUhOVe6ZUJcmAX0vDje/y9WtkH5pLTz5D72Lkh7YHpOYDZbtR838CgYEA8G+r
16
+ BlTDNgpLCjqhQFKEZn3liTUoMTbPTYmumiUKC5Bg9HlshCQ28V5unmmb1QV0lBUK
17
+ SWmROME71AKS3kPaLz2QhtJPqnTMXp1AjtR9rihWj1t4wubGm1fnGRjlewm5UyTg
18
+ AvLs39vyK5SyRJHMaIHURVK98EDANzEA2exdT10CgYEAv1xOunKFPb9HyA/D3Gjz
19
+ UbfhB7qflif50TiB1vMYJi6WhvtFuAztKAwODmRouXWP5g16vhTUAUBgUFbZdHCU
20
+ OEjGdTBLpxkToPOSKZMr7bZ5XPfJk+4gdFT7bLr55yFe5zuQplXxi2tWCfyRAcLx
21
+ pD8IqwBEHTZvsYUeVGq4sEcCgYBuCg1x5lU5ZFiXo+Gs+JcT+UaWFzf/3h/eUscQ
22
+ USdZx4g4G2Joz9I9gYSLB7aENez24PJGSwRlvzpMe6kQBGnU+Q4uRg6j6rSmEL49
23
+ IE8s59VF4w1P1iLLcd2YhOZx+y9QOC4160wx4A3jmDhGXZv5sIGgAJBhZqESIWFM
24
+ W3sRGQKBgBb0zFMTQn3RNj1JOLujfrOv1sGhnTh7ikLNADYhYM17kJ1enjZnVkxS
25
+ i0SO0vXmaNcH5n6nT+qfCOvrLmSEQcqTnBI8IyNf3UBbnwt+X7AhJ4kflvojuF8h
26
+ l92MZZTrPuZx6hAnQcMqYzUCDuFm1aeGLhkiVZGuWxTQXZ5N4O9g
27
+ -----END RSA PRIVATE KEY-----
private.pem ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEAnOjzZicSMFoD8sVcHq5Fk9HeryaMdlC8ZivIpo0NCd+85rtl
3
+ WN/LA0h7AQoQJbN/Ri8l2ZfqXmfGKINgpjUsFIgVvMOOIT1fiXXANQvNsTaWbJY0
4
+ uDO4Z1WbWXjIZ6SbZ7FuID4hsHPpG0+uwUcx/L3rPya2JRYbOKag5UED5sRHKAdN
5
+ c9aInzZzOmomyaaA6Btnj9lSX+w65ps/Gi5oa18j9aBda/On8WxTNcfBPjxqkyCv
6
+ qW82te2+XGB8xUllllw2luqERLro9PrkLXV8ZhXWqiF909HCw+U6z9MhIoFAmuRO
7
+ Ey/pS7Pl9T2h/UUac9SoeNA3EN1qxXpmg/b8PwIDAQABAoIBAAOKwQ8Gq/Y9dSaP
8
+ Myom77+LfRLITi/P8lpk4jp1Ddzk/3c+tn+QGOp+qCnFpJTe49Odj6XFNFXKbLW2
9
+ nLSDyymKsBSHxMPJUxVf4n8QDVk5WaHv4Un7MoF0QQ9Lyhi7Px4GULpKzMKv8YyO
10
+ 4VIDNzfbJ0SD4JhSH6EvjPHZfhFA4F5nlwj6xeO+y2pYYKsKoas5Ay7CxZMPZZS7
11
+ h5gPqxBdHqbbaLUWNyb8Hn8gf5CfXUSsrDgh+8CxH1jMXhsQhoA/ebVopfhRvRpr
12
+ GHQKPtFeFy5B+GIsj0vJnZpePkwLQ9pl7Uj1XP4Twv5Jh8/j1bQw9CxuNdj1LDKJ
13
+ q9HDnJECgYEAxUxsxjD7VkKj7PWu6ncIrwA83M5D4Bdv/PFivHNc2m4Z7GYTyCi1
14
+ NtaLtVT0vWkGICH7jo3+sI+J/W8+p8PEzDE+u9CbJk3yP9i0H4KnbeEeRARVs8mi
15
+ 0N2Jg2JpP44fZWTQ8ufMsY89Gls/Omk0AGrePvW8fNbRDm9jIEnmFdcCgYEAy5hD
16
+ K1iN8DQ9HgDLvdwHtAdz8k9QYPkq1d4MZaa0ODBj4KmZUz9Ys/gDoGWMmunIJoLx
17
+ r0dJyD1Jng30uBFLSxSM5GuS24eaJIhBbRV8eWN7VjrdJ9a67Le4m5H8pSNJrsNI
18
+ QiH3NnLcA2qya+aihziBO8MbFekYYK2I+Jf0L9kCgYBhxY695HYY+Cs9+T42KMjf
19
+ 2FFQ5tKSEWtIwOI6Gz0vbZJhKPCypyGuTEGtma0y1AHaGJ0NtuY43tj2A5PcFVLI
20
+ EbtR3X2VTNk4tI4Gc3u/IukZscA6uTh7It3LgxA/E5IRcBVv2lkAwMf58K/zpUDE
21
+ 2DDMqIBAqT+uVJqd3KEtvwKBgQCzuVTKJeEegy7UloVEs8CFFvMumv9sq2g55Uty
22
+ TIfY9jak83JrP4dRT4X8CMjnU6qg/ITXYwnp3thm0xENkA60V47McX3xlzHmP/Xp
23
+ kscP7VbKVyo1aeQW5VPs2SF6sbzwrmjSIGO3yAsaZQzeHXmp/qJunBwD6oHfjjFU
24
+ qecgeQKBgBvL7lsigmdnsfdbW5+pK9oQ2csGFV3Qf7BOV1I+zLn9lcJJbeGbgHH7
25
+ /TzOyxINzjvUE65WZNMSHucPq24Oy+OQsM/xZOBs0/Mp2DtHHeNHhayhSSqmRjxo
26
+ +dMnEjm/8SyARDxddlrw7jSio3rlxX/Ue1LDHC+DIewzLAIOICI2
27
+ -----END RSA PRIVATE KEY-----
public_key.pem ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2nXsl3K5c2IhY23sSOdv
3
+ fxSxjG/CqiWBqpljyk9pv/eRGgJrFGQMRiG/09Rkf4185PbUC66/nOeOHPgaSzrk
4
+ ReOpFpfm7Gp0t4PeM5CZKx9V5TUwx0w3usZUgytU1ikKj6kVlJ+ZiBEUM3lrL7Mg
5
+ 0uzobXwZ/psoOFhqDbeCCEjHI1HXz4DwGhXKV5DE2fFAYFRdkdwlGDuhd3Q45ZHz
6
+ G96awBkpgGTiFNwJN2dp2mV7T6cSL8fApSIqWDUZVSm7JYfYVBQcCbyRtwROfF5/
7
+ dwlh95W6jQ7BHgytHDBvet5H/CaMAsm4ANbvjjbryMSdHSk2M2BbJdaUBqCo4Aym
8
+ IwIDAQAB
9
+ -----END PUBLIC KEY-----
receiver.pem ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnOjzZicSMFoD8sVcHq5F
3
+ k9HeryaMdlC8ZivIpo0NCd+85rtlWN/LA0h7AQoQJbN/Ri8l2ZfqXmfGKINgpjUs
4
+ FIgVvMOOIT1fiXXANQvNsTaWbJY0uDO4Z1WbWXjIZ6SbZ7FuID4hsHPpG0+uwUcx
5
+ /L3rPya2JRYbOKag5UED5sRHKAdNc9aInzZzOmomyaaA6Btnj9lSX+w65ps/Gi5o
6
+ a18j9aBda/On8WxTNcfBPjxqkyCvqW82te2+XGB8xUllllw2luqERLro9PrkLXV8
7
+ ZhXWqiF909HCw+U6z9MhIoFAmuROEy/pS7Pl9T2h/UUac9SoeNA3EN1qxXpmg/b8
8
+ PwIDAQAB
9
+ -----END PUBLIC KEY-----
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ gradio
2
+ huggingface_hub
3
+ pycryptodome
4
+ datasets
5
+ pyyaml
scratch.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from huggingface_hub import get_repo_discussions, get_discussion_details
2
+
3
+ # from huggingface_hub import DatasetFilter, HfApi
4
+ from huggingface_hub import hf_hub_download
5
+ #
6
+ # claim = get_discussion_details(
7
+ # repo_id="Team8/dataset",
8
+ # repo_type="dataset",
9
+ # discussion_num=int(1)
10
+ # )
11
+ #
12
+ # print(claim.events[0].content)
13
+
14
+ from Crypto.PublicKey import RSA
15
+ key = RSA.generate(2048)
16
+ pub = key.public_key()
17
+
18
+ f = open('mykey.pem','wb')
19
+ f.write(key.export_key('PEM'))
20
+ f.close()
21
+
22
+ f = open('public_key.pem','wb')
23
+ f.write(pub.export_key('PEM'))
24
+ f.close()
25
+
26
+
27
+ # api = HfApi()
28
+ # filt = DatasetFilter(
29
+ # author="Team8",
30
+ # dataset_name="dataset"
31
+ # )
32
+ #
33
+ # dsets = api.list_datasets(filter=filt)[0]
34
+
35
+ # print(dsets)
36
+
37
+ from huggingface_hub import hf_hub_download
38
+
39
+ loc = hf_hub_download(repo_id="Team8/dataset", repo_type="dataset", filename="README.md")
40
+
41
+ import yaml
42
+
43
+ with open(loc) as f:
44
+ front_matter = next(yaml.load_all(f, Loader=yaml.FullLoader))
45
+ print(front_matter["public_key"])
46
+
47
+
48
+ RSA
test.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from Crypto.PublicKey import RSA
2
+ from Crypto.Cipher import AES, PKCS1_OAEP
3
+ from huggingface_hub import get_repo_discussions, get_discussion_details
4
+ import base64
5
+
6
+ claim = get_discussion_details(
7
+ repo_id="Team8/dataset",
8
+ repo_type="dataset",
9
+ discussion_num=int(5)
10
+ )
11
+
12
+ encryptedtext_encoded = claim.events[0].content
13
+ encrypted_text = base64.b64decode(encryptedtext_encoded)
14
+
15
+ file_in = open("encrypted_data.bin", "rb")
16
+
17
+ private_key = RSA.import_key(open("private.pem").read())
18
+
19
+ enc_session_key, nonce, tag, ciphertext = \
20
+ [ file_in.read(x) for x in (private_key.size_in_bytes(), 16, 16, -1) ]
21
+
22
+ # Decrypt the session key with the private RSA key
23
+ cipher_rsa = PKCS1_OAEP.new(private_key)
24
+ session_key = cipher_rsa.decrypt(enc_session_key)
25
+
26
+ # Decrypt the data with the AES session key
27
+ cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce)
28
+ data = cipher_aes.decrypt_and_verify(ciphertext, tag)
29
+ print(data.decode("utf-8"))