xref: /linux/include/uapi/linux/tls.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1d50e14abSJason Gunthorpe /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
23c4d7559SDave Watson /*
33c4d7559SDave Watson  * Copyright (c) 2016-2017, Mellanox Technologies. All rights reserved.
43c4d7559SDave Watson  *
53c4d7559SDave Watson  * This software is available to you under a choice of one of two
63c4d7559SDave Watson  * licenses.  You may choose to be licensed under the terms of the GNU
73c4d7559SDave Watson  * General Public License (GPL) Version 2, available from the file
83c4d7559SDave Watson  * COPYING in the main directory of this source tree, or the
93c4d7559SDave Watson  * OpenIB.org BSD license below:
103c4d7559SDave Watson  *
113c4d7559SDave Watson  *     Redistribution and use in source and binary forms, with or
123c4d7559SDave Watson  *     without modification, are permitted provided that the following
133c4d7559SDave Watson  *     conditions are met:
143c4d7559SDave Watson  *
153c4d7559SDave Watson  *      - Redistributions of source code must retain the above
163c4d7559SDave Watson  *        copyright notice, this list of conditions and the following
173c4d7559SDave Watson  *        disclaimer.
183c4d7559SDave Watson  *
193c4d7559SDave Watson  *      - Redistributions in binary form must reproduce the above
203c4d7559SDave Watson  *        copyright notice, this list of conditions and the following
213c4d7559SDave Watson  *        disclaimer in the documentation and/or other materials
223c4d7559SDave Watson  *        provided with the distribution.
233c4d7559SDave Watson  *
243c4d7559SDave Watson  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
253c4d7559SDave Watson  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
263c4d7559SDave Watson  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
273c4d7559SDave Watson  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
283c4d7559SDave Watson  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
293c4d7559SDave Watson  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
303c4d7559SDave Watson  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
313c4d7559SDave Watson  * SOFTWARE.
323c4d7559SDave Watson  */
333c4d7559SDave Watson 
343c4d7559SDave Watson #ifndef _UAPI_LINUX_TLS_H
353c4d7559SDave Watson #define _UAPI_LINUX_TLS_H
363c4d7559SDave Watson 
373c4d7559SDave Watson #include <linux/types.h>
383c4d7559SDave Watson 
393c4d7559SDave Watson /* TLS socket options */
403c4d7559SDave Watson #define TLS_TX			1	/* Set transmit parameters */
41c46234ebSDave Watson #define TLS_RX			2	/* Set receive parameters */
42b489a6e5SMaxim Mikityanskiy #define TLS_TX_ZEROCOPY_RO	3	/* TX zerocopy (only sendfile now) */
4388527790SJakub Kicinski #define TLS_RX_EXPECT_NO_PAD	4	/* Attempt opportunistic zero-copy */
443c4d7559SDave Watson 
453c4d7559SDave Watson /* Supported versions */
463c4d7559SDave Watson #define TLS_VERSION_MINOR(ver)	((ver) & 0xFF)
473c4d7559SDave Watson #define TLS_VERSION_MAJOR(ver)	(((ver) >> 8) & 0xFF)
483c4d7559SDave Watson 
493c4d7559SDave Watson #define TLS_VERSION_NUMBER(id)	((((id##_VERSION_MAJOR) & 0xFF) << 8) |	\
503c4d7559SDave Watson 				 ((id##_VERSION_MINOR) & 0xFF))
513c4d7559SDave Watson 
523c4d7559SDave Watson #define TLS_1_2_VERSION_MAJOR	0x3
533c4d7559SDave Watson #define TLS_1_2_VERSION_MINOR	0x3
543c4d7559SDave Watson #define TLS_1_2_VERSION		TLS_VERSION_NUMBER(TLS_1_2)
553c4d7559SDave Watson 
56130b392cSDave Watson #define TLS_1_3_VERSION_MAJOR	0x3
57130b392cSDave Watson #define TLS_1_3_VERSION_MINOR	0x4
58130b392cSDave Watson #define TLS_1_3_VERSION		TLS_VERSION_NUMBER(TLS_1_3)
59130b392cSDave Watson 
603c4d7559SDave Watson /* Supported ciphers */
613c4d7559SDave Watson #define TLS_CIPHER_AES_GCM_128				51
623c4d7559SDave Watson #define TLS_CIPHER_AES_GCM_128_IV_SIZE			8
633c4d7559SDave Watson #define TLS_CIPHER_AES_GCM_128_KEY_SIZE		16
643c4d7559SDave Watson #define TLS_CIPHER_AES_GCM_128_SALT_SIZE		4
653c4d7559SDave Watson #define TLS_CIPHER_AES_GCM_128_TAG_SIZE		16
663c4d7559SDave Watson #define TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE		8
673c4d7559SDave Watson 
68fb99bce7SDave Watson #define TLS_CIPHER_AES_GCM_256				52
69fb99bce7SDave Watson #define TLS_CIPHER_AES_GCM_256_IV_SIZE			8
70fb99bce7SDave Watson #define TLS_CIPHER_AES_GCM_256_KEY_SIZE		32
71fb99bce7SDave Watson #define TLS_CIPHER_AES_GCM_256_SALT_SIZE		4
72fb99bce7SDave Watson #define TLS_CIPHER_AES_GCM_256_TAG_SIZE		16
73fb99bce7SDave Watson #define TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE		8
74fb99bce7SDave Watson 
75f295b3aeSVakul Garg #define TLS_CIPHER_AES_CCM_128				53
76f295b3aeSVakul Garg #define TLS_CIPHER_AES_CCM_128_IV_SIZE			8
77f295b3aeSVakul Garg #define TLS_CIPHER_AES_CCM_128_KEY_SIZE		16
78f295b3aeSVakul Garg #define TLS_CIPHER_AES_CCM_128_SALT_SIZE		4
79f295b3aeSVakul Garg #define TLS_CIPHER_AES_CCM_128_TAG_SIZE		16
80f295b3aeSVakul Garg #define TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE		8
81f295b3aeSVakul Garg 
82923c40c4SVadim Fedorenko #define TLS_CIPHER_CHACHA20_POLY1305			54
83923c40c4SVadim Fedorenko #define TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE		12
84923c40c4SVadim Fedorenko #define TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE	32
85923c40c4SVadim Fedorenko #define TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE		0
86923c40c4SVadim Fedorenko #define TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE	16
87923c40c4SVadim Fedorenko #define TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE	8
88923c40c4SVadim Fedorenko 
89227b9644STianjia Zhang #define TLS_CIPHER_SM4_GCM				55
90227b9644STianjia Zhang #define TLS_CIPHER_SM4_GCM_IV_SIZE			8
91227b9644STianjia Zhang #define TLS_CIPHER_SM4_GCM_KEY_SIZE		16
92227b9644STianjia Zhang #define TLS_CIPHER_SM4_GCM_SALT_SIZE		4
93227b9644STianjia Zhang #define TLS_CIPHER_SM4_GCM_TAG_SIZE		16
94227b9644STianjia Zhang #define TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE		8
95227b9644STianjia Zhang 
96227b9644STianjia Zhang #define TLS_CIPHER_SM4_CCM				56
97227b9644STianjia Zhang #define TLS_CIPHER_SM4_CCM_IV_SIZE			8
98227b9644STianjia Zhang #define TLS_CIPHER_SM4_CCM_KEY_SIZE		16
99227b9644STianjia Zhang #define TLS_CIPHER_SM4_CCM_SALT_SIZE		4
100227b9644STianjia Zhang #define TLS_CIPHER_SM4_CCM_TAG_SIZE		16
101227b9644STianjia Zhang #define TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE		8
102227b9644STianjia Zhang 
103*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_128				57
104*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_128_IV_SIZE			8
105*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_128_KEY_SIZE		16
106*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_128_SALT_SIZE		4
107*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_128_TAG_SIZE		16
108*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE		8
109*62e56ef5STaehee Yoo 
110*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_256				58
111*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_256_IV_SIZE			8
112*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_256_KEY_SIZE		32
113*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_256_SALT_SIZE		4
114*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_256_TAG_SIZE		16
115*62e56ef5STaehee Yoo #define TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE		8
116*62e56ef5STaehee Yoo 
1173c4d7559SDave Watson #define TLS_SET_RECORD_TYPE	1
118c46234ebSDave Watson #define TLS_GET_RECORD_TYPE	2
1193c4d7559SDave Watson 
1203c4d7559SDave Watson struct tls_crypto_info {
1213c4d7559SDave Watson 	__u16 version;
1223c4d7559SDave Watson 	__u16 cipher_type;
1233c4d7559SDave Watson };
1243c4d7559SDave Watson 
1253c4d7559SDave Watson struct tls12_crypto_info_aes_gcm_128 {
1263c4d7559SDave Watson 	struct tls_crypto_info info;
1273c4d7559SDave Watson 	unsigned char iv[TLS_CIPHER_AES_GCM_128_IV_SIZE];
1283c4d7559SDave Watson 	unsigned char key[TLS_CIPHER_AES_GCM_128_KEY_SIZE];
1293c4d7559SDave Watson 	unsigned char salt[TLS_CIPHER_AES_GCM_128_SALT_SIZE];
1303c4d7559SDave Watson 	unsigned char rec_seq[TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE];
1313c4d7559SDave Watson };
1323c4d7559SDave Watson 
133fb99bce7SDave Watson struct tls12_crypto_info_aes_gcm_256 {
134fb99bce7SDave Watson 	struct tls_crypto_info info;
135fb99bce7SDave Watson 	unsigned char iv[TLS_CIPHER_AES_GCM_256_IV_SIZE];
136fb99bce7SDave Watson 	unsigned char key[TLS_CIPHER_AES_GCM_256_KEY_SIZE];
137fb99bce7SDave Watson 	unsigned char salt[TLS_CIPHER_AES_GCM_256_SALT_SIZE];
138fb99bce7SDave Watson 	unsigned char rec_seq[TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE];
139fb99bce7SDave Watson };
140fb99bce7SDave Watson 
141f295b3aeSVakul Garg struct tls12_crypto_info_aes_ccm_128 {
142f295b3aeSVakul Garg 	struct tls_crypto_info info;
143f295b3aeSVakul Garg 	unsigned char iv[TLS_CIPHER_AES_CCM_128_IV_SIZE];
144f295b3aeSVakul Garg 	unsigned char key[TLS_CIPHER_AES_CCM_128_KEY_SIZE];
145f295b3aeSVakul Garg 	unsigned char salt[TLS_CIPHER_AES_CCM_128_SALT_SIZE];
146f295b3aeSVakul Garg 	unsigned char rec_seq[TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE];
147f295b3aeSVakul Garg };
148f295b3aeSVakul Garg 
149923c40c4SVadim Fedorenko struct tls12_crypto_info_chacha20_poly1305 {
150923c40c4SVadim Fedorenko 	struct tls_crypto_info info;
151923c40c4SVadim Fedorenko 	unsigned char iv[TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE];
152923c40c4SVadim Fedorenko 	unsigned char key[TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE];
153923c40c4SVadim Fedorenko 	unsigned char salt[TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE];
154923c40c4SVadim Fedorenko 	unsigned char rec_seq[TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE];
155923c40c4SVadim Fedorenko };
156923c40c4SVadim Fedorenko 
157227b9644STianjia Zhang struct tls12_crypto_info_sm4_gcm {
158227b9644STianjia Zhang 	struct tls_crypto_info info;
159227b9644STianjia Zhang 	unsigned char iv[TLS_CIPHER_SM4_GCM_IV_SIZE];
160227b9644STianjia Zhang 	unsigned char key[TLS_CIPHER_SM4_GCM_KEY_SIZE];
161227b9644STianjia Zhang 	unsigned char salt[TLS_CIPHER_SM4_GCM_SALT_SIZE];
162227b9644STianjia Zhang 	unsigned char rec_seq[TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE];
163227b9644STianjia Zhang };
164227b9644STianjia Zhang 
165227b9644STianjia Zhang struct tls12_crypto_info_sm4_ccm {
166227b9644STianjia Zhang 	struct tls_crypto_info info;
167227b9644STianjia Zhang 	unsigned char iv[TLS_CIPHER_SM4_CCM_IV_SIZE];
168227b9644STianjia Zhang 	unsigned char key[TLS_CIPHER_SM4_CCM_KEY_SIZE];
169227b9644STianjia Zhang 	unsigned char salt[TLS_CIPHER_SM4_CCM_SALT_SIZE];
170227b9644STianjia Zhang 	unsigned char rec_seq[TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE];
171227b9644STianjia Zhang };
172227b9644STianjia Zhang 
173*62e56ef5STaehee Yoo struct tls12_crypto_info_aria_gcm_128 {
174*62e56ef5STaehee Yoo 	struct tls_crypto_info info;
175*62e56ef5STaehee Yoo 	unsigned char iv[TLS_CIPHER_ARIA_GCM_128_IV_SIZE];
176*62e56ef5STaehee Yoo 	unsigned char key[TLS_CIPHER_ARIA_GCM_128_KEY_SIZE];
177*62e56ef5STaehee Yoo 	unsigned char salt[TLS_CIPHER_ARIA_GCM_128_SALT_SIZE];
178*62e56ef5STaehee Yoo 	unsigned char rec_seq[TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE];
179*62e56ef5STaehee Yoo };
180*62e56ef5STaehee Yoo 
181*62e56ef5STaehee Yoo struct tls12_crypto_info_aria_gcm_256 {
182*62e56ef5STaehee Yoo 	struct tls_crypto_info info;
183*62e56ef5STaehee Yoo 	unsigned char iv[TLS_CIPHER_ARIA_GCM_256_IV_SIZE];
184*62e56ef5STaehee Yoo 	unsigned char key[TLS_CIPHER_ARIA_GCM_256_KEY_SIZE];
185*62e56ef5STaehee Yoo 	unsigned char salt[TLS_CIPHER_ARIA_GCM_256_SALT_SIZE];
186*62e56ef5STaehee Yoo 	unsigned char rec_seq[TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE];
187*62e56ef5STaehee Yoo };
188*62e56ef5STaehee Yoo 
18926811cc9SDavide Caratti enum {
19026811cc9SDavide Caratti 	TLS_INFO_UNSPEC,
19126811cc9SDavide Caratti 	TLS_INFO_VERSION,
19226811cc9SDavide Caratti 	TLS_INFO_CIPHER,
19326811cc9SDavide Caratti 	TLS_INFO_TXCONF,
19426811cc9SDavide Caratti 	TLS_INFO_RXCONF,
195b489a6e5SMaxim Mikityanskiy 	TLS_INFO_ZC_RO_TX,
19688527790SJakub Kicinski 	TLS_INFO_RX_NO_PAD,
19726811cc9SDavide Caratti 	__TLS_INFO_MAX,
19826811cc9SDavide Caratti };
19926811cc9SDavide Caratti #define TLS_INFO_MAX (__TLS_INFO_MAX - 1)
20026811cc9SDavide Caratti 
20126811cc9SDavide Caratti #define TLS_CONF_BASE 1
20226811cc9SDavide Caratti #define TLS_CONF_SW 2
20326811cc9SDavide Caratti #define TLS_CONF_HW 3
20426811cc9SDavide Caratti #define TLS_CONF_HW_RECORD 4
20526811cc9SDavide Caratti 
2063c4d7559SDave Watson #endif /* _UAPI_LINUX_TLS_H */
207