/src/botan/build/include/botan/internal/stream_mode.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * (C) 2015 Jack Lloyd |
3 | | * (C) 2016 Daniel Neus, Rohde & Schwarz Cybersecurity |
4 | | * |
5 | | * Botan is released under the Simplified BSD License (see license.txt) |
6 | | */ |
7 | | |
8 | | #ifndef BOTAN_STREAM_MODE_H_ |
9 | | #define BOTAN_STREAM_MODE_H_ |
10 | | |
11 | | #include <botan/cipher_mode.h> |
12 | | |
13 | | #if defined(BOTAN_HAS_STREAM_CIPHER) |
14 | | #include <botan/stream_cipher.h> |
15 | | #endif |
16 | | |
17 | | namespace Botan { |
18 | | |
19 | | #if defined(BOTAN_HAS_STREAM_CIPHER) |
20 | | |
21 | | class Stream_Cipher_Mode final : public Cipher_Mode |
22 | | { |
23 | | public: |
24 | | /** |
25 | | * @param cipher underyling stream cipher |
26 | | */ |
27 | 0 | explicit Stream_Cipher_Mode(StreamCipher* cipher) : m_cipher(cipher) {} |
28 | | |
29 | | size_t process(uint8_t buf[], size_t sz) override |
30 | 0 | { |
31 | 0 | m_cipher->cipher1(buf, sz); |
32 | 0 | return sz; |
33 | 0 | } |
34 | | |
35 | | void finish(secure_vector<uint8_t>& buf, size_t offset) override |
36 | 0 | { return update(buf, offset); } |
37 | | |
38 | 0 | size_t output_length(size_t input_length) const override { return input_length; } |
39 | | |
40 | 0 | size_t update_granularity() const override { return 1; } |
41 | | |
42 | 0 | size_t minimum_final_size() const override { return 0; } |
43 | | |
44 | 0 | size_t default_nonce_length() const override { return 0; } |
45 | | |
46 | | bool valid_nonce_length(size_t nonce_len) const override |
47 | 0 | { return m_cipher->valid_iv_length(nonce_len); } |
48 | | |
49 | 0 | Key_Length_Specification key_spec() const override { return m_cipher->key_spec(); } |
50 | | |
51 | 0 | std::string name() const override { return m_cipher->name(); } |
52 | | |
53 | | void clear() override |
54 | 0 | { |
55 | 0 | m_cipher->clear(); |
56 | 0 | reset(); |
57 | 0 | } |
58 | | |
59 | 0 | void reset() override { /* no msg state */ } |
60 | | |
61 | | private: |
62 | | void start_msg(const uint8_t nonce[], size_t nonce_len) override |
63 | 0 | { |
64 | 0 | if(nonce_len > 0) |
65 | 0 | { |
66 | 0 | m_cipher->set_iv(nonce, nonce_len); |
67 | 0 | } |
68 | 0 | } |
69 | | |
70 | | void key_schedule(const uint8_t key[], size_t length) override |
71 | 0 | { |
72 | 0 | m_cipher->set_key(key, length); |
73 | 0 | } |
74 | | |
75 | | std::unique_ptr<StreamCipher> m_cipher; |
76 | | }; |
77 | | |
78 | | #endif |
79 | | |
80 | | } |
81 | | |
82 | | #endif |