|
|
1.1 ! root 1: /* ! 2: Copyright (c) 2008 TrueCrypt Foundation. All rights reserved. ! 3: ! 4: Governed by the TrueCrypt License 2.4 the full text of which is contained ! 5: in the file License.txt included in TrueCrypt binary and source code ! 6: distribution packages. ! 7: */ ! 8: ! 9: #ifndef TC_HEADER_Platform_Buffer ! 10: #define TC_HEADER_Platform_Buffer ! 11: ! 12: #include "PlatformBase.h" ! 13: #include "Memory.h" ! 14: ! 15: namespace TrueCrypt ! 16: { ! 17: ! 18: class ConstBufferPtr ! 19: { ! 20: public: ! 21: ConstBufferPtr () ! 22: : DataPtr (nullptr), DataSize (0) { } ! 23: ConstBufferPtr (const byte *data, size_t size) ! 24: : DataPtr (data), DataSize (size) { } ! 25: virtual ~ConstBufferPtr () { } ! 26: ! 27: operator const byte * () const { return DataPtr; } ! 28: ! 29: bool IsDataEqual (const ConstBufferPtr &other) const { return Memory::Compare (DataPtr, DataSize, other.DataPtr, other.DataSize) == 0; } ! 30: const byte *Get () const { return DataPtr; } ! 31: ConstBufferPtr GetRange (size_t offset, size_t size) const; ! 32: void Set (const byte *data, size_t size) { DataPtr = data; DataSize = size; } ! 33: size_t Size () const { return DataSize; } ! 34: ! 35: protected: ! 36: const byte *DataPtr; ! 37: size_t DataSize; ! 38: }; ! 39: ! 40: ! 41: class BufferPtr ! 42: { ! 43: public: ! 44: BufferPtr () ! 45: : DataPtr (nullptr), DataSize (0) { } ! 46: BufferPtr (byte *data, size_t size) ! 47: : DataPtr (data), DataSize (size) { } ! 48: virtual ~BufferPtr () { } ! 49: ! 50: operator byte * () const { return DataPtr; } ! 51: void CopyFrom (const ConstBufferPtr &bufferPtr); ! 52: void Erase () const { Zero(); } ! 53: byte *Get () const { return DataPtr; } ! 54: BufferPtr GetRange (size_t offset, size_t size) const; ! 55: void Set (byte *data, size_t size) { DataPtr = data; DataSize = size; } ! 56: size_t Size () const { return DataSize; } ! 57: void Zero () const { Memory::Zero (DataPtr, DataSize); } ! 58: ! 59: operator ConstBufferPtr () const { return ConstBufferPtr (DataPtr, DataSize); } ! 60: ! 61: protected: ! 62: byte *DataPtr; ! 63: size_t DataSize; ! 64: }; ! 65: ! 66: class Buffer ! 67: { ! 68: public: ! 69: Buffer (); ! 70: Buffer (size_t size); ! 71: Buffer (const ConstBufferPtr &bufferPtr) { CopyFrom (bufferPtr); } ! 72: virtual ~Buffer (); ! 73: ! 74: virtual void Allocate (size_t size); ! 75: virtual void CopyFrom (const ConstBufferPtr &bufferPtr); ! 76: virtual byte *Ptr () const { return DataPtr; } ! 77: virtual void Erase (); ! 78: virtual void Free (); ! 79: virtual BufferPtr GetRange (size_t offset, size_t size) const; ! 80: virtual size_t Size () const { return DataSize; } ! 81: virtual bool IsAllocated () const { return DataSize != 0; } ! 82: virtual void Zero (); ! 83: ! 84: virtual operator byte * () const { return DataPtr; } ! 85: virtual operator BufferPtr () const { return BufferPtr (DataPtr, DataSize); } ! 86: virtual operator ConstBufferPtr () const { return ConstBufferPtr (DataPtr, DataSize); } ! 87: ! 88: protected: ! 89: byte *DataPtr; ! 90: size_t DataSize; ! 91: ! 92: private: ! 93: Buffer (const Buffer &); ! 94: Buffer &operator= (const Buffer &); ! 95: }; ! 96: ! 97: class SecureBuffer : public Buffer ! 98: { ! 99: public: ! 100: SecureBuffer () { } ! 101: SecureBuffer (size_t size); ! 102: SecureBuffer (const ConstBufferPtr &bufferPtr) { CopyFrom (bufferPtr); } ! 103: virtual ~SecureBuffer (); ! 104: ! 105: virtual void Allocate (size_t size); ! 106: virtual void Free (); ! 107: ! 108: private: ! 109: SecureBuffer (const SecureBuffer &); ! 110: SecureBuffer &operator= (const SecureBuffer &); ! 111: }; ! 112: ! 113: } ! 114: ! 115: #endif // TC_HEADER_Platform_Buffer
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.