207 lines · c
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 two6 * licenses. You may choose to be licensed under the terms of the GNU7 * General Public License (GPL) Version 2, available from the file8 * COPYING in the main directory of this source tree, or the9 * OpenIB.org BSD license below:10 *11 * Redistribution and use in source and binary forms, with or12 * without modification, are permitted provided that the following13 * conditions are met:14 *15 * - Redistributions of source code must retain the above16 * copyright notice, this list of conditions and the following17 * disclaimer.18 *19 * - Redistributions in binary form must reproduce the above20 * copyright notice, this list of conditions and the following21 * disclaimer in the documentation and/or other materials22 * 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 OF26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE31 * SOFTWARE.32 */33 34#ifndef _UAPI_LINUX_TLS_H35#define _UAPI_LINUX_TLS_H36 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 0x353#define TLS_1_2_VERSION_MINOR 0x354#define TLS_1_2_VERSION TLS_VERSION_NUMBER(TLS_1_2)55 56#define TLS_1_3_VERSION_MAJOR 0x357#define TLS_1_3_VERSION_MINOR 0x458#define TLS_1_3_VERSION TLS_VERSION_NUMBER(TLS_1_3)59 60/* Supported ciphers */61#define TLS_CIPHER_AES_GCM_128 5162#define TLS_CIPHER_AES_GCM_128_IV_SIZE 863#define TLS_CIPHER_AES_GCM_128_KEY_SIZE 1664#define TLS_CIPHER_AES_GCM_128_SALT_SIZE 465#define TLS_CIPHER_AES_GCM_128_TAG_SIZE 1666#define TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE 867 68#define TLS_CIPHER_AES_GCM_256 5269#define TLS_CIPHER_AES_GCM_256_IV_SIZE 870#define TLS_CIPHER_AES_GCM_256_KEY_SIZE 3271#define TLS_CIPHER_AES_GCM_256_SALT_SIZE 472#define TLS_CIPHER_AES_GCM_256_TAG_SIZE 1673#define TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE 874 75#define TLS_CIPHER_AES_CCM_128 5376#define TLS_CIPHER_AES_CCM_128_IV_SIZE 877#define TLS_CIPHER_AES_CCM_128_KEY_SIZE 1678#define TLS_CIPHER_AES_CCM_128_SALT_SIZE 479#define TLS_CIPHER_AES_CCM_128_TAG_SIZE 1680#define TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE 881 82#define TLS_CIPHER_CHACHA20_POLY1305 5483#define TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE 1284#define TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE 3285#define TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE 086#define TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE 1687#define TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE 888 89#define TLS_CIPHER_SM4_GCM 5590#define TLS_CIPHER_SM4_GCM_IV_SIZE 891#define TLS_CIPHER_SM4_GCM_KEY_SIZE 1692#define TLS_CIPHER_SM4_GCM_SALT_SIZE 493#define TLS_CIPHER_SM4_GCM_TAG_SIZE 1694#define TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE 895 96#define TLS_CIPHER_SM4_CCM 5697#define TLS_CIPHER_SM4_CCM_IV_SIZE 898#define TLS_CIPHER_SM4_CCM_KEY_SIZE 1699#define TLS_CIPHER_SM4_CCM_SALT_SIZE 4100#define TLS_CIPHER_SM4_CCM_TAG_SIZE 16101#define TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE 8102 103#define TLS_CIPHER_ARIA_GCM_128 57104#define TLS_CIPHER_ARIA_GCM_128_IV_SIZE 8105#define TLS_CIPHER_ARIA_GCM_128_KEY_SIZE 16106#define TLS_CIPHER_ARIA_GCM_128_SALT_SIZE 4107#define TLS_CIPHER_ARIA_GCM_128_TAG_SIZE 16108#define TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE 8109 110#define TLS_CIPHER_ARIA_GCM_256 58111#define TLS_CIPHER_ARIA_GCM_256_IV_SIZE 8112#define TLS_CIPHER_ARIA_GCM_256_KEY_SIZE 32113#define TLS_CIPHER_ARIA_GCM_256_SALT_SIZE 4114#define TLS_CIPHER_ARIA_GCM_256_TAG_SIZE 16115#define TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE 8116 117#define TLS_SET_RECORD_TYPE 1118#define TLS_GET_RECORD_TYPE 2119 120struct tls_crypto_info {121 __u16 version;122 __u16 cipher_type;123};124 125struct 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 133struct 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 141struct 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 149struct 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 157struct 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 165struct 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 173struct 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 181struct 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 189enum {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 1202#define TLS_CONF_SW 2203#define TLS_CONF_HW 3204#define TLS_CONF_HW_RECORD 4205 206#endif /* _UAPI_LINUX_TLS_H */207