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 .asymmetric import rsa , padding
13+ from cryptography .hazmat .primitives .hmac import HMAC
14+ from cryptography .hazmat .primitives .serialization import load_der_public_key
1315
1416
1517class UniverseKey (object ):
1618 """Public keys for Universes"""
1719
18- Public = rsa_import_key (b64decode ("""
20+ Public = load_der_public_key (b64decode ("""
1921MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDf7BrWLBBmLBc1OhSwfFkRf53T
20222Ct64+AVzRkeRuh7h3SiGEYxqQMUeYKO6UWiSRKpI2hzic9pobFhRr3Bvr/WARvY
2123gdTckPv+T1JzZsuVcNfFjrocejN1oWI0Rrtgt4Bo+hOneoo3S57G9F1fOpn5nsQ6
@@ -39,8 +41,14 @@ def generate_session_key(hmac_secret=b''):
3941 :rtype: :class:`tuple`
4042 """
4143 session_key = random_bytes (32 )
42- encrypted_session_key = PKCS1_OAEP .new (UniverseKey .Public , SHA1 )\
43- .encrypt (session_key + hmac_secret )
44+ encrypted_session_key = UniverseKey .Public .encrypt (
45+ session_key + hmac_secret ,
46+ padding .OAEP (
47+ mgf = padding .MGF1 (algorithm = hashes .SHA1 ()),
48+ algorithm = hashes .SHA256 (),
49+ label = None
50+ )
51+ )
4452
4553 return (session_key , encrypted_session_key )
4654
@@ -49,7 +57,13 @@ def symmetric_encrypt(message, key):
4957 return symmetric_encrypt_with_iv (message , key , iv )
5058
5159def symmetric_encrypt_ecb (message , key ):
52- return AES .new (key , AES .MODE_ECB ).encrypt (pad (message ))
60+ padder = padding .PKCS7 (algorithms .AES .block_size ).padder ()
61+ plaintext = padder .update (message )
62+ plaintext += padder .finalize ()
63+ encryptor = Cipher (algorithms .AES (key ), modes .ECB ()).encryptor ()
64+ cyphertext = encryptor .update (plaintext )
65+ cyphertext += encryptor .finalize ()
66+ return cyphertext
5367
5468def symmetric_encrypt_HMAC (message , key , hmac_secret ):
5569 prefix = random_bytes (3 )
@@ -58,19 +72,33 @@ def symmetric_encrypt_HMAC(message, key, hmac_secret):
5872 return symmetric_encrypt_with_iv (message , key , iv )
5973
6074def symmetric_encrypt_iv (iv , key ):
61- return AES .new (key , AES .MODE_ECB ).encrypt (iv )
75+ encryptor = Cipher (algorithms .AES (key ), modes .ECB ()).encryptor ()
76+ cyphertext = encryptor .update (iv )
77+ cyphertext += encryptor .finalize ()
78+ return cyphertext
6279
6380def symmetric_encrypt_with_iv (message , key , iv ):
6481 encrypted_iv = symmetric_encrypt_iv (iv , key )
65- cyphertext = AES .new (key , AES .MODE_CBC , iv ).encrypt (pad (message ))
82+ padder = padding .PKCS7 (algorithms .AES .block_size ).padder ()
83+ plaintext = padder .update (message )
84+ plaintext += padder .finalize ()
85+ encryptor = Cipher (algorithms .AES (key ), modes .CBC (iv )).encryptor ()
86+ cyphertext = encryptor .update (plaintext )
87+ cyphertext += encryptor .finalize ()
6688 return encrypted_iv + cyphertext
6789
6890def symmetric_decrypt (cyphertext , key ):
6991 iv = symmetric_decrypt_iv (cyphertext , key )
7092 return symmetric_decrypt_with_iv (cyphertext , key , iv )
7193
7294def symmetric_decrypt_ecb (cyphertext , key ):
73- return unpad (AES .new (key , AES .MODE_ECB ).decrypt (cyphertext ))
95+ decryptor = Cipher (algorithms .AES (key ), modes .ECB ()).decryptor ()
96+ plaintext = decryptor .update (cyphertext )
97+ plaintext += decryptor .finalize ()
98+ unpadder = padding .PKCS7 (algorithms .AES .block_size ).unpadder ()
99+ message = unpadder .update (plaintext )
100+ message += unpadder .finalize ()
101+ return message
74102
75103def symmetric_decrypt_HMAC (cyphertext , key , hmac_secret ):
76104 """:raises: :class:`RuntimeError` when HMAC verification fails"""
@@ -85,19 +113,33 @@ def symmetric_decrypt_HMAC(cyphertext, key, hmac_secret):
85113 return message
86114
87115def symmetric_decrypt_iv (cyphertext , key ):
88- return AES .new (key , AES .MODE_ECB ).decrypt (cyphertext [:BS ])
116+ decryptor = Cipher (algorithms .AES (key ), modes .ECB ()).decryptor ()
117+ iv = decryptor .update (cyphertext [:BS ])
118+ iv += decryptor .finalize ()
119+ return iv
89120
90121def symmetric_decrypt_with_iv (cyphertext , key , iv ):
91- return unpad (AES .new (key , AES .MODE_CBC , iv ).decrypt (cyphertext [BS :]))
122+ decryptor = Cipher (algorithms .AES (key ), modes .CBC (iv )).decryptor ()
123+ plaintext = decryptor .update (cyphertext [BS :])
124+ plaintext += decryptor .finalize ()
125+ unpadder = padding .PKCS7 (algorithms .AES .block_size ).unpadder ()
126+ message = unpadder .update (plaintext )
127+ message += unpadder .finalize ()
128+ return message
92129
93130def hmac_sha1 (secret , data ):
94- return HMAC .new (secret , data , SHA1 ).digest ()
131+ h = HMAC (secret , hashes .SHA1 ())
132+ h .update (data )
133+ return h .finalize ()
95134
96135def sha1_hash (data ):
97- return SHA1 . new (data ).digest ()
136+ return hashlib . sha1 (data ).digest ()
98137
99138def rsa_publickey (mod , exp ):
100- return rsa_construct (( mod , exp ) )
139+ return rsa . RSAPublicNumbers ( e = exp , n = mod ). public_key ( )
101140
102141def pkcs1v15_encrypt (key , message ):
103- return PKCS1_v1_5 .new (key ).encrypt (message )
142+ key .encrypt (
143+ message ,
144+ padding .PKCS1v15 ,
145+ )
0 commit comments