Botan 2.19.3
Crypto and TLS for C&
stream_mode.h
Go to the documentation of this file.
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
18
19namespace Botan {
20
21#if defined(BOTAN_HAS_STREAM_CIPHER)
22
23class BOTAN_PUBLIC_API(2,0) Stream_Cipher_Mode final : public Cipher_Mode
24 {
25 public:
26 /**
27 * @param cipher underyling stream cipher
28 */
29 explicit Stream_Cipher_Mode(StreamCipher* cipher) : m_cipher(cipher) {}
30
31 size_t process(uint8_t buf[], size_t sz) override
32 {
33 m_cipher->cipher1(buf, sz);
34 return sz;
35 }
36
37 void finish(secure_vector<uint8_t>& buf, size_t offset) override
38 { return update(buf, offset); }
39
40 size_t output_length(size_t input_length) const override { return input_length; }
41
42 size_t update_granularity() const override { return 1; }
43
44 size_t minimum_final_size() const override { return 0; }
45
46 size_t default_nonce_length() const override { return 0; }
47
48 bool valid_nonce_length(size_t nonce_len) const override
49 { return m_cipher->valid_iv_length(nonce_len); }
50
51 Key_Length_Specification key_spec() const override { return m_cipher->key_spec(); }
52
53 std::string name() const override { return m_cipher->name(); }
54
55 void clear() override
56 {
57 m_cipher->clear();
58 reset();
59 }
60
61 void reset() override { /* no msg state */ }
62
63 private:
64 void start_msg(const uint8_t nonce[], size_t nonce_len) override
65 {
66 if(nonce_len > 0)
67 {
68 m_cipher->set_iv(nonce, nonce_len);
69 }
70 }
71
72 void key_schedule(const uint8_t key[], size_t length) override
73 {
74 m_cipher->set_key(key, length);
75 }
76
77 std::unique_ptr<StreamCipher> m_cipher;
78 };
79
80#endif
81
82}
83
84#endif
std::string name
int(* update)(CTX *, const void *, CC_LONG len)
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
Definition compiler.h:31
#define BOTAN_FUTURE_INTERNAL_HEADER(hdr)
Definition compiler.h:136