forked from tink-crypto/tink
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TINKAeadKeyTemplate.h
139 lines (124 loc) · 3.74 KB
/
TINKAeadKeyTemplate.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/**
* Copyright 2018 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**************************************************************************
*/
#import <Foundation/Foundation.h>
#import "TINKKeyTemplate.h"
typedef NS_ENUM(NSInteger, TINKAeadKeyTemplates) {
/**
* AesGcmKey with the following parameters:
* Key size: 16 bytes
* IV size: 12 bytes
* Tag size: 16 bytes
* OutputPrefixType: TINK
*/
TINKAes128Gcm = 1,
/**
* AesGcmKey with the following parameters:
* Key size: 32 bytes
* IV size: 12 bytes
* Tag size: 16 bytes
* OutputPrefixType: TINK
*/
TINKAes256Gcm = 2,
/**
* AesCtrHmacAeadKey with the following parameters:
* AES key size: 16 bytes
* AES IV size: 16 bytes
* HMAC key size: 32 bytes
* HMAC tag size: 16 bytes
* HMAC hash function: SHA256
* OutputPrefixType: TINK
*/
TINKAes128CtrHmacSha256 = 3,
/**
* AesCtrHmacAeadKey with the following parameters:
* AES key size: 32 bytes
* AES IV size: 16 bytes
* HMAC key size: 32 bytes
* HMAC tag size: 32 bytes
* HMAC hash function: SHA256
* OutputPrefixType: TINK
*/
TINKAes256CtrHmacSha256 = 4,
/**
* AesEaxKey with the following parameters:
* Key size: 16 bytes
* IV size: 16 bytes
* Tag size: 16 bytes
* OutputPrefixType: TINK
*/
TINKAes128Eax = 5,
/**
* AesEaxKey with the following parameters:
* Key size: 32 bytes
* IV size: 16 bytes
* Tag size: 16 bytes
* OutputPrefixType: TINK
*/
TINKAes256Eax = 6,
/**
* XChaCha20Poly1305Key with the following parameters:
* XChacha20 key size: 32 bytes
* IV size: 24 bytes
* OutputPrefixType: TINK
*/
TINKXChaCha20Poly1305 = 7,
};
NS_ASSUME_NONNULL_BEGIN
/**
* Pre-generated key templates for TINKAead key types.
* One can use these templates to generate new TINKKeysetHandle object with fresh keys.
*
* Example:
*
* NSError *error = nil;
* TINKAeadConfig *aeadConfig = [[TINKAeadConfig alloc] initWithError:&error];
* if (!aeadConfig || error) {
* // handle error.
* }
*
* if (![TINKConfig registerConfig:aeadConfig error:&error]) {
* // handle error.
* }
*
* TINKAeadKeyTemplate *tpl = [[TINAeadKeyTemplate alloc] initWithKeyTemplate:TINKAes128Gcm
* error:&error];
* if (!tpl || error) {
* // handle error.
* }
*
* TINKKeysetHandle *handle = [[TINKKeysetHandle alloc] initWithKeyTemplate:tpl error:&error];
* if (!handle || error) {
* // handle error.
* }
*
*/
@interface TINKAeadKeyTemplate : TINKKeyTemplate
- (nullable instancetype)init
__attribute__((unavailable("Use -initWithKeyTemplate:error: instead.")));
/**
* Creates a TINKAeadKeyTemplate that can be used to generate aead keysets.
*
* @param keyTemplate The aead key template to use.
* @param error If non-nil it will be populated with a descriptive error when the operation
* fails.
* @return A TINKAeadKeyTemplate or nil in case of error.
*/
- (nullable instancetype)initWithKeyTemplate:(TINKAeadKeyTemplates)keyTemplate
error:(NSError **)error NS_DESIGNATED_INITIALIZER;
@end
NS_ASSUME_NONNULL_END