asonix
973697bd6c
All checks were successful
/ check (aarch64-unknown-linux-musl) (push) Successful in 51s
/ check (armv7-unknown-linux-musleabihf) (push) Successful in 59s
/ check (x86_64-unknown-linux-musl) (push) Successful in 52s
/ clippy (push) Successful in 29s
/ tests (push) Successful in 30s
/ build (armv7-unknown-linux-musleabihf) (push) Successful in 59s
/ build (x86_64-unknown-linux-musl) (push) Successful in 41s
/ publish-forgejo (push) Successful in 5s
/ publish-crate (push) Successful in 20s
/ build (aarch64-unknown-linux-musl) (push) Successful in 56s
|
||
---|---|---|
.forgejo/workflows | ||
src | ||
.gitignore | ||
Cargo.toml | ||
flake.lock | ||
flake.nix | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md |
tokio-postgres-generic-rustls
An impelementation of TLS based on rustls for tokio-postgres
This crate allows users to select a crypto backend, or bring their own, rather than relying on
primitives provided by ring
directly. This is done through the use of x509-cert for
certificate parsing rather than X509-certificate, while also adding an abstraction for
computing digests.
By default, tokio-postgres-generic-rustls does not provide a digest implementation, but one or more are provided behind crate features.
Feature | Impelementation |
---|---|
aws-lc-rs |
AwsLcRsDigest |
ring |
RingDigest |
rustcrypto |
RustcryptoDigest |
Usage
Using this crate is fairly straightforward. First, select your digest impelementation via crate features (or provide your own), then construct rustls connector for tokio-postgres with your rustls client configuration.
The following example demonstrates providing a custom digest backend.
use tokio_postgres_generic_rustls::{DigestImplementation, DigestAlgorithm, MakeRustlsConnect};
#[derive(Clone)]
struct DemoDigest;
impl DigestImplementation for DemoDigest {
fn digest(&self, algorithm: DigestAlgorithm, bytes: &[u8]) -> Vec<u8> {
todo!("digest it")
}
}
fn main() {
let cert_store = rustls::RootCertStore::empty();
let config = rustls::ClientConfig::builder()
.with_root_certificates(cert_store)
.with_no_client_auth();
let tls = MakeRustlsConnect::new(config, DemoDigest);
let connect_future = tokio_postgres::connect("postgres://username:password@localhost:5432/db", tls);
// connect_future.await;
}
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.