ObjFW
OFSecureData.h
1 /*
2  * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im>
3  *
4  * All rights reserved.
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License version 3.0 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13  * version 3.0 for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * version 3.0 along with this program. If not, see
17  * <https://www.gnu.org/licenses/>.
18  */
19 
20 #import "OFData.h"
21 
22 OF_ASSUME_NONNULL_BEGIN
23 
36 OF_SUBCLASSING_RESTRICTED
37 @interface OFSecureData: OFData
38 {
39  unsigned char *_Nullable _items;
40  size_t _count, _itemSize;
41  bool _freeWhenDone, _allowsSwappableMemory;
42  void *_page;
43 }
44 
48 @property (readonly, nonatomic) bool allowsSwappableMemory;
49 
56 @property (readonly, nonatomic) void *mutableItems OF_RETURNS_INNER_POINTER;
57 
70 + (void)preallocateUnswappableMemoryWithSize: (size_t)size;
71 
81 + (instancetype)dataWithCount: (size_t)count
82  allowsSwappableMemory: (bool)allowsSwappableMemory;
83 
94 + (instancetype)dataWithCount: (size_t)count
95  itemSize: (size_t)itemSize
96  allowsSwappableMemory: (bool)allowsSwappableMemory;
97 
98 + (instancetype)dataWithItems: (const void *)items
99  count: (size_t)count OF_UNAVAILABLE;
100 + (instancetype)dataWithItems: (const void *)items
101  count: (size_t)count
102  itemSize: (size_t)itemSize OF_UNAVAILABLE;
103 + (instancetype)dataWithItemsNoCopy: (void *)items
104  count: (size_t)count
105  freeWhenDone: (bool)freeWhenDone OF_UNAVAILABLE;
106 + (instancetype)dataWithItemsNoCopy: (void *)items
107  count: (size_t)count
108  itemSize: (size_t)itemSize
109  freeWhenDone: (bool)freeWhenDone OF_UNAVAILABLE;
110 #ifdef OF_HAVE_FILES
111 + (instancetype)dataWithContentsOfFile: (OFString *)path OF_UNAVAILABLE;
112 #endif
113 + (instancetype)dataWithContentsOfIRI: (OFIRI *)IRI OF_UNAVAILABLE;
114 + (instancetype)dataWithStringRepresentation: (OFString *)string OF_UNAVAILABLE;
115 + (instancetype)dataWithBase64EncodedString: (OFString *)string OF_UNAVAILABLE;
116 
126 - (instancetype)initWithCount: (size_t)count
127  allowsSwappableMemory: (bool)allowsSwappableMemory;
128 
139 - (instancetype)initWithCount: (size_t)count
140  itemSize: (size_t)itemSize
141  allowsSwappableMemory: (bool)allowsSwappableMemory
142  OF_DESIGNATED_INITIALIZER;
143 
144 - (instancetype)init OF_UNAVAILABLE;
145 - (instancetype)initWithItemSize: (size_t)itemSize OF_UNAVAILABLE;
146 - (instancetype)initWithItems: (const void *)items
147  count: (size_t)count OF_UNAVAILABLE;
148 - (instancetype)initWithItems: (const void *)items
149  count: (size_t)count
150  itemSize: (size_t)itemSize OF_UNAVAILABLE;
151 - (instancetype)initWithItemsNoCopy: (void *)items
152  count: (size_t)count
153  freeWhenDone: (bool)freeWhenDone OF_UNAVAILABLE;
154 - (instancetype)initWithItemsNoCopy: (void *)items
155  count: (size_t)count
156  itemSize: (size_t)itemSize
157  freeWhenDone: (bool)freeWhenDone OF_UNAVAILABLE;
158 #ifdef OF_HAVE_FILES
159 - (instancetype)initWithContentsOfFile: (OFString *)path OF_UNAVAILABLE;
160 #endif
161 - (instancetype)initWithContentsOfIRI: (OFIRI *)IRI OF_UNAVAILABLE;
162 - (instancetype)initWithStringRepresentation: (OFString *)string OF_UNAVAILABLE;
163 - (instancetype)initWithBase64EncodedString: (OFString *)string OF_UNAVAILABLE;
164 
174 - (void *)mutableItemAtIndex: (size_t)index OF_RETURNS_INNER_POINTER;
175 
185 - (bool)isEqual: (nullable id)object;
186 
190 - (void)zero;
191 
192 - (OFString *)stringRepresentation OF_UNAVAILABLE;
193 - (OFString *)stringByBase64Encoding OF_UNAVAILABLE;
194 #ifdef OF_HAVE_FILES
195 - (void)writeToFile: (OFString *)path OF_UNAVAILABLE;
196 #endif
197 - (void)writeToIRI: (OFIRI *)IRI OF_UNAVAILABLE;
198 - (OFData *)messagePackRepresentation OF_UNAVAILABLE;
199 @end
200 
201 OF_ASSUME_NONNULL_END
A class for handling strings.
Definition: OFString.h:142
A class for storing arbitrary data in secure (non-swappable) memory, securely wiping it when it gets ...
Definition: OFSecureData.h:37
A class for representing IRIs, URIs, URLs and URNs, for parsing them as well as accessing parts of th...
Definition: OFIRI.h:39
A class for storing arbitrary data in an array.
Definition: OFData.h:45