1 /*
2  * This file is auto-generated. Modifications will be lost.
3  *
4  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5  * for more information.
6  */
7 #ifndef _UAPI_LINUX_TLS_H
8 #define _UAPI_LINUX_TLS_H
9 #include <linux/types.h>
10 #define TLS_TX 1
11 #define TLS_RX 2
12 #define TLS_TX_ZEROCOPY_RO 3
13 #define TLS_RX_EXPECT_NO_PAD 4
14 #define TLS_VERSION_MINOR(ver) ((ver) & 0xFF)
15 #define TLS_VERSION_MAJOR(ver) (((ver) >> 8) & 0xFF)
16 #define TLS_VERSION_NUMBER(id) ((((id ##_VERSION_MAJOR) & 0xFF) << 8) | ((id ##_VERSION_MINOR) & 0xFF))
17 #define TLS_1_2_VERSION_MAJOR 0x3
18 #define TLS_1_2_VERSION_MINOR 0x3
19 #define TLS_1_2_VERSION TLS_VERSION_NUMBER(TLS_1_2)
20 #define TLS_1_3_VERSION_MAJOR 0x3
21 #define TLS_1_3_VERSION_MINOR 0x4
22 #define TLS_1_3_VERSION TLS_VERSION_NUMBER(TLS_1_3)
23 #define TLS_CIPHER_AES_GCM_128 51
24 #define TLS_CIPHER_AES_GCM_128_IV_SIZE 8
25 #define TLS_CIPHER_AES_GCM_128_KEY_SIZE 16
26 #define TLS_CIPHER_AES_GCM_128_SALT_SIZE 4
27 #define TLS_CIPHER_AES_GCM_128_TAG_SIZE 16
28 #define TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE 8
29 #define TLS_CIPHER_AES_GCM_256 52
30 #define TLS_CIPHER_AES_GCM_256_IV_SIZE 8
31 #define TLS_CIPHER_AES_GCM_256_KEY_SIZE 32
32 #define TLS_CIPHER_AES_GCM_256_SALT_SIZE 4
33 #define TLS_CIPHER_AES_GCM_256_TAG_SIZE 16
34 #define TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE 8
35 #define TLS_CIPHER_AES_CCM_128 53
36 #define TLS_CIPHER_AES_CCM_128_IV_SIZE 8
37 #define TLS_CIPHER_AES_CCM_128_KEY_SIZE 16
38 #define TLS_CIPHER_AES_CCM_128_SALT_SIZE 4
39 #define TLS_CIPHER_AES_CCM_128_TAG_SIZE 16
40 #define TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE 8
41 #define TLS_CIPHER_CHACHA20_POLY1305 54
42 #define TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE 12
43 #define TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE 32
44 #define TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE 0
45 #define TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE 16
46 #define TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE 8
47 #define TLS_CIPHER_SM4_GCM 55
48 #define TLS_CIPHER_SM4_GCM_IV_SIZE 8
49 #define TLS_CIPHER_SM4_GCM_KEY_SIZE 16
50 #define TLS_CIPHER_SM4_GCM_SALT_SIZE 4
51 #define TLS_CIPHER_SM4_GCM_TAG_SIZE 16
52 #define TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE 8
53 #define TLS_CIPHER_SM4_CCM 56
54 #define TLS_CIPHER_SM4_CCM_IV_SIZE 8
55 #define TLS_CIPHER_SM4_CCM_KEY_SIZE 16
56 #define TLS_CIPHER_SM4_CCM_SALT_SIZE 4
57 #define TLS_CIPHER_SM4_CCM_TAG_SIZE 16
58 #define TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE 8
59 #define TLS_CIPHER_ARIA_GCM_128 57
60 #define TLS_CIPHER_ARIA_GCM_128_IV_SIZE 8
61 #define TLS_CIPHER_ARIA_GCM_128_KEY_SIZE 16
62 #define TLS_CIPHER_ARIA_GCM_128_SALT_SIZE 4
63 #define TLS_CIPHER_ARIA_GCM_128_TAG_SIZE 16
64 #define TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE 8
65 #define TLS_CIPHER_ARIA_GCM_256 58
66 #define TLS_CIPHER_ARIA_GCM_256_IV_SIZE 8
67 #define TLS_CIPHER_ARIA_GCM_256_KEY_SIZE 32
68 #define TLS_CIPHER_ARIA_GCM_256_SALT_SIZE 4
69 #define TLS_CIPHER_ARIA_GCM_256_TAG_SIZE 16
70 #define TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE 8
71 #define TLS_SET_RECORD_TYPE 1
72 #define TLS_GET_RECORD_TYPE 2
73 struct tls_crypto_info {
74   __u16 version;
75   __u16 cipher_type;
76 };
77 struct tls12_crypto_info_aes_gcm_128 {
78   struct tls_crypto_info info;
79   unsigned char iv[TLS_CIPHER_AES_GCM_128_IV_SIZE];
80   unsigned char key[TLS_CIPHER_AES_GCM_128_KEY_SIZE];
81   unsigned char salt[TLS_CIPHER_AES_GCM_128_SALT_SIZE];
82   unsigned char rec_seq[TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE];
83 };
84 struct tls12_crypto_info_aes_gcm_256 {
85   struct tls_crypto_info info;
86   unsigned char iv[TLS_CIPHER_AES_GCM_256_IV_SIZE];
87   unsigned char key[TLS_CIPHER_AES_GCM_256_KEY_SIZE];
88   unsigned char salt[TLS_CIPHER_AES_GCM_256_SALT_SIZE];
89   unsigned char rec_seq[TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE];
90 };
91 struct tls12_crypto_info_aes_ccm_128 {
92   struct tls_crypto_info info;
93   unsigned char iv[TLS_CIPHER_AES_CCM_128_IV_SIZE];
94   unsigned char key[TLS_CIPHER_AES_CCM_128_KEY_SIZE];
95   unsigned char salt[TLS_CIPHER_AES_CCM_128_SALT_SIZE];
96   unsigned char rec_seq[TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE];
97 };
98 struct tls12_crypto_info_chacha20_poly1305 {
99   struct tls_crypto_info info;
100   unsigned char iv[TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE];
101   unsigned char key[TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE];
102   unsigned char salt[TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE];
103   unsigned char rec_seq[TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE];
104 };
105 struct tls12_crypto_info_sm4_gcm {
106   struct tls_crypto_info info;
107   unsigned char iv[TLS_CIPHER_SM4_GCM_IV_SIZE];
108   unsigned char key[TLS_CIPHER_SM4_GCM_KEY_SIZE];
109   unsigned char salt[TLS_CIPHER_SM4_GCM_SALT_SIZE];
110   unsigned char rec_seq[TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE];
111 };
112 struct tls12_crypto_info_sm4_ccm {
113   struct tls_crypto_info info;
114   unsigned char iv[TLS_CIPHER_SM4_CCM_IV_SIZE];
115   unsigned char key[TLS_CIPHER_SM4_CCM_KEY_SIZE];
116   unsigned char salt[TLS_CIPHER_SM4_CCM_SALT_SIZE];
117   unsigned char rec_seq[TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE];
118 };
119 struct tls12_crypto_info_aria_gcm_128 {
120   struct tls_crypto_info info;
121   unsigned char iv[TLS_CIPHER_ARIA_GCM_128_IV_SIZE];
122   unsigned char key[TLS_CIPHER_ARIA_GCM_128_KEY_SIZE];
123   unsigned char salt[TLS_CIPHER_ARIA_GCM_128_SALT_SIZE];
124   unsigned char rec_seq[TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE];
125 };
126 struct tls12_crypto_info_aria_gcm_256 {
127   struct tls_crypto_info info;
128   unsigned char iv[TLS_CIPHER_ARIA_GCM_256_IV_SIZE];
129   unsigned char key[TLS_CIPHER_ARIA_GCM_256_KEY_SIZE];
130   unsigned char salt[TLS_CIPHER_ARIA_GCM_256_SALT_SIZE];
131   unsigned char rec_seq[TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE];
132 };
133 enum {
134   TLS_INFO_UNSPEC,
135   TLS_INFO_VERSION,
136   TLS_INFO_CIPHER,
137   TLS_INFO_TXCONF,
138   TLS_INFO_RXCONF,
139   TLS_INFO_ZC_RO_TX,
140   TLS_INFO_RX_NO_PAD,
141   __TLS_INFO_MAX,
142 };
143 #define TLS_INFO_MAX (__TLS_INFO_MAX - 1)
144 #define TLS_CONF_BASE 1
145 #define TLS_CONF_SW 2
146 #define TLS_CONF_HW 3
147 #define TLS_CONF_HW_RECORD 4
148 #endif
149