Skip to main content

libc/new/linux_uapi/linux/
tls.rs

1//! Header: `uapi/linux/tls.h`
2
3use crate::prelude::*;
4use crate::{
5    __u16,
6    __u8,
7};
8
9pub const TLS_TX: c_int = 1;
10pub const TLS_RX: c_int = 2;
11pub const TLS_TX_ZEROCOPY_RO: c_int = 3;
12pub const TLS_RX_EXPECT_NO_PAD: c_int = 4;
13
14pub const TLS_1_2_VERSION_MAJOR: __u8 = 0x3;
15pub const TLS_1_2_VERSION_MINOR: __u8 = 0x3;
16pub const TLS_1_2_VERSION: __u16 =
17    ((TLS_1_2_VERSION_MAJOR as __u16) << 8) | (TLS_1_2_VERSION_MINOR as __u16);
18
19pub const TLS_1_3_VERSION_MAJOR: __u8 = 0x3;
20pub const TLS_1_3_VERSION_MINOR: __u8 = 0x4;
21pub const TLS_1_3_VERSION: __u16 =
22    ((TLS_1_3_VERSION_MAJOR as __u16) << 8) | (TLS_1_3_VERSION_MINOR as __u16);
23
24pub const TLS_CIPHER_AES_GCM_128: __u16 = 51;
25pub const TLS_CIPHER_AES_GCM_128_IV_SIZE: usize = 8;
26pub const TLS_CIPHER_AES_GCM_128_KEY_SIZE: usize = 16;
27pub const TLS_CIPHER_AES_GCM_128_SALT_SIZE: usize = 4;
28pub const TLS_CIPHER_AES_GCM_128_TAG_SIZE: usize = 16;
29pub const TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE: usize = 8;
30
31pub const TLS_CIPHER_AES_GCM_256: __u16 = 52;
32pub const TLS_CIPHER_AES_GCM_256_IV_SIZE: usize = 8;
33pub const TLS_CIPHER_AES_GCM_256_KEY_SIZE: usize = 32;
34pub const TLS_CIPHER_AES_GCM_256_SALT_SIZE: usize = 4;
35pub const TLS_CIPHER_AES_GCM_256_TAG_SIZE: usize = 16;
36pub const TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE: usize = 8;
37
38pub const TLS_CIPHER_AES_CCM_128: __u16 = 53;
39pub const TLS_CIPHER_AES_CCM_128_IV_SIZE: usize = 8;
40pub const TLS_CIPHER_AES_CCM_128_KEY_SIZE: usize = 16;
41pub const TLS_CIPHER_AES_CCM_128_SALT_SIZE: usize = 4;
42pub const TLS_CIPHER_AES_CCM_128_TAG_SIZE: usize = 16;
43pub const TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE: usize = 8;
44
45pub const TLS_CIPHER_CHACHA20_POLY1305: __u16 = 54;
46pub const TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE: usize = 12;
47pub const TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE: usize = 32;
48pub const TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE: usize = 0;
49pub const TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE: usize = 16;
50pub const TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE: usize = 8;
51
52pub const TLS_CIPHER_SM4_GCM: __u16 = 55;
53pub const TLS_CIPHER_SM4_GCM_IV_SIZE: usize = 8;
54pub const TLS_CIPHER_SM4_GCM_KEY_SIZE: usize = 16;
55pub const TLS_CIPHER_SM4_GCM_SALT_SIZE: usize = 4;
56pub const TLS_CIPHER_SM4_GCM_TAG_SIZE: usize = 16;
57pub const TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE: usize = 8;
58
59pub const TLS_CIPHER_SM4_CCM: __u16 = 56;
60pub const TLS_CIPHER_SM4_CCM_IV_SIZE: usize = 8;
61pub const TLS_CIPHER_SM4_CCM_KEY_SIZE: usize = 16;
62pub const TLS_CIPHER_SM4_CCM_SALT_SIZE: usize = 4;
63pub const TLS_CIPHER_SM4_CCM_TAG_SIZE: usize = 16;
64pub const TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE: usize = 8;
65
66pub const TLS_CIPHER_ARIA_GCM_128: __u16 = 57;
67pub const TLS_CIPHER_ARIA_GCM_128_IV_SIZE: usize = 8;
68pub const TLS_CIPHER_ARIA_GCM_128_KEY_SIZE: usize = 16;
69pub const TLS_CIPHER_ARIA_GCM_128_SALT_SIZE: usize = 4;
70pub const TLS_CIPHER_ARIA_GCM_128_TAG_SIZE: usize = 16;
71pub const TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE: usize = 8;
72
73pub const TLS_CIPHER_ARIA_GCM_256: __u16 = 58;
74pub const TLS_CIPHER_ARIA_GCM_256_IV_SIZE: usize = 8;
75pub const TLS_CIPHER_ARIA_GCM_256_KEY_SIZE: usize = 32;
76pub const TLS_CIPHER_ARIA_GCM_256_SALT_SIZE: usize = 4;
77pub const TLS_CIPHER_ARIA_GCM_256_TAG_SIZE: usize = 16;
78pub const TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE: usize = 8;
79
80pub const TLS_SET_RECORD_TYPE: c_int = 1;
81pub const TLS_GET_RECORD_TYPE: c_int = 2;
82
83#[automatically_derived]
#[allow(deprecated)]
impl ::core::clone::Clone for tls12_crypto_info_aria_gcm_256 {
    #[inline]
    fn clone(&self) -> tls12_crypto_info_aria_gcm_256 {
        let _: ::core::clone::AssertParamIsClone<tls_crypto_info>;
        let _:
                ::core::clone::AssertParamIsClone<[c_uchar; TLS_CIPHER_ARIA_GCM_256_IV_SIZE]>;
        let _:
                ::core::clone::AssertParamIsClone<[c_uchar; TLS_CIPHER_ARIA_GCM_256_KEY_SIZE]>;
        let _:
                ::core::clone::AssertParamIsClone<[c_uchar; TLS_CIPHER_ARIA_GCM_256_SALT_SIZE]>;
        let _:
                ::core::clone::AssertParamIsClone<[c_uchar; TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE]>;
        *self
    }
}
#[automatically_derived]
#[allow(deprecated)]
impl ::core::marker::Copy for tls12_crypto_info_aria_gcm_256 { }
#[automatically_derived]
#[allow(deprecated)]
impl ::core::fmt::Debug for tls12_crypto_info_aria_gcm_256 {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field5_finish(f,
            "tls12_crypto_info_aria_gcm_256", "info", &self.info, "iv",
            &self.iv, "key", &self.key, "salt", &self.salt, "rec_seq",
            &&self.rec_seq)
    }
}s! {
84    pub struct tls_crypto_info {
85        pub version: __u16,
86        pub cipher_type: __u16,
87    }
88
89    pub struct tls12_crypto_info_aes_gcm_128 {
90        pub info: tls_crypto_info,
91        pub iv: [c_uchar; TLS_CIPHER_AES_GCM_128_IV_SIZE],
92        pub key: [c_uchar; TLS_CIPHER_AES_GCM_128_KEY_SIZE],
93        pub salt: [c_uchar; TLS_CIPHER_AES_GCM_128_SALT_SIZE],
94        pub rec_seq: [c_uchar; TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE],
95    }
96
97    pub struct tls12_crypto_info_aes_gcm_256 {
98        pub info: tls_crypto_info,
99        pub iv: [c_uchar; TLS_CIPHER_AES_GCM_256_IV_SIZE],
100        pub key: [c_uchar; TLS_CIPHER_AES_GCM_256_KEY_SIZE],
101        pub salt: [c_uchar; TLS_CIPHER_AES_GCM_256_SALT_SIZE],
102        pub rec_seq: [c_uchar; TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE],
103    }
104
105    pub struct tls12_crypto_info_aes_ccm_128 {
106        pub info: tls_crypto_info,
107        pub iv: [c_uchar; TLS_CIPHER_AES_CCM_128_IV_SIZE],
108        pub key: [c_uchar; TLS_CIPHER_AES_CCM_128_KEY_SIZE],
109        pub salt: [c_uchar; TLS_CIPHER_AES_CCM_128_SALT_SIZE],
110        pub rec_seq: [c_uchar; TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE],
111    }
112
113    pub struct tls12_crypto_info_chacha20_poly1305 {
114        pub info: tls_crypto_info,
115        pub iv: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE],
116        pub key: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE],
117        pub salt: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE],
118        pub rec_seq: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE],
119    }
120
121    pub struct tls12_crypto_info_sm4_gcm {
122        pub info: tls_crypto_info,
123        pub iv: [c_uchar; TLS_CIPHER_SM4_GCM_IV_SIZE],
124        pub key: [c_uchar; TLS_CIPHER_SM4_GCM_KEY_SIZE],
125        pub salt: [c_uchar; TLS_CIPHER_SM4_GCM_SALT_SIZE],
126        pub rec_seq: [c_uchar; TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE],
127    }
128
129    pub struct tls12_crypto_info_sm4_ccm {
130        pub info: tls_crypto_info,
131        pub iv: [c_uchar; TLS_CIPHER_SM4_CCM_IV_SIZE],
132        pub key: [c_uchar; TLS_CIPHER_SM4_CCM_KEY_SIZE],
133        pub salt: [c_uchar; TLS_CIPHER_SM4_CCM_SALT_SIZE],
134        pub rec_seq: [c_uchar; TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE],
135    }
136
137    pub struct tls12_crypto_info_aria_gcm_128 {
138        pub info: tls_crypto_info,
139        pub iv: [c_uchar; TLS_CIPHER_ARIA_GCM_128_IV_SIZE],
140        pub key: [c_uchar; TLS_CIPHER_ARIA_GCM_128_KEY_SIZE],
141        pub salt: [c_uchar; TLS_CIPHER_ARIA_GCM_128_SALT_SIZE],
142        pub rec_seq: [c_uchar; TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE],
143    }
144
145    pub struct tls12_crypto_info_aria_gcm_256 {
146        pub info: tls_crypto_info,
147        pub iv: [c_uchar; TLS_CIPHER_ARIA_GCM_256_IV_SIZE],
148        pub key: [c_uchar; TLS_CIPHER_ARIA_GCM_256_KEY_SIZE],
149        pub salt: [c_uchar; TLS_CIPHER_ARIA_GCM_256_SALT_SIZE],
150        pub rec_seq: [c_uchar; TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE],
151    }
152}
153
154const __TLS_INFO_MAX: c_int =
    {
        #[allow(unused_variables)]
        let r = TLS_INFO_TX_MAX_PAYLOAD_LEN + 1;
        r
    };c_enum! {
155    // FIXME(1.0): This is an i32 in `libc` but enum reprs are `u32`.
156    #[repr(c_int)]
157    pub enum #anon {
158        pub TLS_INFO_UNSPEC,
159        pub TLS_INFO_VERSION,
160        pub TLS_INFO_CIPHER,
161        pub TLS_INFO_TXCONF,
162        pub TLS_INFO_RXCONF,
163        pub TLS_INFO_ZC_RO_TX,
164        pub TLS_INFO_RX_NO_PAD,
165        pub TLS_INFO_TX_MAX_PAYLOAD_LEN,
166        __TLS_INFO_MAX,
167    }
168}
169
170/// Constants may change across releases. See the [usage guidelines](crate#usage-guidelines)
171/// for details.
172pub const TLS_INFO_MAX: c_int = __TLS_INFO_MAX - 1;
173
174pub const TLS_CONF_BASE: c_int = 1;
175pub const TLS_CONF_SW: c_int = 2;
176pub const TLS_CONF_HW: c_int = 3;
177pub const TLS_CONF_HW_RECORD: c_int = 4;