Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / tlslite / tlslite / utils / cipherfactory.py
1 # Author: Trevor Perrin
2 # See the LICENSE file for legal information regarding use of this file.
3
4 """Factory functions for symmetric cryptography."""
5
6 import os
7
8 from tlslite.utils import python_aes
9 from tlslite.utils import python_rc4
10
11 from tlslite.utils import cryptomath
12
13 tripleDESPresent = False
14
15 if cryptomath.m2cryptoLoaded:
16     from tlslite.utils import openssl_aes
17     from tlslite.utils import openssl_rc4
18     from tlslite.utils import openssl_tripledes
19     tripleDESPresent = True
20
21 if cryptomath.pycryptoLoaded:
22     from tlslite.utils import pycrypto_aes
23     from tlslite.utils import pycrypto_rc4
24     from tlslite.utils import pycrypto_tripledes
25     tripleDESPresent = True
26
27 # **************************************************************************
28 # Factory Functions for AES
29 # **************************************************************************
30
31 def createAES(key, IV, implList=None):
32     """Create a new AES object.
33
34     @type key: str
35     @param key: A 16, 24, or 32 byte string.
36
37     @type IV: str
38     @param IV: A 16 byte string
39
40     @rtype: L{tlslite.utils.AES}
41     @return: An AES object.
42     """
43     if implList == None:
44         implList = ["openssl", "pycrypto", "python"]
45
46     for impl in implList:
47         if impl == "openssl" and cryptomath.m2cryptoLoaded:
48             return openssl_aes.new(key, 2, IV)
49         elif impl == "pycrypto" and cryptomath.pycryptoLoaded:
50             return pycrypto_aes.new(key, 2, IV)
51         elif impl == "python":
52             return python_aes.new(key, 2, IV)
53     raise NotImplementedError()
54
55 def createRC4(key, IV, implList=None):
56     """Create a new RC4 object.
57
58     @type key: str
59     @param key: A 16 to 32 byte string.
60
61     @type IV: object
62     @param IV: Ignored, whatever it is.
63
64     @rtype: L{tlslite.utils.RC4}
65     @return: An RC4 object.
66     """
67     if implList == None:
68         implList = ["openssl", "pycrypto", "python"]
69
70     if len(IV) != 0:
71         raise AssertionError()
72     for impl in implList:
73         if impl == "openssl" and cryptomath.m2cryptoLoaded:
74             return openssl_rc4.new(key)
75         elif impl == "pycrypto" and cryptomath.pycryptoLoaded:
76             return pycrypto_rc4.new(key)
77         elif impl == "python":
78             return python_rc4.new(key)
79     raise NotImplementedError()
80
81 #Create a new TripleDES instance
82 def createTripleDES(key, IV, implList=None):
83     """Create a new 3DES object.
84
85     @type key: str
86     @param key: A 24 byte string.
87
88     @type IV: str
89     @param IV: An 8 byte string
90
91     @rtype: L{tlslite.utils.TripleDES}
92     @return: A 3DES object.
93     """
94     if implList == None:
95         implList = ["openssl", "pycrypto"]
96
97     for impl in implList:
98         if impl == "openssl" and cryptomath.m2cryptoLoaded:
99             return openssl_tripledes.new(key, 2, IV)
100         elif impl == "pycrypto" and cryptomath.pycryptoLoaded:
101             return pycrypto_tripledes.new(key, 2, IV)
102     raise NotImplementedError()