| |
| |
| |
|
|
| from __future__ import annotations |
|
|
| from cryptography.hazmat.primitives._cipheralgorithm import ( |
| BlockCipherAlgorithm, |
| CipherAlgorithm, |
| _verify_key_size, |
| ) |
|
|
|
|
| class ARC4(CipherAlgorithm): |
| name = "RC4" |
| key_sizes = frozenset([40, 56, 64, 80, 128, 160, 192, 256]) |
|
|
| def __init__(self, key: bytes): |
| self.key = _verify_key_size(self, key) |
|
|
| @property |
| def key_size(self) -> int: |
| return len(self.key) * 8 |
|
|
|
|
| class TripleDES(BlockCipherAlgorithm): |
| name = "3DES" |
| block_size = 64 |
| key_sizes = frozenset([64, 128, 192]) |
|
|
| def __init__(self, key: bytes): |
| if len(key) == 8: |
| key += key + key |
| elif len(key) == 16: |
| key += key[:8] |
| self.key = _verify_key_size(self, key) |
|
|
| @property |
| def key_size(self) -> int: |
| return len(self.key) * 8 |
|
|
|
|
| |
| class _DES: |
| key_size = 64 |
|
|
|
|
| class Blowfish(BlockCipherAlgorithm): |
| name = "Blowfish" |
| block_size = 64 |
| key_sizes = frozenset(range(32, 449, 8)) |
|
|
| def __init__(self, key: bytes): |
| self.key = _verify_key_size(self, key) |
|
|
| @property |
| def key_size(self) -> int: |
| return len(self.key) * 8 |
|
|
|
|
| class CAST5(BlockCipherAlgorithm): |
| name = "CAST5" |
| block_size = 64 |
| key_sizes = frozenset(range(40, 129, 8)) |
|
|
| def __init__(self, key: bytes): |
| self.key = _verify_key_size(self, key) |
|
|
| @property |
| def key_size(self) -> int: |
| return len(self.key) * 8 |
|
|
|
|
| class SEED(BlockCipherAlgorithm): |
| name = "SEED" |
| block_size = 128 |
| key_sizes = frozenset([128]) |
|
|
| def __init__(self, key: bytes): |
| self.key = _verify_key_size(self, key) |
|
|
| @property |
| def key_size(self) -> int: |
| return len(self.key) * 8 |
|
|
|
|
| class IDEA(BlockCipherAlgorithm): |
| name = "IDEA" |
| block_size = 64 |
| key_sizes = frozenset([128]) |
|
|
| def __init__(self, key: bytes): |
| self.key = _verify_key_size(self, key) |
|
|
| @property |
| def key_size(self) -> int: |
| return len(self.key) * 8 |
|
|
|
|
| |
| |
| class RC2(BlockCipherAlgorithm): |
| name = "RC2" |
| block_size = 64 |
| key_sizes = frozenset([128]) |
|
|
| def __init__(self, key: bytes): |
| self.key = _verify_key_size(self, key) |
|
|
| @property |
| def key_size(self) -> int: |
| return len(self.key) * 8 |
|
|