111 lines
3.1 KiB
Python
111 lines
3.1 KiB
Python
"""Factory functions for symmetric cryptography."""
|
|
|
|
import os
|
|
|
|
import Python_AES
|
|
import Python_RC4
|
|
|
|
import cryptomath
|
|
|
|
tripleDESPresent = False
|
|
|
|
if cryptomath.m2cryptoLoaded:
|
|
import OpenSSL_AES
|
|
import OpenSSL_RC4
|
|
import OpenSSL_TripleDES
|
|
tripleDESPresent = True
|
|
|
|
if cryptomath.cryptlibpyLoaded:
|
|
import Cryptlib_AES
|
|
import Cryptlib_RC4
|
|
import Cryptlib_TripleDES
|
|
tripleDESPresent = True
|
|
|
|
if cryptomath.pycryptoLoaded:
|
|
import PyCrypto_AES
|
|
import PyCrypto_RC4
|
|
import PyCrypto_TripleDES
|
|
tripleDESPresent = True
|
|
|
|
# **************************************************************************
|
|
# Factory Functions for AES
|
|
# **************************************************************************
|
|
|
|
def createAES(key, IV, implList=None):
|
|
"""Create a new AES object.
|
|
|
|
@type key: str
|
|
@param key: A 16, 24, or 32 byte string.
|
|
|
|
@type IV: str
|
|
@param IV: A 16 byte string
|
|
|
|
@rtype: L{tlslite.utils.AES}
|
|
@return: An AES object.
|
|
"""
|
|
if implList == None:
|
|
implList = ["cryptlib", "openssl", "pycrypto", "python"]
|
|
|
|
for impl in implList:
|
|
if impl == "cryptlib" and cryptomath.cryptlibpyLoaded:
|
|
return Cryptlib_AES.new(key, 2, IV)
|
|
elif impl == "openssl" and cryptomath.m2cryptoLoaded:
|
|
return OpenSSL_AES.new(key, 2, IV)
|
|
elif impl == "pycrypto" and cryptomath.pycryptoLoaded:
|
|
return PyCrypto_AES.new(key, 2, IV)
|
|
elif impl == "python":
|
|
return Python_AES.new(key, 2, IV)
|
|
raise NotImplementedError()
|
|
|
|
def createRC4(key, IV, implList=None):
|
|
"""Create a new RC4 object.
|
|
|
|
@type key: str
|
|
@param key: A 16 to 32 byte string.
|
|
|
|
@type IV: object
|
|
@param IV: Ignored, whatever it is.
|
|
|
|
@rtype: L{tlslite.utils.RC4}
|
|
@return: An RC4 object.
|
|
"""
|
|
if implList == None:
|
|
implList = ["cryptlib", "openssl", "pycrypto", "python"]
|
|
|
|
if len(IV) != 0:
|
|
raise AssertionError()
|
|
for impl in implList:
|
|
if impl == "cryptlib" and cryptomath.cryptlibpyLoaded:
|
|
return Cryptlib_RC4.new(key)
|
|
elif impl == "openssl" and cryptomath.m2cryptoLoaded:
|
|
return OpenSSL_RC4.new(key)
|
|
elif impl == "pycrypto" and cryptomath.pycryptoLoaded:
|
|
return PyCrypto_RC4.new(key)
|
|
elif impl == "python":
|
|
return Python_RC4.new(key)
|
|
raise NotImplementedError()
|
|
|
|
#Create a new TripleDES instance
|
|
def createTripleDES(key, IV, implList=None):
|
|
"""Create a new 3DES object.
|
|
|
|
@type key: str
|
|
@param key: A 24 byte string.
|
|
|
|
@type IV: str
|
|
@param IV: An 8 byte string
|
|
|
|
@rtype: L{tlslite.utils.TripleDES}
|
|
@return: A 3DES object.
|
|
"""
|
|
if implList == None:
|
|
implList = ["cryptlib", "openssl", "pycrypto"]
|
|
|
|
for impl in implList:
|
|
if impl == "cryptlib" and cryptomath.cryptlibpyLoaded:
|
|
return Cryptlib_TripleDES.new(key, 2, IV)
|
|
elif impl == "openssl" and cryptomath.m2cryptoLoaded:
|
|
return OpenSSL_TripleDES.new(key, 2, IV)
|
|
elif impl == "pycrypto" and cryptomath.pycryptoLoaded:
|
|
return PyCrypto_TripleDES.new(key, 2, IV)
|
|
raise NotImplementedError() |