1 | /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */ |
2 | /* |
3 | * Copyright (c) 2016-2017, Mellanox Technologies. All rights reserved. |
4 | * |
5 | * This software is available to you under a choice of one of two |
6 | * licenses. You may choose to be licensed under the terms of the GNU |
7 | * General Public License (GPL) Version 2, available from the file |
8 | * COPYING in the main directory of this source tree, or the |
9 | * OpenIB.org BSD license below: |
10 | * |
11 | * Redistribution and use in source and binary forms, with or |
12 | * without modification, are permitted provided that the following |
13 | * conditions are met: |
14 | * |
15 | * - Redistributions of source code must retain the above |
16 | * copyright notice, this list of conditions and the following |
17 | * disclaimer. |
18 | * |
19 | * - Redistributions in binary form must reproduce the above |
20 | * copyright notice, this list of conditions and the following |
21 | * disclaimer in the documentation and/or other materials |
22 | * provided with the distribution. |
23 | * |
24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
25 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
26 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
27 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
28 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
29 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
30 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
31 | * SOFTWARE. |
32 | */ |
33 | |
34 | #ifndef _UAPI_LINUX_TLS_H |
35 | #define _UAPI_LINUX_TLS_H |
36 | |
37 | #include <linux/types.h> |
38 | |
39 | /* TLS socket options */ |
40 | #define TLS_TX 1 /* Set transmit parameters */ |
41 | #define TLS_RX 2 /* Set receive parameters */ |
42 | #define TLS_TX_ZEROCOPY_RO 3 /* TX zerocopy (only sendfile now) */ |
43 | #define TLS_RX_EXPECT_NO_PAD 4 /* Attempt opportunistic zero-copy */ |
44 | |
45 | /* Supported versions */ |
46 | #define TLS_VERSION_MINOR(ver) ((ver) & 0xFF) |
47 | #define TLS_VERSION_MAJOR(ver) (((ver) >> 8) & 0xFF) |
48 | |
49 | #define TLS_VERSION_NUMBER(id) ((((id##_VERSION_MAJOR) & 0xFF) << 8) | \ |
50 | ((id##_VERSION_MINOR) & 0xFF)) |
51 | |
52 | #define TLS_1_2_VERSION_MAJOR 0x3 |
53 | #define TLS_1_2_VERSION_MINOR 0x3 |
54 | #define TLS_1_2_VERSION TLS_VERSION_NUMBER(TLS_1_2) |
55 | |
56 | #define TLS_1_3_VERSION_MAJOR 0x3 |
57 | #define TLS_1_3_VERSION_MINOR 0x4 |
58 | #define TLS_1_3_VERSION TLS_VERSION_NUMBER(TLS_1_3) |
59 | |
60 | /* Supported ciphers */ |
61 | #define TLS_CIPHER_AES_GCM_128 51 |
62 | #define TLS_CIPHER_AES_GCM_128_IV_SIZE 8 |
63 | #define TLS_CIPHER_AES_GCM_128_KEY_SIZE 16 |
64 | #define TLS_CIPHER_AES_GCM_128_SALT_SIZE 4 |
65 | #define TLS_CIPHER_AES_GCM_128_TAG_SIZE 16 |
66 | #define TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE 8 |
67 | |
68 | #define TLS_CIPHER_AES_GCM_256 52 |
69 | #define TLS_CIPHER_AES_GCM_256_IV_SIZE 8 |
70 | #define TLS_CIPHER_AES_GCM_256_KEY_SIZE 32 |
71 | #define TLS_CIPHER_AES_GCM_256_SALT_SIZE 4 |
72 | #define TLS_CIPHER_AES_GCM_256_TAG_SIZE 16 |
73 | #define TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE 8 |
74 | |
75 | #define TLS_CIPHER_AES_CCM_128 53 |
76 | #define TLS_CIPHER_AES_CCM_128_IV_SIZE 8 |
77 | #define TLS_CIPHER_AES_CCM_128_KEY_SIZE 16 |
78 | #define TLS_CIPHER_AES_CCM_128_SALT_SIZE 4 |
79 | #define TLS_CIPHER_AES_CCM_128_TAG_SIZE 16 |
80 | #define TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE 8 |
81 | |
82 | #define TLS_CIPHER_CHACHA20_POLY1305 54 |
83 | #define TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE 12 |
84 | #define TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE 32 |
85 | #define TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE 0 |
86 | #define TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE 16 |
87 | #define TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE 8 |
88 | |
89 | #define TLS_CIPHER_SM4_GCM 55 |
90 | #define TLS_CIPHER_SM4_GCM_IV_SIZE 8 |
91 | #define TLS_CIPHER_SM4_GCM_KEY_SIZE 16 |
92 | #define TLS_CIPHER_SM4_GCM_SALT_SIZE 4 |
93 | #define TLS_CIPHER_SM4_GCM_TAG_SIZE 16 |
94 | #define TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE 8 |
95 | |
96 | #define TLS_CIPHER_SM4_CCM 56 |
97 | #define TLS_CIPHER_SM4_CCM_IV_SIZE 8 |
98 | #define TLS_CIPHER_SM4_CCM_KEY_SIZE 16 |
99 | #define TLS_CIPHER_SM4_CCM_SALT_SIZE 4 |
100 | #define TLS_CIPHER_SM4_CCM_TAG_SIZE 16 |
101 | #define TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE 8 |
102 | |
103 | #define TLS_CIPHER_ARIA_GCM_128 57 |
104 | #define TLS_CIPHER_ARIA_GCM_128_IV_SIZE 8 |
105 | #define TLS_CIPHER_ARIA_GCM_128_KEY_SIZE 16 |
106 | #define TLS_CIPHER_ARIA_GCM_128_SALT_SIZE 4 |
107 | #define TLS_CIPHER_ARIA_GCM_128_TAG_SIZE 16 |
108 | #define TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE 8 |
109 | |
110 | #define TLS_CIPHER_ARIA_GCM_256 58 |
111 | #define TLS_CIPHER_ARIA_GCM_256_IV_SIZE 8 |
112 | #define TLS_CIPHER_ARIA_GCM_256_KEY_SIZE 32 |
113 | #define TLS_CIPHER_ARIA_GCM_256_SALT_SIZE 4 |
114 | #define TLS_CIPHER_ARIA_GCM_256_TAG_SIZE 16 |
115 | #define TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE 8 |
116 | |
117 | #define TLS_SET_RECORD_TYPE 1 |
118 | #define TLS_GET_RECORD_TYPE 2 |
119 | |
120 | struct tls_crypto_info { |
121 | __u16 version; |
122 | __u16 cipher_type; |
123 | }; |
124 | |
125 | struct tls12_crypto_info_aes_gcm_128 { |
126 | struct tls_crypto_info info; |
127 | unsigned char iv[TLS_CIPHER_AES_GCM_128_IV_SIZE]; |
128 | unsigned char key[TLS_CIPHER_AES_GCM_128_KEY_SIZE]; |
129 | unsigned char salt[TLS_CIPHER_AES_GCM_128_SALT_SIZE]; |
130 | unsigned char rec_seq[TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE]; |
131 | }; |
132 | |
133 | struct tls12_crypto_info_aes_gcm_256 { |
134 | struct tls_crypto_info info; |
135 | unsigned char iv[TLS_CIPHER_AES_GCM_256_IV_SIZE]; |
136 | unsigned char key[TLS_CIPHER_AES_GCM_256_KEY_SIZE]; |
137 | unsigned char salt[TLS_CIPHER_AES_GCM_256_SALT_SIZE]; |
138 | unsigned char rec_seq[TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE]; |
139 | }; |
140 | |
141 | struct tls12_crypto_info_aes_ccm_128 { |
142 | struct tls_crypto_info info; |
143 | unsigned char iv[TLS_CIPHER_AES_CCM_128_IV_SIZE]; |
144 | unsigned char key[TLS_CIPHER_AES_CCM_128_KEY_SIZE]; |
145 | unsigned char salt[TLS_CIPHER_AES_CCM_128_SALT_SIZE]; |
146 | unsigned char rec_seq[TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE]; |
147 | }; |
148 | |
149 | struct tls12_crypto_info_chacha20_poly1305 { |
150 | struct tls_crypto_info info; |
151 | unsigned char iv[TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE]; |
152 | unsigned char key[TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE]; |
153 | unsigned char salt[TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE]; |
154 | unsigned char rec_seq[TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE]; |
155 | }; |
156 | |
157 | struct tls12_crypto_info_sm4_gcm { |
158 | struct tls_crypto_info info; |
159 | unsigned char iv[TLS_CIPHER_SM4_GCM_IV_SIZE]; |
160 | unsigned char key[TLS_CIPHER_SM4_GCM_KEY_SIZE]; |
161 | unsigned char salt[TLS_CIPHER_SM4_GCM_SALT_SIZE]; |
162 | unsigned char rec_seq[TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE]; |
163 | }; |
164 | |
165 | struct tls12_crypto_info_sm4_ccm { |
166 | struct tls_crypto_info info; |
167 | unsigned char iv[TLS_CIPHER_SM4_CCM_IV_SIZE]; |
168 | unsigned char key[TLS_CIPHER_SM4_CCM_KEY_SIZE]; |
169 | unsigned char salt[TLS_CIPHER_SM4_CCM_SALT_SIZE]; |
170 | unsigned char rec_seq[TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE]; |
171 | }; |
172 | |
173 | struct tls12_crypto_info_aria_gcm_128 { |
174 | struct tls_crypto_info info; |
175 | unsigned char iv[TLS_CIPHER_ARIA_GCM_128_IV_SIZE]; |
176 | unsigned char key[TLS_CIPHER_ARIA_GCM_128_KEY_SIZE]; |
177 | unsigned char salt[TLS_CIPHER_ARIA_GCM_128_SALT_SIZE]; |
178 | unsigned char rec_seq[TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE]; |
179 | }; |
180 | |
181 | struct tls12_crypto_info_aria_gcm_256 { |
182 | struct tls_crypto_info info; |
183 | unsigned char iv[TLS_CIPHER_ARIA_GCM_256_IV_SIZE]; |
184 | unsigned char key[TLS_CIPHER_ARIA_GCM_256_KEY_SIZE]; |
185 | unsigned char salt[TLS_CIPHER_ARIA_GCM_256_SALT_SIZE]; |
186 | unsigned char rec_seq[TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE]; |
187 | }; |
188 | |
189 | enum { |
190 | TLS_INFO_UNSPEC, |
191 | TLS_INFO_VERSION, |
192 | TLS_INFO_CIPHER, |
193 | TLS_INFO_TXCONF, |
194 | TLS_INFO_RXCONF, |
195 | TLS_INFO_ZC_RO_TX, |
196 | TLS_INFO_RX_NO_PAD, |
197 | __TLS_INFO_MAX, |
198 | }; |
199 | #define TLS_INFO_MAX (__TLS_INFO_MAX - 1) |
200 | |
201 | #define TLS_CONF_BASE 1 |
202 | #define TLS_CONF_SW 2 |
203 | #define TLS_CONF_HW 3 |
204 | #define TLS_CONF_HW_RECORD 4 |
205 | |
206 | #endif /* _UAPI_LINUX_TLS_H */ |
207 | |