Botan  1.11.15
src/lib/filters/transform_filter.h
Go to the documentation of this file.
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