mirror of
https://github.com/morpheus65535/bazarr
synced 2024-12-28 10:38:26 +00:00
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
"""
|
|
Encryption module that uses the Java Cryptography Extensions (JCE).
|
|
|
|
Note that in default installations of the Java Runtime Environment, the
|
|
maximum key length is limited to 128 bits due to US export
|
|
restrictions. This makes the generated keys incompatible with the ones
|
|
generated by pycryptopp, which has no such restrictions. To fix this,
|
|
download the "Unlimited Strength Jurisdiction Policy Files" from Sun,
|
|
which will allow encryption using 256 bit AES keys.
|
|
"""
|
|
from warnings import warn
|
|
|
|
from javax.crypto import Cipher
|
|
from javax.crypto.spec import SecretKeySpec, IvParameterSpec
|
|
|
|
import jarray
|
|
|
|
# Initialization vector filled with zeros
|
|
_iv = IvParameterSpec(jarray.zeros(16, 'b'))
|
|
|
|
|
|
def aesEncrypt(data, key):
|
|
cipher = Cipher.getInstance('AES/CTR/NoPadding')
|
|
skeySpec = SecretKeySpec(key, 'AES')
|
|
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, _iv)
|
|
return cipher.doFinal(data).tostring()
|
|
|
|
# magic.
|
|
aesDecrypt = aesEncrypt
|
|
|
|
has_aes = True
|
|
|
|
def getKeyLength():
|
|
maxlen = Cipher.getMaxAllowedKeyLength('AES/CTR/NoPadding')
|
|
return min(maxlen, 256) / 8
|
|
|
|
|
|
if getKeyLength() < 32:
|
|
warn('Crypto implementation only supports key lengths up to %d bits. '
|
|
'Generated session cookies may be incompatible with other '
|
|
'environments' % (getKeyLength() * 8))
|