Skip to content

Commit d9b1f5a

Browse files
committed
Merge remote-tracking branch 'upstream/master' into documentation
2 parents 5d3eae7 + 71157ba commit d9b1f5a

File tree

40 files changed

+509
-508
lines changed

40 files changed

+509
-508
lines changed

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ members = [
1818
"util",
1919
"webrtc",
2020
]
21+
resolver = "2"
2122

2223
[profile.dev]
2324
opt-level = 0

constraints/Cargo.toml

+7-10
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,17 @@ license = "MIT OR Apache-2.0"
88
documentation = "https://docs.rs/webrtc-constraints"
99
homepage = "https://webrtc.rs"
1010
repository = "https://github.com/webrtc-rs/constraints"
11-
rust-version = "1.63.0"
12-
13-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1411

1512
[dependencies]
16-
indexmap = "1.9.1"
17-
serde = { version = "1.0.137", features = ["derive"], optional = true }
18-
ordered-float = { version = "3.0.0", default-features = false }
19-
thiserror = "1.0"
13+
indexmap = "2"
14+
serde = { version = "1", features = ["derive"], optional = true }
15+
ordered-float = { version = "3", default-features = false }
16+
thiserror = "1"
2017

2118
[dev-dependencies]
22-
env_logger = "0.9.0"
23-
lazy_static = "1.4.0"
24-
serde_json = { version = "1.0.91", features = ["preserve_order"] }
19+
env_logger = "0.10"
20+
lazy_static = "1"
21+
serde_json = { version = "1", features = ["preserve_order"] }
2522

2623
[features]
2724
default = ["serde"]

data/Cargo.toml

+9-12
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
11
[package]
22
name = "webrtc-data"
3-
version = "0.7.0"
3+
version = "0.8.0"
44
authors = ["Rain Liu <[email protected]>"]
55
edition = "2021"
66
description = "A pure Rust implementation of WebRTC DataChannel API"
77
license = "MIT OR Apache-2.0"
88
documentation = "https://docs.rs/webrtc-data"
99
homepage = "https://webrtc.rs"
1010
repository = "https://github.com/webrtc-rs/data"
11-
rust-version = "1.63.0"
12-
13-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1411

1512
[dependencies]
16-
util = { version = "0.7.0", path = "../util", package = "webrtc-util", default-features = false, features = ["conn", "marshal"] }
17-
sctp = { version = "0.8.0", path = "../sctp", package = "webrtc-sctp" }
13+
util = { version = "0.8", path = "../util", package = "webrtc-util", default-features = false, features = ["conn", "marshal"] }
14+
sctp = { version = "0.9", path = "../sctp", package = "webrtc-sctp" }
1815

19-
tokio = { version = "1.19", features = ["full"] }
16+
tokio = { version = "1.32.0", features = ["full"] }
2017
bytes = "1"
21-
log = "0.4.16"
22-
thiserror = "1.0"
18+
log = "0.4"
19+
thiserror = "1"
2320

2421
[dev-dependencies]
25-
tokio-test = "0.4.0" # must match the min version of the `tokio` crate above
26-
env_logger = "0.9.0"
27-
chrono = "0.4.23"
22+
tokio-test = "0.4" # must match the min version of the `tokio` crate above
23+
env_logger = "0.10"
24+
chrono = "0.4.28"

dtls/Cargo.toml

+30-34
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,51 @@
11
[package]
22
name = "webrtc-dtls"
3-
version = "0.7.2"
3+
version = "0.8.0"
44
authors = ["Rain Liu <[email protected]>"]
55
edition = "2021"
66
description = "A pure Rust implementation of DTLS"
77
license = "MIT OR Apache-2.0"
88
documentation = "https://docs.rs/webrtc-dtls"
99
homepage = "https://webrtc.rs"
1010
repository = "https://github.com/webrtc-rs/dtls"
11-
rust-version = "1.63.0"
12-
13-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1411

1512
[dependencies]
16-
util = { version = "0.7.0", path = "../util", package = "webrtc-util", default-features = false, features = ["conn"] }
13+
util = { version = "0.8", path = "../util", package = "webrtc-util", default-features = false, features = ["conn"] }
1714

1815
byteorder = "1"
19-
rand_core = "0.6.3"
20-
hkdf = "~0.12.1"
21-
p256 = { version = "0.11.1", features = ["default", "ecdh", "ecdsa"] }
22-
p384 = "0.11.2"
23-
rand = "0.8.5"
24-
hmac = "0.12.1"
25-
sec1 = { version = "0.3.0", features = [ "std" ] }
26-
sha1 = "0.10.5"
27-
sha2 = "0.10.6"
28-
aes = "0.6.0"
29-
block-modes = "0.7.0"
30-
aes-gcm = "0.10.1"
31-
ccm = "0.3.0"
32-
tokio = { version = "1.19", features = ["full"] }
33-
async-trait = "0.1.56"
16+
rand_core = "0.6"
17+
hkdf = "0.12"
18+
p256 = { version = "0.13", features = ["default", "ecdh", "ecdsa"] }
19+
p384 = "0.13"
20+
rand = "0.8"
21+
hmac = "0.12"
22+
sec1 = { version = "0.7", features = [ "std" ] }
23+
sha1 = "0.10"
24+
sha2 = "0.10"
25+
aes = "0.8"
26+
cbc = { version = "0.1", features = [ "block-padding", "alloc"] }
27+
aes-gcm = "0.10"
28+
ccm = "0.5"
29+
tokio = { version = "1.32.0", features = ["full"] }
30+
async-trait = "0.1"
3431
x25519-dalek = { version = "2", features = ["static_secrets"] }
35-
x509-parser = "0.13.2"
32+
x509-parser = "0.15"
3633
der-parser = "8.1"
37-
rcgen = "0.10.0"
34+
rcgen = "0.11"
3835
ring = "0.16.19"
39-
webpki = "0.21.4"
40-
rustls = { version = "0.19.0", features = ["dangerous_configuration"]}
41-
bincode = "1.3"
42-
serde = { version = "1.0.110", features = ["derive"] }
43-
subtle = "2.4"
44-
log = "0.4.16"
45-
thiserror = "1.0"
46-
pem = { version = "1", optional = true }
36+
rustls = { version = "0.21", features = ["dangerous_configuration"]}
37+
bincode = "1"
38+
serde = { version = "1", features = ["derive"] }
39+
subtle = "2"
40+
log = "0.4"
41+
thiserror = "1"
42+
pem = { version = "3", optional = true }
4743

4844
[dev-dependencies]
49-
tokio-test = "0.4.0" # must match the min version of the `tokio` crate above
50-
env_logger = "0.9.0"
51-
chrono = "0.4.23"
52-
clap = "3.2.6"
45+
tokio-test = "0.4"
46+
env_logger = "0.10"
47+
chrono = "0.4.28"
48+
clap = "3"
5349
hub = {path = "examples/hub"}
5450

5551
[features]

dtls/examples/dial/verify/dial_verify.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use std::fs::File;
2-
use std::io::{BufReader, Write};
1+
use std::io::Write;
32
use std::sync::Arc;
43

54
use clap::{App, AppSettings, Arg};
5+
use hub::utilities::load_certificate;
66
use tokio::net::UdpSocket;
77
use util::Conn;
88
use webrtc_dtls::config::*;
@@ -67,10 +67,11 @@ async fn main() -> Result<(), Error> {
6767
)?;
6868

6969
let mut cert_pool = rustls::RootCertStore::empty();
70-
let f = File::open("dtls/examples/certificates/server.pub.pem")?;
71-
let mut reader = BufReader::new(f);
72-
if cert_pool.add_pem_file(&mut reader).is_err() {
73-
return Err(Error::Other("cert_pool add_pem_file failed".to_owned()));
70+
let certs = load_certificate("dtls/examples/certificates/server.pub.pem".into())?;
71+
for cert in &certs {
72+
if cert_pool.add(cert).is_err() {
73+
return Err(Error::Other("cert_pool add_pem_file failed".to_owned()));
74+
}
7475
}
7576

7677
let config = Config {

dtls/examples/hub/Cargo.toml

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ util = { path = "../../../util", package = "webrtc-util", default-features = fal
99
] }
1010
dtls = { package = "webrtc-dtls", path = "../../" }
1111

12-
tokio = { version = "1", features = ["full"] }
13-
rcgen = { version = "0.10", features = ["pem", "x509-parser"] }
14-
rustls = "0.19"
12+
tokio = { version = "1.32.0", features = ["full"] }
13+
rcgen = { version = "0.11", features = ["pem", "x509-parser"] }
14+
rustls = "0.21"
15+
rustls-pemfile = "1"
1516
thiserror = "1"

dtls/examples/hub/src/utilities.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use std::path::PathBuf;
44

55
use dtls::crypto::{Certificate, CryptoPrivateKey};
66
use rcgen::KeyPair;
7-
use rustls::internal::pemfile::certs;
87
use thiserror::Error;
98

109
use super::*;
@@ -106,8 +105,8 @@ pub fn load_certificate(path: PathBuf) -> Result<Vec<rustls::Certificate>, Error
106105
let f = File::open(path)?;
107106

108107
let mut reader = BufReader::new(f);
109-
match certs(&mut reader) {
110-
Ok(ders) => Ok(ders),
108+
match rustls_pemfile::certs(&mut reader) {
109+
Ok(certs) => Ok(certs.into_iter().map(rustls::Certificate).collect()),
111110
Err(_) => Err(Error::ErrNoCertificateFound),
112111
}
113112
}

dtls/examples/listen/verify/listen_verify.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use std::fs::File;
2-
use std::io::{BufReader, Write};
1+
use std::io::Write;
32
use std::sync::Arc;
43

54
use clap::{App, AppSettings, Arg};
5+
use hub::utilities::load_certificate;
66
use util::conn::*;
77
use webrtc_dtls::config::{ClientAuthType, Config, ExtendedMasterSecretType};
88
use webrtc_dtls::listener::listen;
@@ -62,10 +62,11 @@ async fn main() -> Result<(), Error> {
6262
)?;
6363

6464
let mut cert_pool = rustls::RootCertStore::empty();
65-
let f = File::open("dtls/examples/certificates/server.pub.pem")?;
66-
let mut reader = BufReader::new(f);
67-
if cert_pool.add_pem_file(&mut reader).is_err() {
68-
return Err(Error::Other("cert_pool add_pem_file failed".to_owned()));
65+
let certs = load_certificate("dtls/examples/certificates/server.pub.pem".into())?;
66+
for cert in &certs {
67+
if cert_pool.add(cert).is_err() {
68+
return Err(Error::Other("cert_pool add_pem_file failed".to_owned()));
69+
}
6970
}
7071

7172
let cfg = Config {

dtls/src/conn/mod.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -213,14 +213,19 @@ impl DTLSConn {
213213
insecure_skip_verify: config.insecure_skip_verify,
214214
insecure_verification: config.insecure_verification,
215215
verify_peer_certificate: config.verify_peer_certificate.take(),
216-
roots_cas: config.roots_cas,
217216
client_cert_verifier: if config.client_auth as u8
218217
>= ClientAuthType::VerifyClientCertIfGiven as u8
219218
{
220-
Some(rustls::AllowAnyAuthenticatedClient::new(config.client_cas))
219+
Some(Arc::new(rustls::server::AllowAnyAuthenticatedClient::new(
220+
config.client_cas,
221+
)))
221222
} else {
222223
None
223224
},
225+
server_cert_verifier: Arc::new(rustls::client::WebPkiVerifier::new(
226+
config.roots_cas,
227+
None,
228+
)),
224229
retransmit_interval,
225230
//log: logger,
226231
initial_epoch: 0,

dtls/src/crypto/crypto_cbc.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,18 @@
88

99
// https://github.com/RustCrypto/block-ciphers
1010

11+
use aes::cipher::{block_padding::Pkcs7, BlockDecryptMut, BlockEncryptMut, KeyIvInit};
12+
use p256::elliptic_curve::subtle::ConstantTimeEq;
13+
use rand::Rng;
1114
use std::io::Cursor;
1215
use std::ops::Not;
1316

14-
use aes::Aes256;
15-
use block_modes::{BlockMode, BlockModeError, Cbc};
16-
use rand::Rng;
17-
use subtle::ConstantTimeEq;
18-
19-
use super::padding::DtlsPadding;
2017
use crate::content::*;
2118
use crate::error::*;
2219
use crate::prf::*;
2320
use crate::record_layer::record_layer_header::*;
24-
type Aes256Cbc = Cbc<Aes256, DtlsPadding>;
21+
type Aes256CbcEnc = cbc::Encryptor<aes::Aes256>;
22+
type Aes256CbcDec = cbc::Decryptor<aes::Aes256>;
2523

2624
// State needed to handle encrypted input/output
2725
#[derive(Clone)]
@@ -71,8 +69,8 @@ impl CryptoCbc {
7169
let mut iv: Vec<u8> = vec![0; Self::BLOCK_SIZE];
7270
rand::thread_rng().fill(iv.as_mut_slice());
7371

74-
let write_cbc = Aes256Cbc::new_var(&self.local_key, &iv)?;
75-
let encrypted = write_cbc.encrypt_vec(&payload);
72+
let write_cbc = Aes256CbcEnc::new_from_slices(&self.local_key, &iv)?;
73+
let encrypted = write_cbc.encrypt_padded_vec_mut::<Pkcs7>(&payload);
7674

7775
// Prepend unencrypte header with encrypted payload
7876
let mut r = vec![];
@@ -100,9 +98,11 @@ impl CryptoCbc {
10098
let body = &body[Self::BLOCK_SIZE..];
10199
//TODO: add body.len() check
102100

103-
let read_cbc = Aes256Cbc::new_var(&self.remote_key, iv)?;
101+
let read_cbc = Aes256CbcDec::new_from_slices(&self.remote_key, iv)?;
104102

105-
let decrypted = read_cbc.decrypt_vec(body)?;
103+
let decrypted = read_cbc
104+
.decrypt_padded_vec_mut::<Pkcs7>(body)
105+
.map_err(|_| Error::ErrInvalidPacketLength)?;
106106

107107
let recv_mac = &decrypted[decrypted.len() - Self::MAC_SIZE..];
108108
let decrypted = &decrypted[0..decrypted.len() - Self::MAC_SIZE];
@@ -116,7 +116,7 @@ impl CryptoCbc {
116116
)?;
117117

118118
if recv_mac.ct_eq(&mac).not().into() {
119-
return Err(BlockModeError.into());
119+
return Err(Error::ErrInvalidMac);
120120
}
121121

122122
let mut d = Vec::with_capacity(RECORD_LAYER_HEADER_SIZE + decrypted.len());

dtls/src/crypto/crypto_ccm.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ use std::io::Cursor;
1212

1313
use aes::Aes128;
1414
use ccm::aead::generic_array::GenericArray;
15-
use ccm::aead::{AeadInPlace, NewAead};
15+
use ccm::aead::AeadInPlace;
1616
use ccm::consts::{U12, U16, U8};
1717
use ccm::Ccm;
18+
use ccm::KeyInit;
1819
use rand::Rng;
1920

2021
use super::*;

0 commit comments

Comments
 (0)