tls-api

TLS API without implementation

33 releases (8 breaking)

0.9.0 Apr 28, 2022
0.7.0 Oct 26, 2021
0.5.0 Feb 21, 2021
0.4.0 May 17, 2020
0.1.8 Jun 17, 2017
Download history 7972/week @ 2024-06-20 6064/week @ 2024-06-27 7601/week @ 2024-07-04 7853/week @ 2024-07-11 6641/week @ 2024-07-18 7220/week @ 2024-07-25 7607/week @ 2024-08-01 7930/week @ 2024-08-08 7234/week @ 2024-08-15 6759/week @ 2024-08-22 6473/week @ 2024-08-29 7864/week @ 2024-09-05 6897/week @ 2024-09-12 6031/week @ 2024-09-19 5767/week @ 2024-09-26 6487/week @ 2024-10-03

26,690 downloads per month
Used in 40 crates (25 directly)

MIT/Apache

66KB
1.5K SLoC

GitHub Workflow Status License crates.io

tls-api

Implementation neutral common denominator TLS API.

A library working with TLS can be written with this crate independently on actual TLS implementation, and the user of the library can fill in the actual type implementation.

This crate only provide interfaces: acceptor and connector.

Tokio or async-std

This crate (and dependent tls-api-* crates) have two mutially exclusive features:

  • runtime-tokio implements API over tokio
  • runtime-async-std implements API over async-std

Static or dynamic

API is provided in static or dynamic flavors.

tls_api::TlsAcceptor and tls_api::TlsConnector type are Sized, each function or structure using them need to be parameterized by these types, for example:

async fn create_listener<C: tls_api::TlsAcceptor>()
    -> anyhow::Result<tls_api::TlsStream<async_std::net::TcpStream>>
{ ... }

Alternatively, there's a dynamically-dispatched version of the functions: tls_api::TlsAcceptorType and tls_api::TlsConnectorType. These types are not sized. Could be used like this:

async fn create_listener(acceptor: &tls_api::TlsAcceptorType)
    -> anyhow::Result<tls_api::TslStreamBox>
{ ... }

Note create_listener does not have a type parameter, which makes coding slightly easier at cost of somewhat decreased performance.

Dependencies

~11–23MB
~428K SLoC