faset over fra Z3950 til google books
This commit is contained in:
111
python/gdata/tlslite/utils/cipherfactory.py
Normal file
111
python/gdata/tlslite/utils/cipherfactory.py
Normal file
@@ -0,0 +1,111 @@
|
||||
"""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()
|
Reference in New Issue
Block a user