mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-28 07:51:27 +00:00
AES: use PyCrypto if available
This commit is contained in:
parent
5513a64549
commit
7e76e4ac55
1 changed files with 32 additions and 9 deletions
|
@ -74,19 +74,42 @@ TYPE_ADDRESS = 0
|
||||||
TYPE_PUBKEY = 1
|
TYPE_PUBKEY = 1
|
||||||
TYPE_SCRIPT = 2
|
TYPE_SCRIPT = 2
|
||||||
|
|
||||||
|
|
||||||
# AES encryption
|
# AES encryption
|
||||||
|
try:
|
||||||
|
from Crypto.Cipher import AES
|
||||||
|
except:
|
||||||
|
AES = None
|
||||||
|
|
||||||
def aes_encrypt_with_iv(key, iv, data):
|
def aes_encrypt_with_iv(key, iv, data):
|
||||||
aes_cbc = pyaes.AESModeOfOperationCBC(key, iv=iv)
|
if AES:
|
||||||
aes = pyaes.Encrypter(aes_cbc)
|
AES.block_size = 16
|
||||||
e = aes.feed(data) + aes.feed() # empty aes.feed() appends pkcs padding
|
AES.key_size = 32
|
||||||
return e
|
padlen = 16 - (len(data) % 16)
|
||||||
|
if padlen == 0:
|
||||||
|
padlen = 16
|
||||||
|
data += chr(padlen) * padlen
|
||||||
|
e = AES.new(key, AES.MODE_CBC, iv).encrypt(data)
|
||||||
|
return e
|
||||||
|
else:
|
||||||
|
aes_cbc = pyaes.AESModeOfOperationCBC(key, iv=iv)
|
||||||
|
aes = pyaes.Encrypter(aes_cbc)
|
||||||
|
e = aes.feed(data) + aes.feed() # empty aes.feed() appends pkcs padding
|
||||||
|
return e
|
||||||
|
|
||||||
def aes_decrypt_with_iv(key, iv, data):
|
def aes_decrypt_with_iv(key, iv, data):
|
||||||
aes_cbc = pyaes.AESModeOfOperationCBC(key, iv=iv)
|
if AES:
|
||||||
aes = pyaes.Decrypter(aes_cbc)
|
cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||||
s = aes.feed(data) + aes.feed() # empty aes.feed() strips pkcs padding
|
data = cipher.decrypt(data)
|
||||||
return s
|
padlen = ord(data[-1])
|
||||||
|
for i in data[-padlen:]:
|
||||||
|
if ord(i) != padlen:
|
||||||
|
raise InvalidPassword()
|
||||||
|
return data[0:-padlen]
|
||||||
|
else:
|
||||||
|
aes_cbc = pyaes.AESModeOfOperationCBC(key, iv=iv)
|
||||||
|
aes = pyaes.Decrypter(aes_cbc)
|
||||||
|
s = aes.feed(data) + aes.feed() # empty aes.feed() strips pkcs padding
|
||||||
|
return s
|
||||||
|
|
||||||
def EncodeAES(secret, s):
|
def EncodeAES(secret, s):
|
||||||
iv = bytes(os.urandom(16))
|
iv = bytes(os.urandom(16))
|
||||||
|
|
Loading…
Add table
Reference in a new issue