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