11"""
22All function in this module take and return :class:`bytes`
33"""
4+ import hashlib
45import sys
6+ from base64 import b64decode
57from os import urandom as random_bytes
68from struct import pack
7- from base64 import b64decode
89
9- from Cryptodome .Hash import SHA1 , HMAC
10- from Cryptodome .PublicKey .RSA import import_key as rsa_import_key , construct as rsa_construct
11- from Cryptodome .Cipher import PKCS1_OAEP , PKCS1_v1_5
12- from Cryptodome .Cipher import AES as AES
10+ from cryptography .hazmat .primitives .ciphers import Cipher , algorithms , modes
11+ from cryptography .hazmat .primitives import hashes
12+ from cryptography .hazmat .primitives .padding import PKCS7
13+ from cryptography .hazmat .primitives .asymmetric import rsa , padding
14+ from cryptography .hazmat .primitives .hmac import HMAC
15+ from cryptography .hazmat .primitives .serialization import load_der_public_key
1316
1417
1518class UniverseKey (object ):
1619 """Public keys for Universes"""
1720
18- Public = rsa_import_key (b64decode ("""
21+ Public = load_der_public_key (b64decode ("""
1922MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDf7BrWLBBmLBc1OhSwfFkRf53T
20232Ct64+AVzRkeRuh7h3SiGEYxqQMUeYKO6UWiSRKpI2hzic9pobFhRr3Bvr/WARvY
2124gdTckPv+T1JzZsuVcNfFjrocejN1oWI0Rrtgt4Bo+hOneoo3S57G9F1fOpn5nsQ6
@@ -39,8 +42,14 @@ def generate_session_key(hmac_secret=b''):
3942 :rtype: :class:`tuple`
4043 """
4144 session_key = random_bytes (32 )
42- encrypted_session_key = PKCS1_OAEP .new (UniverseKey .Public , SHA1 )\
43- .encrypt (session_key + hmac_secret )
45+ encrypted_session_key = UniverseKey .Public .encrypt (
46+ session_key + hmac_secret ,
47+ padding .OAEP (
48+ mgf = padding .MGF1 (algorithm = hashes .SHA1 ()),
49+ algorithm = hashes .SHA256 (),
50+ label = None
51+ )
52+ )
4453
4554 return (session_key , encrypted_session_key )
4655
@@ -49,7 +58,13 @@ def symmetric_encrypt(message, key):
4958 return symmetric_encrypt_with_iv (message , key , iv )
5059
5160def symmetric_encrypt_ecb (message , key ):
52- return AES .new (key , AES .MODE_ECB ).encrypt (pad (message ))
61+ padder = PKCS7 (algorithms .AES .block_size ).padder ()
62+ plaintext = padder .update (message )
63+ plaintext += padder .finalize ()
64+ encryptor = Cipher (algorithms .AES (key ), modes .ECB ()).encryptor ()
65+ cyphertext = encryptor .update (plaintext )
66+ cyphertext += encryptor .finalize ()
67+ return cyphertext
5368
5469def symmetric_encrypt_HMAC (message , key , hmac_secret ):
5570 prefix = random_bytes (3 )
@@ -58,19 +73,33 @@ def symmetric_encrypt_HMAC(message, key, hmac_secret):
5873 return symmetric_encrypt_with_iv (message , key , iv )
5974
6075def symmetric_encrypt_iv (iv , key ):
61- return AES .new (key , AES .MODE_ECB ).encrypt (iv )
76+ encryptor = Cipher (algorithms .AES (key ), modes .ECB ()).encryptor ()
77+ cyphertext = encryptor .update (iv )
78+ cyphertext += encryptor .finalize ()
79+ return cyphertext
6280
6381def symmetric_encrypt_with_iv (message , key , iv ):
6482 encrypted_iv = symmetric_encrypt_iv (iv , key )
65- cyphertext = AES .new (key , AES .MODE_CBC , iv ).encrypt (pad (message ))
83+ padder = PKCS7 (algorithms .AES .block_size ).padder ()
84+ plaintext = padder .update (message )
85+ plaintext += padder .finalize ()
86+ encryptor = Cipher (algorithms .AES (key ), modes .CBC (iv )).encryptor ()
87+ cyphertext = encryptor .update (plaintext )
88+ cyphertext += encryptor .finalize ()
6689 return encrypted_iv + cyphertext
6790
6891def symmetric_decrypt (cyphertext , key ):
6992 iv = symmetric_decrypt_iv (cyphertext , key )
7093 return symmetric_decrypt_with_iv (cyphertext , key , iv )
7194
7295def symmetric_decrypt_ecb (cyphertext , key ):
73- return unpad (AES .new (key , AES .MODE_ECB ).decrypt (cyphertext ))
96+ decryptor = Cipher (algorithms .AES (key ), modes .ECB ()).decryptor ()
97+ plaintext = decryptor .update (cyphertext )
98+ plaintext += decryptor .finalize ()
99+ unpadder = PKCS7 (algorithms .AES .block_size ).unpadder ()
100+ message = unpadder .update (plaintext )
101+ message += unpadder .finalize ()
102+ return message
74103
75104def symmetric_decrypt_HMAC (cyphertext , key , hmac_secret ):
76105 """:raises: :class:`RuntimeError` when HMAC verification fails"""
@@ -85,19 +114,33 @@ def symmetric_decrypt_HMAC(cyphertext, key, hmac_secret):
85114 return message
86115
87116def symmetric_decrypt_iv (cyphertext , key ):
88- return AES .new (key , AES .MODE_ECB ).decrypt (cyphertext [:BS ])
117+ decryptor = Cipher (algorithms .AES (key ), modes .ECB ()).decryptor ()
118+ iv = decryptor .update (cyphertext [:BS ])
119+ iv += decryptor .finalize ()
120+ return iv
89121
90122def symmetric_decrypt_with_iv (cyphertext , key , iv ):
91- return unpad (AES .new (key , AES .MODE_CBC , iv ).decrypt (cyphertext [BS :]))
123+ decryptor = Cipher (algorithms .AES (key ), modes .CBC (iv )).decryptor ()
124+ plaintext = decryptor .update (cyphertext [BS :])
125+ plaintext += decryptor .finalize ()
126+ unpadder = PKCS7 (algorithms .AES .block_size ).unpadder ()
127+ message = unpadder .update (plaintext )
128+ message += unpadder .finalize ()
129+ return message
92130
93131def hmac_sha1 (secret , data ):
94- return HMAC .new (secret , data , SHA1 ).digest ()
132+ h = HMAC (secret , hashes .SHA1 ())
133+ h .update (data )
134+ return h .finalize ()
95135
96136def sha1_hash (data ):
97- return SHA1 . new (data ).digest ()
137+ return hashlib . sha1 (data ).digest ()
98138
99139def rsa_publickey (mod , exp ):
100- return rsa_construct (( mod , exp ) )
140+ return rsa . RSAPublicNumbers ( e = exp , n = mod ). public_key ( )
101141
102142def pkcs1v15_encrypt (key , message ):
103- return PKCS1_v1_5 .new (key ).encrypt (message )
143+ key .encrypt (
144+ message ,
145+ padding .PKCS1v15 ,
146+ )
0 commit comments