/gdata/tlslite/utils/cipherfactory.py
http://radioappz.googlecode.com/ · Python · 111 lines · 59 code · 14 blank · 38 comment · 30 complexity · 690be0bd657f6979b0b87ad8e4c96d0a MD5 · raw file
- """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()