| 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 |  | 
|---|