1 /* 2 * SecureQueue 3 * (C) 1999-2007 Jack Lloyd 4 * 2012 Markus Wanner 5 * 6 * Botan is released under the Simplified BSD License (see license.txt) 7 */ 8 9 #ifndef BOTAN_SECURE_QUEUE_H_ 10 #define BOTAN_SECURE_QUEUE_H_ 11 12 #include <botan/data_src.h> 13 #include <botan/filter.h> 14 15 BOTAN_FUTURE_INTERNAL_HEADER(secqueue.h) 16 17 namespace Botan { 18 19 /** 20 * A queue that knows how to zeroize itself 21 */ 22 class BOTAN_PUBLIC_API(2,0) SecureQueue final : public Fanout_Filter, public DataSource 23 { 24 public: name()25 std::string name() const override { return "Queue"; } 26 27 void write(const uint8_t[], size_t) override; 28 29 size_t read(uint8_t[], size_t) override; 30 size_t peek(uint8_t[], size_t, size_t = 0) const override; 31 size_t get_bytes_read() const override; 32 33 bool end_of_data() const override; 34 35 bool empty() const; 36 check_available(size_t n)37 bool check_available(size_t n) override { return n <= size(); } 38 39 /** 40 * @return number of bytes available in the queue 41 */ 42 size_t size() const; 43 attachable()44 bool attachable() override { return false; } 45 46 /** 47 * SecureQueue assignment 48 * @param other the queue to copy 49 */ 50 SecureQueue& operator=(const SecureQueue& other); 51 52 /** 53 * SecureQueue default constructor (creates empty queue) 54 */ 55 SecureQueue(); 56 57 /** 58 * SecureQueue copy constructor 59 * @param other the queue to copy 60 */ 61 SecureQueue(const SecureQueue& other); 62 ~SecureQueue()63 ~SecureQueue() { destroy(); } 64 65 private: 66 void destroy(); 67 size_t m_bytes_read; 68 class SecureQueueNode* m_head; 69 class SecureQueueNode* m_tail; 70 }; 71 72 } 73 74 #endif 75