Skip to content

Commit 0a9ee56

Browse files
Add thiserror for error handling and update dependencies
1 parent b6e038b commit 0a9ee56

File tree

12 files changed

+412
-135
lines changed

12 files changed

+412
-135
lines changed

Cargo.lock

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,22 @@ chacha20 = { version = "0.10.0-rc.2", default-features = false, optional = true
2727
chacha20poly1305 = { version = "0.11.0-rc.1", default-features = false, optional = true }
2828
cipher = "0.5.0-rc.1"
2929
crypto-common = { version = "0.2.0-rc.4", default-features = false }
30-
der = { version = "0.8.0-rc.8", default-features = false, optional = true }
31-
digest = { version = "0.11.0-rc.1", default-features = false }
32-
ecdsa = { version = "0.17.0-rc.6", default-features = false, optional = true }
30+
der = { version = "0.8.0-rc.9", default-features = false, optional = true }
31+
digest = { version = "0.11.0-rc.3", default-features = false }
32+
ecdsa = { version = "0.17.0-rc.7", default-features = false, optional = true }
3333
ed25519-dalek = { version = "3.0.0-pre.1", default-features = false, optional = true }
34-
ed448-goldilocks = { version = "0.14.0-pre.3", default-features = false, optional = true }
35-
elliptic-curve = { version = "0.14.0-rc.13", default-features = false, optional = true }
36-
hmac = { version = "0.13.0-rc.1", default-features = false }
37-
p256 = { version = "0.14.0-pre.10", default-features = false, optional = true }
38-
p384 = { version = "0.14.0-pre.10", default-features = false, optional = true }
39-
p521 = { version = "0.14.0-pre.10", default-features = false, optional = true }
40-
pkcs1 = { version = "0.8.0-rc.3", default-features = false, optional = true }
41-
pkcs8 = { version = "0.11.0-rc.6", default-features = false, optional = true }
42-
rsa = { version = "0.10.0-rc.6", default-features = false, optional = true }
43-
sec1 = { version = "0.8.0-rc.9", default-features = false, optional = true }
34+
ed448-goldilocks = { version = "0.14.0-pre.4", default-features = false, optional = true }
35+
elliptic-curve = { version = "0.14.0-rc.15", default-features = false, optional = true }
36+
hmac = { version = "0.13.0-rc.2", default-features = false }
37+
p256 = { version = "0.14.0-pre.11", default-features = false, optional = true }
38+
p384 = { version = "0.14.0-pre.11", default-features = false, optional = true }
39+
p521 = { version = "0.14.0-pre.11", default-features = false, optional = true }
40+
pkcs1 = { version = "0.8.0-rc.4", default-features = false, optional = true }
41+
pkcs8 = { version = "0.11.0-rc.7", default-features = false, optional = true }
42+
rsa = { version = "0.10.0-rc.9", default-features = false, optional = true }
43+
sec1 = { version = "0.8.0-rc.10", default-features = false, optional = true }
4444
sha2 = { version = "0.11.0-rc.2", default-features = false }
45-
signature = { version = "3.0.0-rc.3", default-features = false, optional = true }
45+
signature = { version = "3.0.0-rc.4", default-features = false, optional = true }
4646
typenum = { version = "1.18.0", features = ["no_std", "const-generics"] }
4747
x25519-dalek = { version = "3.0.0-pre.1", default-features = false, optional = true }
4848
x448 = { version = "=0.14.0-pre.0", default-features = false, optional = true }
@@ -52,25 +52,26 @@ pki-types = { package = "rustls-pki-types", version = "1.12.0", default-features
5252
rand_core = { version = "0.9.3", default-features = false, features = [
5353
"os_rng",
5454
], optional = true }
55-
rustls = { version = "0.23.31", default-features = false }
56-
webpki = { package = "rustls-webpki", version = "0.103.4", default-features = false, optional = true }
55+
rustls = { version = "0.23.32", default-features = false }
56+
webpki = { package = "rustls-webpki", version = "0.103.6", default-features = false, optional = true }
5757
enum_dispatch = "0.3.13"
5858
tinyvec = { version = "1.10.0", default-features = false, optional = true }
59+
thiserror = { version = "2.0.17", default-features = false }
5960

6061
[dev-dependencies]
6162
bytes = { version = "1.10.1", default-features = false }
6263
itertools = { version = "0.14.0", default-features = false }
6364
rsa_098 = { package = "rsa", version = "0.9.8", features = ["sha2"] }
6465
signature_220 = { package = "signature", version = "2.2.0" }
65-
rustls = { version = "0.23.31", default-features = false, features = ["std"] }
66+
rustls = { version = "0.23.32", default-features = false, features = ["std"] }
6667
x509-cert = { version = "0.2.5", default-features = false, features = [
6768
"builder",
6869
] }
6970
rand_core_064 = { package = "rand_core", version = "0.6.4" }
7071
p256_0132 = { package = "p256", version = "0.13.2" }
7172

7273
[features]
73-
default = ["std", "tls12", "zeroize", "full", "fast"]
74+
default = ["std", "tls12", "zeroize", "full", "fast", "quic", "ticketer"]
7475
full = [
7576
"aead-full",
7677
"sign-full",
@@ -85,7 +86,7 @@ tls12 = ["rustls/tls12"]
8586

8687
# RustCrypto is preparing to migrate to core::error::Error
8788
# and in before most of the use case for std is just std::error::Error
88-
std = ["alloc", "rustls/std", "ed448-goldilocks?/std", "tinyvec?/std"]
89+
std = ["alloc", "rustls/std", "ed448-goldilocks?/std", "tinyvec?/std", "thiserror/std"]
8990
alloc = [
9091
"ecdsa?/alloc",
9192
"ed448-goldilocks?/alloc",

src/kx/nist.rs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#[cfg(feature = "alloc")]
2-
use alloc::boxed::Box;
2+
use alloc::{boxed::Box, string::ToString};
33
use core::fmt::Debug;
44
use core::marker::PhantomData;
55

@@ -14,6 +14,26 @@ use rand_core::OsRng;
1414
use rustls::{Error, NamedGroup, PeerMisbehaved, crypto};
1515
use sec1::point::ModulusSize;
1616

17+
/// Errors that can occur in NIST key exchange
18+
#[derive(Debug, thiserror::Error)]
19+
pub enum NistKxError {
20+
/// Failed to generate private key
21+
#[error("failed to generate private key: {0}")]
22+
KeyGenerationFailed(rand_core::OsError),
23+
}
24+
25+
impl From<rand_core::OsError> for NistKxError {
26+
fn from(e: rand_core::OsError) -> Self {
27+
Self::KeyGenerationFailed(e)
28+
}
29+
}
30+
31+
impl From<NistKxError> for rustls::Error {
32+
fn from(e: NistKxError) -> Self {
33+
rustls::Error::General(e.to_string())
34+
}
35+
}
36+
1737
pub trait NistCurve: Curve + CurveArithmetic + PointCompression {
1838
const NAMED_GROUP: NamedGroup;
1939
}
@@ -41,8 +61,7 @@ where
4161
}
4262

4363
fn start(&self) -> Result<Box<dyn ActiveKeyExchange>, Error> {
44-
let priv_key = EphemeralSecret::<C>::try_from_rng(&mut OsRng)
45-
.map_err(|_| Error::General("Failed to generate private key".into()))?;
64+
let priv_key = EphemeralSecret::<C>::try_from_rng(&mut OsRng).map_err(NistKxError::from)?;
4665

4766
Ok(Box::new(NistKeyExchange::<C> {
4867
pub_key: priv_key.public_key().to_sec1_bytes(),
@@ -68,7 +87,7 @@ where
6887
{
6988
fn complete(self: Box<Self>, peer: &[u8]) -> Result<SharedSecret, Error> {
7089
let their_pub = PublicKey::<C>::from_sec1_bytes(peer)
71-
.map_err(|_| Error::from(PeerMisbehaved::InvalidKeyShare))?;
90+
.map_err(|_| rustls::PeerMisbehaved::InvalidKeyShare)?;
7291
Ok(self
7392
.priv_key
7493
.diffie_hellman(&their_pub)

src/kx/x25519.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ impl ActiveKeyExchange for X25519KeyExchange {
2929
fn complete(self: Box<X25519KeyExchange>, peer: &[u8]) -> Result<SharedSecret, rustls::Error> {
3030
let peer_array: [u8; 32] = peer
3131
.try_into()
32-
.map_err(|_| rustls::Error::from(rustls::PeerMisbehaved::InvalidKeyShare))?;
32+
.map_err(|_| rustls::PeerMisbehaved::InvalidKeyShare)?;
3333
Ok(self
3434
.priv_key
3535
.diffie_hellman(&peer_array.into())

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ impl KeyProvider for Provider {
7676
) -> Result<Arc<dyn SigningKey>, rustls::Error> {
7777
feature_eval_expr!(
7878
[feature = "sign"],
79-
sign::any_supported_type(&key_der),
80-
else Err(rustls::Error::General("not key providers supported".into()))
79+
sign::any_supported_type(&key_der).map_err(Into::into),
80+
else Err(rustls::Error::General("no key providers supported".into()))
8181
)
8282
}
8383
}

0 commit comments

Comments
 (0)