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.primitives._modes import (
9 ModeWithInitializationVector,
10 _check_iv_and_key_length,
11)
12
13
14class OFB(ModeWithInitializationVector):
15 name = "OFB"
16
17 def __init__(self, initialization_vector: utils.Buffer):
18 utils._check_byteslike("initialization_vector", initialization_vector)
19 self._initialization_vector = initialization_vector
20
21 @property
22 def initialization_vector(self) -> utils.Buffer:
23 return self._initialization_vector
24
25 validate_for_algorithm = _check_iv_and_key_length
26
27
28class CFB(ModeWithInitializationVector):
29 name = "CFB"
30
31 def __init__(self, initialization_vector: utils.Buffer):
32 utils._check_byteslike("initialization_vector", initialization_vector)
33 self._initialization_vector = initialization_vector
34
35 @property
36 def initialization_vector(self) -> utils.Buffer:
37 return self._initialization_vector
38
39 validate_for_algorithm = _check_iv_and_key_length
40
41
42class CFB8(ModeWithInitializationVector):
43 name = "CFB8"
44
45 def __init__(self, initialization_vector: utils.Buffer):
46 utils._check_byteslike("initialization_vector", initialization_vector)
47 self._initialization_vector = initialization_vector
48
49 @property
50 def initialization_vector(self) -> utils.Buffer:
51 return self._initialization_vector
52
53 validate_for_algorithm = _check_iv_and_key_length