Botan
1.11.15
|
00001 /* 00002 * Filter interface for Transforms 00003 * (C) 2013 Jack Lloyd 00004 * 00005 * Botan is released under the Simplified BSD License (see license.txt) 00006 */ 00007 00008 #ifndef BOTAN_TRANSFORM_FILTER_H__ 00009 #define BOTAN_TRANSFORM_FILTER_H__ 00010 00011 #include <botan/transform.h> 00012 #include <botan/key_filt.h> 00013 #include <botan/buf_filt.h> 00014 00015 namespace Botan { 00016 00017 /** 00018 * Filter interface for Transforms 00019 */ 00020 class BOTAN_DLL Transform_Filter : public Keyed_Filter, 00021 private Buffered_Filter 00022 { 00023 public: 00024 Transform_Filter(Transform* t); 00025 00026 void set_iv(const InitializationVector& iv) override; 00027 00028 void set_key(const SymmetricKey& key) override; 00029 00030 Key_Length_Specification key_spec() const override; 00031 00032 bool valid_iv_length(size_t length) const override; 00033 00034 std::string name() const override; 00035 00036 protected: 00037 const Transform& get_transform() const { return *m_transform; } 00038 00039 Transform& get_transform() { return *m_transform; } 00040 00041 private: 00042 void write(const byte input[], size_t input_length) override; 00043 void start_msg() override; 00044 void end_msg() override; 00045 00046 void buffered_block(const byte input[], size_t input_length) override; 00047 void buffered_final(const byte input[], size_t input_length) override; 00048 00049 class Nonce_State 00050 { 00051 public: 00052 Nonce_State(bool allow_null_nonce) : m_fresh_nonce(allow_null_nonce) {} 00053 00054 void update(const InitializationVector& iv); 00055 std::vector<byte> get(); 00056 private: 00057 bool m_fresh_nonce; 00058 std::vector<byte> m_nonce; 00059 }; 00060 00061 Nonce_State m_nonce; 00062 std::unique_ptr<Transform> m_transform; 00063 secure_vector<byte> m_buffer; 00064 }; 00065 00066 typedef Transform_Filter Transformation_Filter; 00067 00068 } 00069 00070 #endif