Botan  1.10.9
buf_filt.h
Go to the documentation of this file.
1 /*
2 * Buffered Filter
3 * (C) 1999-2007 Jack Lloyd
4 *
5 * Distributed under the terms of the Botan license
6 */
7 
8 #ifndef BOTAN_BUFFERED_FILTER_H__
9 #define BOTAN_BUFFERED_FILTER_H__
10 
11 #include <botan/secmem.h>
12 
13 namespace Botan {
14 
15 /**
16 * Filter mixin that breaks input into blocks, useful for
17 * cipher modes
18 */
19 class BOTAN_DLL Buffered_Filter
20  {
21  public:
22  /**
23  * Write bytes into the buffered filter, which will them emit them
24  * in calls to buffered_block in the subclass
25  * @param in the input bytes
26  * @param length of in in bytes
27  */
28  void write(const byte in[], size_t length);
29 
30  /**
31  * Finish a message, emitting to buffered_block and buffered_final
32  * Will throw an exception if less than final_minimum bytes were
33  * written into the filter.
34  */
35  void end_msg();
36 
37  /**
38  * Initialize a Buffered_Filter
39  * @param block_size the function buffered_block will be called
40  * with inputs which are a multiple of this size
41  * @param final_minimum the function buffered_final will be called
42  * with at least this many bytes.
43  */
44  Buffered_Filter(size_t block_size, size_t final_minimum);
45 
46  virtual ~Buffered_Filter() {}
47  protected:
48  /**
49  * The block processor, implemented by subclasses
50  * @param input some input bytes
51  * @param length the size of input, guaranteed to be a multiple
52  * of block_size
53  */
54  virtual void buffered_block(const byte input[], size_t length) = 0;
55 
56  /**
57  * The final block, implemented by subclasses
58  * @param input some input bytes
59  * @param length the size of input, guaranteed to be at least
60  * final_minimum bytes
61  */
62  virtual void buffered_final(const byte input[], size_t length) = 0;
63 
64  /**
65  * @return block size of inputs
66  */
67  size_t buffered_block_size() const { return main_block_mod; }
68 
69  /**
70  * @return current position in the buffer
71  */
72  size_t current_position() const { return buffer_pos; }
73 
74  /**
75  * Reset the buffer position
76  */
77  void buffer_reset() { buffer_pos = 0; }
78  private:
79  size_t main_block_mod, final_minimum;
80 
81  SecureVector<byte> buffer;
82  size_t buffer_pos;
83  };
84 
85 }
86 
87 #endif
virtual ~Buffered_Filter()
Definition: buf_filt.h:46
size_t block_size
Definition: ossl_md.cpp:41
unsigned char byte
Definition: types.h:22
size_t current_position() const
Definition: buf_filt.h:72
size_t buffered_block_size() const
Definition: buf_filt.h:67