#tls #codec

no-std tls_codec

A pure Rust implementation of the TLS (de)serialization

19 releases

0.4.0 Nov 21, 2023
0.3.0 Jun 22, 2023
0.3.0-pre.1 Mar 3, 2023
0.2.0 Feb 7, 2022
0.1.4 Jul 8, 2021

#2186 in Cryptography

Download history 765/week @ 2023-08-20 653/week @ 2023-08-27 538/week @ 2023-09-03 570/week @ 2023-09-10 821/week @ 2023-09-17 780/week @ 2023-09-24 807/week @ 2023-10-01 798/week @ 2023-10-08 374/week @ 2023-10-15 699/week @ 2023-10-22 831/week @ 2023-10-29 1107/week @ 2023-11-05 2213/week @ 2023-11-12 4244/week @ 2023-11-19 4245/week @ 2023-11-26 3111/week @ 2023-12-03

13,834 downloads per month
Used in 9 crates (6 directly)

Apache-2.0 OR MIT


RustCrypto: TLS Codec

MIT licensed Project Chat Rust Version

crates.io docs.rs
tls_codec Docs
tls_codec_derive Docs

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 the TlsVec* 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 a TlsVec*.
  • TlsByteSliceU8, TlsByteSliceU16, TlsByteSliceU32, and TlsByteVecU8, TlsByteVecU16, TlsByteVecU32 are provided with optimized implementations for byte vectors.
  • [u8; l], for l ∈ [1..128]
  • Serialize for Option<T> where T: Serialize
  • Deserialize for Option<T> where T: Deserialize
  • Serialize for (T, U) and (T, U, V) where T, U, V implement Serialize`
  • Deserialize for (T, U) and (T, U, V) where T, 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.


Licensed under either of:

at your option.


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.


~20K SLoC