Skip to content

Commit

Permalink
feat: add use-rustls-ring feature
Browse files Browse the repository at this point in the history
  • Loading branch information
thunderbiscuit committed Jul 27, 2024
1 parent 64c77ee commit b415b5c
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 14 deletions.
5 changes: 3 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ serde_json = { version = "^1.0" }

# Optional dependencies
openssl = { version = "0.10", optional = true }
rustls = { version = "0.23", optional = true }
rustls = { version = "0.23", optional = true, default-features = false }
webpki-roots = { version = "0.25", optional = true }

byteorder = { version = "1.0", optional = true }
Expand All @@ -41,5 +41,6 @@ default = ["proxy", "use-rustls"]
minimal = []
debug-calls = []
proxy = ["byteorder", "winapi", "libc"]
use-rustls = ["webpki-roots", "rustls"]
use-rustls = ["webpki-roots", "rustls/default"]
use-rustls-ring = ["rustls/ring", "rustls/logging", "rustls/std", "rustls/tls12"]
use-openssl = ["openssl"]
18 changes: 14 additions & 4 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,22 @@ extern crate log;
#[cfg(feature = "use-openssl")]
extern crate openssl;
#[cfg(all(
any(feature = "default", feature = "use-rustls"),
any(
feature = "default",
feature = "use-rustls",
feature = "use-rustls-ring"
),
not(feature = "use-openssl")
))]
extern crate rustls;
extern crate serde;
extern crate serde_json;

#[cfg(any(feature = "use-rustls", feature = "default"))]
#[cfg(any(
feature = "default",
feature = "use-rustls",
feature = "use-rustls-ring"
))]
extern crate webpki_roots;

#[cfg(any(feature = "default", feature = "proxy"))]
Expand All @@ -51,7 +59,8 @@ mod batch;

#[cfg(any(
all(feature = "proxy", feature = "use-openssl"),
all(feature = "proxy", feature = "use-rustls")
all(feature = "proxy", feature = "use-rustls"),
all(feature = "proxy", feature = "use-rustls-ring")
))]
pub mod client;

Expand All @@ -66,7 +75,8 @@ pub use api::ElectrumApi;
pub use batch::Batch;
#[cfg(any(
all(feature = "proxy", feature = "use-openssl"),
all(feature = "proxy", feature = "use-rustls")
all(feature = "proxy", feature = "use-rustls"),
all(feature = "proxy", feature = "use-rustls-ring")
))]
pub use client::*;
pub use config::{Config, ConfigBuilder, Socks5Config};
Expand Down
30 changes: 25 additions & 5 deletions src/raw_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ use bitcoin::{Script, Txid};
use openssl::ssl::{SslConnector, SslMethod, SslStream, SslVerifyMode};

#[cfg(all(
any(feature = "default", feature = "use-rustls"),
any(
feature = "default",
feature = "use-rustls",
feature = "use-rustls-ring"
),
not(feature = "use-openssl")
))]
use rustls::{
Expand Down Expand Up @@ -286,7 +290,11 @@ impl RawClient<ElectrumSslStream> {
}

#[cfg(all(
any(feature = "default", feature = "use-rustls"),
any(
feature = "default",
feature = "use-rustls",
feature = "use-rustls-ring"
),
not(feature = "use-openssl")
))]
mod danger {
Expand Down Expand Up @@ -336,13 +344,21 @@ mod danger {
}

#[cfg(all(
any(feature = "default", feature = "use-rustls"),
any(
feature = "default",
feature = "use-rustls",
feature = "use-rustls-ring"
),
not(feature = "use-openssl")
))]
/// Transport type used to establish a Rustls TLS encrypted/authenticated connection with the server
pub type ElectrumSslStream = StreamOwned<ClientConnection, TcpStream>;
#[cfg(all(
any(feature = "default", feature = "use-rustls"),
any(
feature = "default",
feature = "use-rustls",
feature = "use-rustls-ring"
),
not(feature = "use-openssl")
))]
impl RawClient<ElectrumSslStream> {
Expand Down Expand Up @@ -451,7 +467,11 @@ impl RawClient<ElectrumProxyStream> {
Ok(stream.into())
}

#[cfg(any(feature = "use-openssl", feature = "use-rustls"))]
#[cfg(any(
feature = "use-openssl",
feature = "use-rustls",
feature = "use-rustls-ring"
))]
/// Creates a new TLS client that connects to `target_addr` using `proxy_addr` as a socks proxy
/// server. The DNS resolution of `target_addr`, if required, is done through the proxy. This
/// allows to specify, for instance, `.onion` addresses.
Expand Down
8 changes: 5 additions & 3 deletions src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,7 @@ pub enum Error {
CouldntLockReader,
/// Broken IPC communication channel: the other thread probably has exited
Mpsc,

#[cfg(feature = "use-rustls")]
#[cfg(any(feature = "use-rustls", feature = "use-rustls-ring"))]
/// Could not create a rustls client connection
CouldNotCreateConnection(rustls::Error),

Expand All @@ -340,7 +339,10 @@ impl Display for Error {
Error::SslHandshakeError(e) => Display::fmt(e, f),
#[cfg(feature = "use-openssl")]
Error::InvalidSslMethod(e) => Display::fmt(e, f),
#[cfg(feature = "use-rustls")]
#[cfg(any(
feature = "use-rustls",
feature = "use-rustls-ring",
))]
Error::CouldNotCreateConnection(e) => Display::fmt(e, f),

Error::Message(e) => f.write_str(e),
Expand Down

0 comments on commit b415b5c

Please sign in to comment.