1
2
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
29
30
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
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
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()
103