1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #ifndef _UAPI_LINUX_TLS_H
35 #define _UAPI_LINUX_TLS_H
36
37 #include <linux/types.h>
38
39
40 #define TLS_TX 1
41 #define TLS_RX 2
42
43
44 #define TLS_VERSION_MINOR(ver) ((ver) & 0xFF)
45 #define TLS_VERSION_MAJOR(ver) (((ver) >> 8) & 0xFF)
46
47 #define TLS_VERSION_NUMBER(id) ((((id##_VERSION_MAJOR) & 0xFF) << 8) | \
48 ((id##_VERSION_MINOR) & 0xFF))
49
50 #define TLS_1_2_VERSION_MAJOR 0x3
51 #define TLS_1_2_VERSION_MINOR 0x3
52 #define TLS_1_2_VERSION TLS_VERSION_NUMBER(TLS_1_2)
53
54 #define TLS_1_3_VERSION_MAJOR 0x3
55 #define TLS_1_3_VERSION_MINOR 0x4
56 #define TLS_1_3_VERSION TLS_VERSION_NUMBER(TLS_1_3)
57
58
59 #define TLS_CIPHER_AES_GCM_128 51
60 #define TLS_CIPHER_AES_GCM_128_IV_SIZE 8
61 #define TLS_CIPHER_AES_GCM_128_KEY_SIZE 16
62 #define TLS_CIPHER_AES_GCM_128_SALT_SIZE 4
63 #define TLS_CIPHER_AES_GCM_128_TAG_SIZE 16
64 #define TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE 8
65
66 #define TLS_CIPHER_AES_GCM_256 52
67 #define TLS_CIPHER_AES_GCM_256_IV_SIZE 8
68 #define TLS_CIPHER_AES_GCM_256_KEY_SIZE 32
69 #define TLS_CIPHER_AES_GCM_256_SALT_SIZE 4
70 #define TLS_CIPHER_AES_GCM_256_TAG_SIZE 16
71 #define TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE 8
72
73 #define TLS_CIPHER_AES_CCM_128 53
74 #define TLS_CIPHER_AES_CCM_128_IV_SIZE 8
75 #define TLS_CIPHER_AES_CCM_128_KEY_SIZE 16
76 #define TLS_CIPHER_AES_CCM_128_SALT_SIZE 4
77 #define TLS_CIPHER_AES_CCM_128_TAG_SIZE 16
78 #define TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE 8
79
80 #define TLS_SET_RECORD_TYPE 1
81 #define TLS_GET_RECORD_TYPE 2
82
83 struct tls_crypto_info {
84 __u16 version;
85 __u16 cipher_type;
86 };
87
88 struct tls12_crypto_info_aes_gcm_128 {
89 struct tls_crypto_info info;
90 unsigned char iv[TLS_CIPHER_AES_GCM_128_IV_SIZE];
91 unsigned char key[TLS_CIPHER_AES_GCM_128_KEY_SIZE];
92 unsigned char salt[TLS_CIPHER_AES_GCM_128_SALT_SIZE];
93 unsigned char rec_seq[TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE];
94 };
95
96 struct tls12_crypto_info_aes_gcm_256 {
97 struct tls_crypto_info info;
98 unsigned char iv[TLS_CIPHER_AES_GCM_256_IV_SIZE];
99 unsigned char key[TLS_CIPHER_AES_GCM_256_KEY_SIZE];
100 unsigned char salt[TLS_CIPHER_AES_GCM_256_SALT_SIZE];
101 unsigned char rec_seq[TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE];
102 };
103
104 struct tls12_crypto_info_aes_ccm_128 {
105 struct tls_crypto_info info;
106 unsigned char iv[TLS_CIPHER_AES_CCM_128_IV_SIZE];
107 unsigned char key[TLS_CIPHER_AES_CCM_128_KEY_SIZE];
108 unsigned char salt[TLS_CIPHER_AES_CCM_128_SALT_SIZE];
109 unsigned char rec_seq[TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE];
110 };
111
112 enum {
113 TLS_INFO_UNSPEC,
114 TLS_INFO_VERSION,
115 TLS_INFO_CIPHER,
116 TLS_INFO_TXCONF,
117 TLS_INFO_RXCONF,
118 __TLS_INFO_MAX,
119 };
120 #define TLS_INFO_MAX (__TLS_INFO_MAX - 1)
121
122 #define TLS_CONF_BASE 1
123 #define TLS_CONF_SW 2
124 #define TLS_CONF_HW 3
125 #define TLS_CONF_HW_RECORD 4
126
127 #endif