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