tls_codec 0.1.3

A pure Rust implementation of the TLS (de)serialization
Documentation

TLS Codec

This crate implements the TLS codec as defined in RFC 8446 as well as some extensions required by MLS.

With the feature derive TlsSerialize, TlsDeserialize, and TlsSize can be derived. Note that TlsSerialize and TlsDeserialize both require TlsSize.

This crate 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

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());