Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
algorithms.py143 linesDownload Raw Back to ciphers
1# This file is dual licensed under the terms of the Apache License, Version2# 2.0, and the BSD License. See the LICENSE file in the root of this repository3# for complete details.4 5from __future__ import annotations6 7import warnings8 9from cryptography import utils10from cryptography.hazmat.primitives._cipheralgorithm import (11    BlockCipherAlgorithm,12    CipherAlgorithm,13    _verify_key_size,14)15 16 17class ARC4(CipherAlgorithm):18    name = "RC4"19    key_sizes = frozenset([40, 56, 64, 80, 128, 160, 192, 256])20 21    def __init__(self, key: bytes):22        self.key = _verify_key_size(self, key)23 24    @property25    def key_size(self) -> int:26        return len(self.key) * 827 28 29class TripleDES(BlockCipherAlgorithm):30    name = "3DES"31    block_size = 6432    key_sizes = frozenset([64, 128, 192])33 34    def __init__(self, key: bytes):35        if len(key) == 8:36            warnings.warn(37                "Single-key TripleDES (8-byte keys) is deprecated and "38                "support will be removed in a future release. Use 24-byte "39                "keys instead (e.g., key + key + key).",40                utils.DeprecatedIn47,41                stacklevel=2,42            )43            key = key + key + key44        elif len(key) == 16:45            warnings.warn(46                "Two-key TripleDES (16-byte keys) is deprecated and "47                "support will be removed in a future release. Use 24-byte "48                "keys instead (e.g., key + key[:8]).",49                utils.DeprecatedIn47,50                stacklevel=2,51            )52            key = key + key[:8]53        self.key = _verify_key_size(self, key)54 55    @property56    def key_size(self) -> int:57        return len(self.key) * 858 59 60# Not actually supported, marker for tests61class _DES:62    key_size = 6463 64 65class Blowfish(BlockCipherAlgorithm):66    name = "Blowfish"67    block_size = 6468    key_sizes = frozenset(range(32, 449, 8))69 70    def __init__(self, key: bytes):71        self.key = _verify_key_size(self, key)72 73    @property74    def key_size(self) -> int:75        return len(self.key) * 876 77 78class CAST5(BlockCipherAlgorithm):79    name = "CAST5"80    block_size = 6481    key_sizes = frozenset(range(40, 129, 8))82 83    def __init__(self, key: bytes):84        self.key = _verify_key_size(self, key)85 86    @property87    def key_size(self) -> int:88        return len(self.key) * 889 90 91class SEED(BlockCipherAlgorithm):92    name = "SEED"93    block_size = 12894    key_sizes = frozenset([128])95 96    def __init__(self, key: bytes):97        self.key = _verify_key_size(self, key)98 99    @property100    def key_size(self) -> int:101        return len(self.key) * 8102 103 104class IDEA(BlockCipherAlgorithm):105    name = "IDEA"106    block_size = 64107    key_sizes = frozenset([128])108 109    def __init__(self, key: bytes):110        self.key = _verify_key_size(self, key)111 112    @property113    def key_size(self) -> int:114        return len(self.key) * 8115 116 117class Camellia(BlockCipherAlgorithm):118    name = "camellia"119    block_size = 128120    key_sizes = frozenset([128, 192, 256])121 122    def __init__(self, key: bytes):123        self.key = _verify_key_size(self, key)124 125    @property126    def key_size(self) -> int:127        return len(self.key) * 8128 129 130# This class only allows RC2 with a 128-bit key. No support for131# effective key bits or other key sizes is provided.132class RC2(BlockCipherAlgorithm):133    name = "RC2"134    block_size = 64135    key_sizes = frozenset([128])136 137    def __init__(self, key: bytes):138        self.key = _verify_key_size(self, key)139 140    @property141    def key_size(self) -> int:142        return len(self.key) * 8143 
codekingpro/portable-devtools · Team Ai