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

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

71 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.hazmat.primitives._cipheralgorithm import ( 

8 BlockCipherAlgorithm, 

9 CipherAlgorithm, 

10 _verify_key_size, 

11) 

12 

13 

14class ARC4(CipherAlgorithm): 

15 name = "RC4" 

16 key_sizes = frozenset([40, 56, 64, 80, 128, 160, 192, 256]) 

17 

18 def __init__(self, key: bytes): 

19 self.key = _verify_key_size(self, key) 

20 

21 @property 

22 def key_size(self) -> int: 

23 return len(self.key) * 8 

24 

25 

26class TripleDES(BlockCipherAlgorithm): 

27 name = "3DES" 

28 block_size = 64 

29 key_sizes = frozenset([64, 128, 192]) 

30 

31 def __init__(self, key: bytes): 

32 if len(key) == 8: 

33 key += key + key 

34 elif len(key) == 16: 

35 key += key[:8] 

36 self.key = _verify_key_size(self, key) 

37 

38 @property 

39 def key_size(self) -> int: 

40 return len(self.key) * 8 

41 

42 

43# Not actually supported, marker for tests 

44class _DES: 

45 key_size = 64 

46 

47 

48class Blowfish(BlockCipherAlgorithm): 

49 name = "Blowfish" 

50 block_size = 64 

51 key_sizes = frozenset(range(32, 449, 8)) 

52 

53 def __init__(self, key: bytes): 

54 self.key = _verify_key_size(self, key) 

55 

56 @property 

57 def key_size(self) -> int: 

58 return len(self.key) * 8 

59 

60 

61class CAST5(BlockCipherAlgorithm): 

62 name = "CAST5" 

63 block_size = 64 

64 key_sizes = frozenset(range(40, 129, 8)) 

65 

66 def __init__(self, key: bytes): 

67 self.key = _verify_key_size(self, key) 

68 

69 @property 

70 def key_size(self) -> int: 

71 return len(self.key) * 8 

72 

73 

74class SEED(BlockCipherAlgorithm): 

75 name = "SEED" 

76 block_size = 128 

77 key_sizes = frozenset([128]) 

78 

79 def __init__(self, key: bytes): 

80 self.key = _verify_key_size(self, key) 

81 

82 @property 

83 def key_size(self) -> int: 

84 return len(self.key) * 8 

85 

86 

87class IDEA(BlockCipherAlgorithm): 

88 name = "IDEA" 

89 block_size = 64 

90 key_sizes = frozenset([128]) 

91 

92 def __init__(self, key: bytes): 

93 self.key = _verify_key_size(self, key) 

94 

95 @property 

96 def key_size(self) -> int: 

97 return len(self.key) * 8 

98 

99 

100# This class only allows RC2 with a 128-bit key. No support for 

101# effective key bits or other key sizes is provided. 

102class RC2(BlockCipherAlgorithm): 

103 name = "RC2" 

104 block_size = 64 

105 key_sizes = frozenset([128]) 

106 

107 def __init__(self, key: bytes): 

108 self.key = _verify_key_size(self, key) 

109 

110 @property 

111 def key_size(self) -> int: 

112 return len(self.key) * 8