Update README.md
[nemesis.git] / Platform / Buffer.h
1 /*
2  Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
3
4  Governed by the TrueCrypt License 3.0 the full text of which is contained in
5  the file License.txt included in TrueCrypt binary and source code distribution
6  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) const;
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 page took 0.021569 seconds and 3 git commands to generate. Download a nemesis OSX (sierra+high sierra, tested/working) binary, with fuse-ext3 via e2fsprogs, at this link. application and installer are signed by screwjack, llc. must install fuse with macFUSE layer first.