Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py: 80%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

69 statements  

1# This file is dual licensed under the terms of the Apache License, Version 

2# 2.0, and the BSD License. See the LICENSE file in the root of this repository 

3# for complete details. 

4 

5from __future__ import annotations 

6 

7from cryptography import utils 

8from cryptography.hazmat.decrepit.ciphers.algorithms import ( 

9 ARC4 as ARC4, 

10) 

11from cryptography.hazmat.decrepit.ciphers.algorithms import ( 

12 CAST5 as CAST5, 

13) 

14from cryptography.hazmat.decrepit.ciphers.algorithms import ( 

15 IDEA as IDEA, 

16) 

17from cryptography.hazmat.decrepit.ciphers.algorithms import ( 

18 SEED as SEED, 

19) 

20from cryptography.hazmat.decrepit.ciphers.algorithms import ( 

21 Blowfish as Blowfish, 

22) 

23from cryptography.hazmat.decrepit.ciphers.algorithms import ( 

24 TripleDES as TripleDES, 

25) 

26from cryptography.hazmat.primitives._cipheralgorithm import _verify_key_size 

27from cryptography.hazmat.primitives.ciphers import ( 

28 BlockCipherAlgorithm, 

29 CipherAlgorithm, 

30) 

31 

32 

33class AES(BlockCipherAlgorithm): 

34 name = "AES" 

35 block_size = 128 

36 # 512 added to support AES-256-XTS, which uses 512-bit keys 

37 key_sizes = frozenset([128, 192, 256, 512]) 

38 

39 def __init__(self, key: utils.Buffer): 

40 self.key = _verify_key_size(self, key) 

41 

42 @property 

43 def key_size(self) -> int: 

44 return len(self.key) * 8 

45 

46 

47class AES128(BlockCipherAlgorithm): 

48 name = "AES" 

49 block_size = 128 

50 key_sizes = frozenset([128]) 

51 key_size = 128 

52 

53 def __init__(self, key: utils.Buffer): 

54 self.key = _verify_key_size(self, key) 

55 

56 

57class AES256(BlockCipherAlgorithm): 

58 name = "AES" 

59 block_size = 128 

60 key_sizes = frozenset([256]) 

61 key_size = 256 

62 

63 def __init__(self, key: utils.Buffer): 

64 self.key = _verify_key_size(self, key) 

65 

66 

67class Camellia(BlockCipherAlgorithm): 

68 name = "camellia" 

69 block_size = 128 

70 key_sizes = frozenset([128, 192, 256]) 

71 

72 def __init__(self, key: utils.Buffer): 

73 self.key = _verify_key_size(self, key) 

74 

75 @property 

76 def key_size(self) -> int: 

77 return len(self.key) * 8 

78 

79 

80utils.deprecated( 

81 ARC4, 

82 __name__, 

83 "ARC4 has been moved to " 

84 "cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and " 

85 "will be removed from " 

86 "cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.", 

87 utils.DeprecatedIn43, 

88 name="ARC4", 

89) 

90 

91 

92utils.deprecated( 

93 TripleDES, 

94 __name__, 

95 "TripleDES has been moved to " 

96 "cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and " 

97 "will be removed from " 

98 "cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.", 

99 utils.DeprecatedIn43, 

100 name="TripleDES", 

101) 

102 

103 

104class ChaCha20(CipherAlgorithm): 

105 name = "ChaCha20" 

106 key_sizes = frozenset([256]) 

107 

108 def __init__(self, key: utils.Buffer, nonce: utils.Buffer): 

109 self.key = _verify_key_size(self, key) 

110 utils._check_byteslike("nonce", nonce) 

111 

112 if len(nonce) != 16: 

113 raise ValueError("nonce must be 128-bits (16 bytes)") 

114 

115 self._nonce = nonce 

116 

117 @property 

118 def nonce(self) -> utils.Buffer: 

119 return self._nonce 

120 

121 @property 

122 def key_size(self) -> int: 

123 return len(self.key) * 8 

124 

125 

126class SM4(BlockCipherAlgorithm): 

127 name = "SM4" 

128 block_size = 128 

129 key_sizes = frozenset([128]) 

130 

131 def __init__(self, key: bytes): 

132 self.key = _verify_key_size(self, key) 

133 

134 @property 

135 def key_size(self) -> int: 

136 return len(self.key) * 8