Botan  2.12.1
Crypto and TLS for C++11
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 
17 BOTAN_FUTURE_INTERNAL_HEADER(stream_mode.h)
18 
19 namespace Botan {
20 
21 #if defined(BOTAN_HAS_STREAM_CIPHER)
22 
23 class 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
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
Definition: compiler.h:31
std::string name
Definition: alg_id.cpp:13
int(* update)(CTX *, const void *, CC_LONG len)
#define BOTAN_FUTURE_INTERNAL_HEADER(hdr)
Definition: compiler.h:139