Expand description
§RustCrypto: TLS Codec
crates.io | docs.rs | |
---|---|---|
tls_codec | ||
tls_codec_derive |
This crate implements the TLS codec as defined in RFC 8446 as well as some extensions required by MLS.
With the derive
feature TlsSerialize
and TlsDeserialize
can be
derived.
The crate also provides the following data structures that implement TLS serialization/deserialization
u8
,u16
,u32
,u64
TlsVecU8
,TlsVecU16
,TlsVecU32
SecretTlsVecU8
,SecretTlsVecU16
,SecretTlsVecU32
The same as theTlsVec*
versions but it implements zeroize, requiring the elements to implement zeroize as well.TlsSliceU8
,TlsSliceU16
,TlsSliceU32
are lightweight wrapper for slices that allow to serialize them without having to create aTlsVec*
.TlsByteSliceU8
,TlsByteSliceU16
,TlsByteSliceU32
, andTlsByteVecU8
,TlsByteVecU16
,TlsByteVecU32
are provided with optimized implementations for byte vectors.[u8; l]
, forl ∈ [1..128]
- Serialize for
Option<T>
whereT: Serialize
- Deserialize for
Option<T>
whereT: Deserialize
- Serialize for
(T, U)
and(T, U, V)
whereT, U, V
implement Serialize` - Deserialize for
(T, U)
and(T, U, V)
whereT, U, V
implement Deserialize`
§Minimum Supported Rust Version
This crate requires Rust 1.60.0 at a minimum.
We may change the MSRV in the future, but it will be accompanied by a minor version bump.
§License
Licensed under either of:
at your option.
§Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
§Usage
use tls_codec::{TlsVecU8, Serialize, Deserialize};
let mut b = &[1u8, 4, 77, 88, 1, 99] as &[u8];
let a = u8::tls_deserialize(&mut b).expect("Unable to tls_deserialize");
assert_eq!(1, a);
println!("b: {:?}", b);
let v = TlsVecU8::<u8>::tls_deserialize(&mut b).expect("Unable to tls_deserialize");
assert_eq!(&[77, 88, 1, 99], v.as_slice());
Structs§
- Secret
TlsVec U8 - Secret
TlsVec U16 - Secret
TlsVec U24 - Secret
TlsVec U32 - SecretVL
Bytes std
- A wrapper struct around
VLBytes
that implementsZeroizeOnDrop
. It behaves just likeVLBytes
, except that it doesn’t allow conversion into aVec<u8>
. - TlsByte
Slice U8 - TlsByte
Slice U16 - TlsByte
Slice U24 - TlsByte
Slice U32 - TlsByte
VecU8 - TlsByte
VecU16 - TlsByte
VecU24 - TlsByte
VecU32 - TlsSlice
U8 - TlsSlice
U16 - TlsSlice
U24 - TlsSlice
U32 - TlsVec
U8 - TlsVec
U16 - TlsVec
U24 - TlsVec
U32 - U24
- A 3 byte wide unsigned integer type as defined in RFC 5246.
- VLByte
Slice - VLBytes
- Variable-length encoded byte vectors. Use this struct if bytes are encoded. This is faster than the generic version.
Enums§
- Error
- Errors that are thrown by this crate.
Traits§
- Deserialize
- The
Deserialize
trait defines functions to deserialize a byte slice to a struct or enum. - Deserialize
Bytes - The
DeserializeBytes
trait defines functions to deserialize a byte slice to a struct or enum. In contrast toDeserialize
, this trait operates directly on byte slices and can return any remaining bytes. - Serialize
- The
Serialize
trait provides functions to serialize a struct or enum. - Serialize
Bytes - The
SerializeBytes
trait provides a function to serialize a struct or enum. - Size
- The
Size
trait needs to be implemented by any struct that should be efficiently serialized. This allows to collect the length of a serialized structure before allocating memory.
Attribute Macros§
- conditionally_
deserializable conditional_deserialization
- The
conditionally_deserializable
attribute macro creates two versions of the affected struct: One that implements theDeserialize
andDeserializeBytes
traits and one that does not. It does so by introducing a boolean const generic that indicates if the struct can be deserialized or not.
Derive Macros§
- TlsDeserialize
derive
- TlsDeserialize
Bytes derive
- TlsSerialize
derive
- TlsSerialize
Bytes derive
- TlsSize
derive