1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-07-31 09:24:31 +03:00

Bump all Rust dependencies to latest version (#828)

This commit is contained in:
Quentin Gliech
2023-01-27 15:23:59 +01:00
committed by GitHub
parent 1e78f37353
commit 6bda071e3f
28 changed files with 435 additions and 375 deletions

553
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -6,8 +6,8 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
async-trait = "0.1.61" async-trait = "0.1.63"
axum = { version = "0.6.2", features = ["headers"] } axum = { version = "0.6.4", features = ["headers"] }
axum-extra = { version = "0.4.2", features = ["cookie-private"] } axum-extra = { version = "0.4.2", features = ["cookie-private"] }
chrono = "0.4.23" chrono = "0.4.23"
data-encoding = "2.3.3" data-encoding = "2.3.3"
@ -18,11 +18,11 @@ http-body = "0.4.5"
mime = "0.3.16" mime = "0.3.16"
rand = "0.8.5" rand = "0.8.5"
serde = "1.0.152" serde = "1.0.152"
serde_with = "2.1.0" serde_with = "2.2.0"
serde_urlencoded = "0.7.1" serde_urlencoded = "0.7.1"
serde_json = "1.0.91" serde_json = "1.0.91"
thiserror = "1.0.38" thiserror = "1.0.38"
tokio = "1.24.1" tokio = "1.24.2"
tower = { version = "0.4.13", features = ["util"] } tower = { version = "0.4.13", features = ["util"] }
tracing = "0.1.37" tracing = "0.1.37"
url = "2.3.1" url = "2.3.1"

View File

@ -8,20 +8,20 @@ license = "Apache-2.0"
[dependencies] [dependencies]
anyhow = "1.0.68" anyhow = "1.0.68"
atty = "0.2.14" atty = "0.2.14"
axum = "0.6.2" axum = "0.6.4"
camino = "1.1.2" camino = "1.1.2"
clap = { version = "4.0.32", features = ["derive"] } clap = { version = "4.1.4", features = ["derive"] }
dotenv = "0.15.0" dotenv = "0.15.0"
hyper = { version = "0.14.23", features = ["full"] } hyper = { version = "0.14.23", features = ["full"] }
itertools = "0.10.5" itertools = "0.10.5"
listenfd = "1.0.0" listenfd = "1.0.0"
rand = "0.8.5" rand = "0.8.5"
rand_chacha = "0.3.1" rand_chacha = "0.3.1"
rustls = "0.20.7" rustls = "0.20.8"
serde_json = "1.0.91" serde_json = "1.0.91"
serde_yaml = "0.9.16" serde_yaml = "0.9.17"
sqlx = { version = "0.6.2", features = ["runtime-tokio-rustls", "postgres"] } sqlx = { version = "0.6.2", features = ["runtime-tokio-rustls", "postgres"] }
tokio = { version = "1.24.1", features = ["full"] } tokio = { version = "1.24.2", features = ["full"] }
tower = { version = "0.4.13", features = ["full"] } tower = { version = "0.4.13", features = ["full"] }
tower-http = { version = "0.3.5", features = ["fs", "compression-full"] } tower-http = { version = "0.3.5", features = ["fs", "compression-full"] }
url = "2.3.1" url = "2.3.1"

View File

@ -6,9 +6,9 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
tokio = { version = "1.24.1", features = ["fs", "rt"] } tokio = { version = "1.24.2", features = ["fs", "rt"] }
tracing = { version = "0.1.37" } tracing = { version = "0.1.37" }
async-trait = "0.1.61" async-trait = "0.1.63"
thiserror = "1.0.38" thiserror = "1.0.38"
anyhow = "1.0.68" anyhow = "1.0.68"
@ -21,11 +21,11 @@ ulid = { version = "1.0.0", features = ["serde"] }
url = { version = "2.3.1", features = ["serde"] } url = { version = "2.3.1", features = ["serde"] }
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
serde_with = { version = "2.1.0", features = ["hex", "chrono"] } serde_with = { version = "2.2.0", features = ["hex", "chrono"] }
serde_json = "1.0.91" serde_json = "1.0.91"
pem-rfc7468 = "0.6.0" pem-rfc7468 = "0.6.0"
rustls-pemfile = "1.0.1" rustls-pemfile = "1.0.2"
rand = "0.8.5" rand = "0.8.5"
rand_chacha = "0.3.1" rand_chacha = "0.3.1"

View File

@ -6,14 +6,14 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
async-trait = "0.1.61" async-trait = "0.1.63"
tracing = "0.1.37" tracing = "0.1.37"
thiserror = "1.0.38" thiserror = "1.0.38"
aws-sdk-sesv2 = { version = "0.22.0", default-features = false } aws-sdk-sesv2 = { version = "0.24.0", default-features = false }
aws-config = { version = "0.52.0", default-features = false } aws-config = { version = "0.54.1", default-features = false }
aws-smithy-client = { version = "0.52.0", default-features = false, features = ["client-hyper"] } aws-smithy-client = { version = "0.54.1", default-features = false, features = ["client-hyper"] }
aws-smithy-async = { version = "0.52.0", default-features = false, features = ["rt-tokio"] } aws-smithy-async = { version = "0.54.1", default-features = false, features = ["rt-tokio"] }
mas-templates = { path = "../templates" } mas-templates = { path = "../templates" }
mas-http = { path = "../http", features = ["aws-sdk", "client"] } mas-http = { path = "../http", features = ["aws-sdk", "client"] }

View File

@ -10,7 +10,7 @@ anyhow = "1.0.68"
async-graphql = { version = "5.0.5", features = ["chrono", "url"] } async-graphql = { version = "5.0.5", features = ["chrono", "url"] }
chrono = "0.4.23" chrono = "0.4.23"
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
tokio = { version = "1.23.0", features = ["sync"] } tokio = { version = "1.24.2", features = ["sync"] }
thiserror = "1.0.38" thiserror = "1.0.38"
tracing = "0.1.37" tracing = "0.1.37"
ulid = "1.0.0" ulid = "1.0.0"

View File

@ -7,7 +7,7 @@ license = "Apache-2.0"
[dependencies] [dependencies]
# Async runtime # Async runtime
tokio = { version = "1.24.1", features = ["macros"] } tokio = { version = "1.24.2", features = ["macros"] }
futures-util = "0.3.25" futures-util = "0.3.25"
# Logging and tracing # Logging and tracing
@ -21,8 +21,8 @@ anyhow = "1.0.68"
hyper = { version = "0.14.23", features = ["full"] } hyper = { version = "0.14.23", features = ["full"] }
tower = "0.4.13" tower = "0.4.13"
tower-http = { version = "0.3.5", features = ["cors"] } tower-http = { version = "0.3.5", features = ["cors"] }
axum = "0.6.2" axum = "0.6.4"
axum-macros = "0.3.1" axum-macros = "0.3.2"
axum-extra = { version = "0.4.2", features = ["cookie-private"] } axum-extra = { version = "0.4.2", features = ["cookie-private"] }
async-graphql = { version = "5.0.5", features = ["tracing", "apollo_tracing"] } async-graphql = { version = "5.0.5", features = ["tracing", "apollo_tracing"] }
@ -35,7 +35,7 @@ sqlx = { version = "0.6.2", features = ["runtime-tokio-rustls", "postgres"] }
# Various structure (de)serialization # Various structure (de)serialization
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
serde_with = { version = "2.1.0", features = ["hex", "chrono"] } serde_with = { version = "2.2.0", features = ["hex", "chrono"] }
serde_json = "1.0.91" serde_json = "1.0.91"
serde_urlencoded = "0.7.1" serde_urlencoded = "0.7.1"

View File

@ -6,9 +6,9 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
aws-smithy-http = { version = "0.52.0", optional = true } aws-smithy-http = { version = "0.54.1", optional = true }
aws-types = { version = "0.52.0", optional = true } aws-types = { version = "0.54.1", optional = true }
axum = { version = "0.6.2", optional = true } axum = { version = "0.6.4", optional = true }
bytes = "1.3.0" bytes = "1.3.0"
futures-util = "0.3.25" futures-util = "0.3.25"
headers = "0.3.8" headers = "0.3.8"
@ -20,13 +20,13 @@ once_cell = "1.17.0"
opentelemetry = "0.18.0" opentelemetry = "0.18.0"
opentelemetry-http = "0.7.0" opentelemetry-http = "0.7.0"
opentelemetry-semantic-conventions = "0.10.0" opentelemetry-semantic-conventions = "0.10.0"
rustls = { version = "0.20.7", optional = true } rustls = { version = "0.20.8", optional = true }
rustls-native-certs = { version = "0.6.2", optional = true } rustls-native-certs = { version = "0.6.2", optional = true }
serde = "1.0.152" serde = "1.0.152"
serde_json = "1.0.91" serde_json = "1.0.91"
serde_urlencoded = "0.7.1" serde_urlencoded = "0.7.1"
thiserror = "1.0.38" thiserror = "1.0.38"
tokio = { version = "1.24.1", features = ["sync", "parking_lot"], optional = true } tokio = { version = "1.24.2", features = ["sync", "parking_lot"], optional = true }
tower = { version = "0.4.13", features = [] } tower = { version = "0.4.13", features = [] }
tower-http = { version = "0.3.5", features = ["cors"] } tower-http = { version = "0.3.5", features = ["cors"] }
tracing = "0.1.37" tracing = "0.1.37"
@ -37,7 +37,7 @@ webpki-roots = { version = "0.22.6", optional = true }
[dev-dependencies] [dev-dependencies]
anyhow = "1.0.68" anyhow = "1.0.68"
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
tokio = { version = "1.24.1", features = ["macros", "rt"] } tokio = { version = "1.24.2", features = ["macros", "rt"] }
tower = { version = "0.4.13", features = ["util"] } tower = { version = "0.4.13", features = ["util"] }
[features] [features]

View File

@ -7,13 +7,13 @@ license = "Apache-2.0"
[dependencies] [dependencies]
anyhow = "1.0.68" anyhow = "1.0.68"
async-trait = "0.1.61" async-trait = "0.1.63"
camino = "1.1.2" camino = "1.1.2"
convert_case = "0.6.0" convert_case = "0.6.0"
csv = "1.1.6" csv = "1.1.6"
futures-util = "0.3.25" futures-util = "0.3.25"
reqwest = { version = "0.11.13", features = ["blocking", "rustls-tls"], default-features = false } reqwest = { version = "0.11.14", features = ["blocking", "rustls-tls"], default-features = false }
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
tokio = { version = "1.24.1", features = ["full"] } tokio = { version = "1.24.2", features = ["full"] }
tracing = "0.1.37" tracing = "0.1.37"
tracing-subscriber = "0.3.16" tracing-subscriber = "0.3.16"

View File

@ -6,6 +6,6 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
serde_with = "2.1.0" serde_with = "2.2.0"
schemars = "0.8.11" schemars = "0.8.11"
parse-display = "0.8.0" parse-display = "0.8.0"

View File

@ -9,22 +9,22 @@ license = "Apache-2.0"
base64ct = { version = "1.5.3", features = ["std"] } base64ct = { version = "1.5.3", features = ["std"] }
chrono = { version = "0.4.23", features = ["serde"] } chrono = { version = "0.4.23", features = ["serde"] }
digest = "0.10.6" digest = "0.10.6"
ecdsa = { version = "0.14.8", features = ["sign", "verify"] } ecdsa = { version = "0.15.1", features = ["signing", "verifying"] }
elliptic-curve = "0.12.3" elliptic-curve = "0.12.3"
generic-array = "0.14.6" generic-array = "0.14.6"
hmac = "0.12.1" hmac = "0.12.1"
k256 = { version = "0.11.6", features = ["ecdsa"] } k256 = { version = "0.12.0", features = ["ecdsa"] }
p256 = { version = "0.11.1", features = ["ecdsa"] } p256 = { version = "0.12.0", features = ["ecdsa"] }
p384 = { version = "0.11.2", features = ["ecdsa"] } p384 = { version = "0.12.0", features = ["ecdsa"] }
rand = "0.8.5" rand = "0.8.5"
rsa = "0.7.2" rsa = "0.8.1"
schemars = "0.8.11" schemars = "0.8.11"
sec1 = "0.3.0" sec1 = "0.3.0"
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
serde_json = "1.0.91" serde_json = "1.0.91"
serde_with = { version = "2.1.0", features = ["base64"] } serde_with = { version = "2.2.0", features = ["base64"] }
sha2 = { version = "0.10.6", features = ["oid"] } sha2 = { version = "0.10.6", features = ["oid"] }
signature = "1.6.4" signature = "2.0.0"
thiserror = "1.0.38" thiserror = "1.0.38"
tracing = "0.1.37" tracing = "0.1.37"
url = { version = "2.3.1", features = ["serde"] } url = { version = "2.3.1", features = ["serde"] }

View File

@ -15,6 +15,7 @@
use digest::Digest; use digest::Digest;
use mas_iana::jose::{JsonWebKeyEcEllipticCurve, JsonWebSignatureAlg}; use mas_iana::jose::{JsonWebKeyEcEllipticCurve, JsonWebSignatureAlg};
use sha2::{Sha256, Sha384, Sha512}; use sha2::{Sha256, Sha384, Sha512};
use signature::rand_core::CryptoRngCore;
use thiserror::Error; use thiserror::Error;
use super::signature::Signature; use super::signature::Signature;
@ -215,7 +216,7 @@ impl From<super::Es256KSigningKey> for AsymmetricSigningKey {
impl signature::RandomizedSigner<Signature> for AsymmetricSigningKey { impl signature::RandomizedSigner<Signature> for AsymmetricSigningKey {
fn try_sign_with_rng( fn try_sign_with_rng(
&self, &self,
rng: impl rand::CryptoRng + rand::RngCore, rng: &mut impl CryptoRngCore,
msg: &[u8], msg: &[u8],
) -> Result<Signature, signature::Error> { ) -> Result<Signature, signature::Error> {
match self { match self {
@ -244,15 +245,15 @@ impl signature::RandomizedSigner<Signature> for AsymmetricSigningKey {
Ok(Signature::from_signature(&signature)) Ok(Signature::from_signature(&signature))
} }
Self::Es256(key) => { Self::Es256(key) => {
let signature = key.try_sign_with_rng(rng, msg)?; let signature: ecdsa::Signature<_> = key.try_sign_with_rng(rng, msg)?;
Ok(Signature::from_signature(&signature)) Ok(Signature::from_signature(&signature))
} }
Self::Es384(key) => { Self::Es384(key) => {
let signature = key.try_sign_with_rng(rng, msg)?; let signature: ecdsa::Signature<_> = key.try_sign_with_rng(rng, msg)?;
Ok(Signature::from_signature(&signature)) Ok(Signature::from_signature(&signature))
} }
Self::Es256K(key) => { Self::Es256K(key) => {
let signature = key.try_sign_with_rng(rng, msg)?; let signature: ecdsa::Signature<_> = key.try_sign_with_rng(rng, msg)?;
Ok(Signature::from_signature(&signature)) Ok(Signature::from_signature(&signature))
} }
} }
@ -449,15 +450,15 @@ impl signature::Verifier<Signature> for AsymmetricVerifyingKey {
key.verify(msg, &signature) key.verify(msg, &signature)
} }
Self::Es256(key) => { Self::Es256(key) => {
let signature = signature.to_signature()?; let signature: ecdsa::Signature<_> = signature.to_signature()?;
key.verify(msg, &signature) key.verify(msg, &signature)
} }
Self::Es384(key) => { Self::Es384(key) => {
let signature = signature.to_signature()?; let signature: ecdsa::Signature<_> = signature.to_signature()?;
key.verify(msg, &signature) key.verify(msg, &signature)
} }
Self::Es256K(key) => { Self::Es256K(key) => {
let signature = signature.to_signature()?; let signature: ecdsa::Signature<_> = signature.to_signature()?;
key.verify(msg, &signature) key.verify(msg, &signature)
} }
} }

View File

@ -40,18 +40,37 @@ impl<S: ArrayLength<u8>> std::fmt::Debug for Signature<S> {
} }
} }
impl<S: ArrayLength<u8>> signature::Signature for Signature<S> { impl<S: ArrayLength<u8>> Clone for Signature<S> {
fn from_bytes(bytes: &[u8]) -> Result<Self, signature::Error> { fn clone(&self) -> Self {
if bytes.len() != S::to_usize() { Self {
return Err(signature::Error::new()); signature: self.signature.clone(),
} }
Ok(Self {
signature: GenericArray::from_slice(bytes).clone(),
})
} }
} }
impl<S: ArrayLength<u8>> From<Signature<S>> for GenericArray<u8, S> {
fn from(val: Signature<S>) -> Self {
val.signature
}
}
impl<'a, S: ArrayLength<u8>> TryFrom<&'a [u8]> for Signature<S> {
type Error = InvalidLength;
fn try_from(value: &'a [u8]) -> Result<Self, Self::Error> {
if value.len() != S::to_usize() {
return Err(InvalidLength);
}
let mut signature = GenericArray::default();
signature.copy_from_slice(value);
Ok(Self { signature })
}
}
impl<S: ArrayLength<u8>> signature::SignatureEncoding for Signature<S> {
type Repr = GenericArray<u8, S>;
}
impl<S: ArrayLength<u8>> AsRef<[u8]> for Signature<S> { impl<S: ArrayLength<u8>> AsRef<[u8]> for Signature<S> {
fn as_ref(&self) -> &[u8] { fn as_ref(&self) -> &[u8] {
self.signature.as_ref() self.signature.as_ref()

View File

@ -12,45 +12,51 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
use signature::Signature as _; use signature::SignatureEncoding as _;
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct Signature { pub struct Signature {
bytes: Vec<u8>, bytes: Box<[u8]>,
} }
impl AsRef<[u8]> for Signature { impl From<Signature> for Box<[u8]> {
fn as_ref(&self) -> &[u8] { fn from(val: Signature) -> Self {
&self.bytes val.bytes
} }
} }
impl signature::Signature for Signature { impl<'a> From<&'a [u8]> for Signature {
fn from_bytes(bytes: &[u8]) -> Result<Self, signature::Error> { fn from(value: &'a [u8]) -> Self {
Ok(Self { Self {
bytes: bytes.to_vec(), bytes: value.into(),
}) }
} }
} }
impl signature::SignatureEncoding for Signature {
type Repr = Box<[u8]>;
}
impl Signature { impl Signature {
pub fn new(bytes: Vec<u8>) -> Self { pub fn new(bytes: Vec<u8>) -> Self {
Self { bytes } Self {
bytes: bytes.into(),
}
} }
pub fn from_signature<S>(signature: &S) -> Self pub fn from_signature<S>(signature: &S) -> Self
where where
S: signature::Signature, S: signature::SignatureEncoding,
{ {
Self { Self {
bytes: signature.as_bytes().to_vec(), bytes: signature.to_vec().into(),
} }
} }
pub fn to_signature<S>(&self) -> Result<S, signature::Error> pub fn to_signature<S>(&self) -> Result<S, signature::Error>
where where
S: signature::Signature, S: signature::SignatureEncoding,
{ {
S::from_bytes(self.as_bytes()) S::try_from(&self.to_bytes()).map_err(|_| signature::Error::default())
} }
} }

View File

@ -82,7 +82,7 @@ impl From<super::Hs512Key> for SymmetricKey {
impl signature::RandomizedSigner<Signature> for SymmetricKey { impl signature::RandomizedSigner<Signature> for SymmetricKey {
fn try_sign_with_rng( fn try_sign_with_rng(
&self, &self,
_rng: impl rand::CryptoRng + rand::RngCore, _rng: &mut (impl rand::CryptoRng + rand::RngCore),
msg: &[u8], msg: &[u8],
) -> Result<Signature, signature::Error> { ) -> Result<Signature, signature::Error> {
// XXX: is that implementation alright? // XXX: is that implementation alright?

View File

@ -13,9 +13,9 @@
// limitations under the License. // limitations under the License.
use base64ct::{Base64UrlUnpadded, Encoding}; use base64ct::{Base64UrlUnpadded, Encoding};
use rand::{thread_rng, CryptoRng, RngCore}; use rand::thread_rng;
use serde::{de::DeserializeOwned, Serialize}; use serde::{de::DeserializeOwned, Serialize};
use signature::{RandomizedSigner, Signature, Verifier}; use signature::{rand_core::CryptoRngCore, RandomizedSigner, SignatureEncoding, Verifier};
use thiserror::Error; use thiserror::Error;
use super::{header::JsonWebSignatureHeader, raw::RawJwt}; use super::{header::JsonWebSignatureHeader, raw::RawJwt};
@ -165,10 +165,7 @@ where
#[derive(Debug, Error)] #[derive(Debug, Error)]
pub enum JwtVerificationError { pub enum JwtVerificationError {
#[error("failed to parse signature")] #[error("failed to parse signature")]
ParseSignature { ParseSignature,
#[source]
inner: signature::Error,
},
#[error("signature verification failed")] #[error("signature verification failed")]
Verify { Verify {
@ -178,8 +175,9 @@ pub enum JwtVerificationError {
} }
impl JwtVerificationError { impl JwtVerificationError {
fn parse_signature(inner: signature::Error) -> Self { #[allow(clippy::needless_pass_by_value)]
Self::ParseSignature { inner } fn parse_signature<E>(_inner: E) -> Self {
Self::ParseSignature
} }
fn verify(inner: signature::Error) -> Self { fn verify(inner: signature::Error) -> Self {
@ -214,10 +212,10 @@ impl<'a, T> Jwt<'a, T> {
pub fn verify<K, S>(&self, key: &K) -> Result<(), JwtVerificationError> pub fn verify<K, S>(&self, key: &K) -> Result<(), JwtVerificationError>
where where
K: Verifier<S>, K: Verifier<S>,
S: Signature, S: SignatureEncoding,
{ {
let signature = let signature =
S::from_bytes(&self.signature).map_err(JwtVerificationError::parse_signature)?; S::try_from(&self.signature).map_err(JwtVerificationError::parse_signature)?;
key.verify(self.raw.signed_part().as_bytes(), &signature) key.verify(self.raw.signed_part().as_bytes(), &signature)
.map_err(JwtVerificationError::verify) .map_err(JwtVerificationError::verify)
@ -306,23 +304,23 @@ impl<T> Jwt<'static, T> {
) -> Result<Self, JwtSignatureError> ) -> Result<Self, JwtSignatureError>
where where
K: RandomizedSigner<S>, K: RandomizedSigner<S>,
S: Signature, S: SignatureEncoding,
T: Serialize, T: Serialize,
{ {
#[allow(clippy::disallowed_methods)] #[allow(clippy::disallowed_methods)]
Self::sign_with_rng(thread_rng(), header, payload, key) Self::sign_with_rng(&mut thread_rng(), header, payload, key)
} }
pub fn sign_with_rng<R, K, S>( pub fn sign_with_rng<R, K, S>(
rng: R, rng: &mut R,
header: JsonWebSignatureHeader, header: JsonWebSignatureHeader,
payload: T, payload: T,
key: &K, key: &K,
) -> Result<Self, JwtSignatureError> ) -> Result<Self, JwtSignatureError>
where where
R: CryptoRng + RngCore, R: CryptoRngCore,
K: RandomizedSigner<S>, K: RandomizedSigner<S>,
S: Signature, S: SignatureEncoding,
T: Serialize, T: Serialize,
{ {
let header_ = serde_json::to_vec(&header).map_err(JwtSignatureError::encode_header)?; let header_ = serde_json::to_vec(&header).map_err(JwtSignatureError::encode_header)?;
@ -336,10 +334,7 @@ impl<T> Jwt<'static, T> {
let first_dot = header_.len(); let first_dot = header_.len();
let second_dot = inner.len(); let second_dot = inner.len();
let signature = key let signature = key.try_sign_with_rng(rng, inner.as_bytes())?.to_vec();
.try_sign_with_rng(rng, inner.as_bytes())?
.as_bytes()
.to_vec();
let signature_ = Base64UrlUnpadded::encode_string(&signature); let signature_ = Base64UrlUnpadded::encode_string(&signature);
inner.reserve_exact(1 + signature_.len()); inner.reserve_exact(1 + signature_.len());
inner.push('.'); inner.push('.');
@ -386,7 +381,9 @@ mod tests {
let payload = serde_json::json!({"hello": "world"}); let payload = serde_json::json!({"hello": "world"});
let key = ecdsa::SigningKey::<p256::NistP256>::random(&mut thread_rng()); let key = ecdsa::SigningKey::<p256::NistP256>::random(&mut thread_rng());
let signed = Jwt::sign(header, payload, &key).unwrap(); let signed = Jwt::sign::<_, ecdsa::Signature<_>>(header, payload, &key).unwrap();
signed.verify(&key.verifying_key()).unwrap(); signed
.verify::<_, ecdsa::Signature<_>>(key.verifying_key())
.unwrap();
} }
} }

View File

@ -116,7 +116,7 @@ macro_rules! asymetric_jwt_test {
#[test] #[test]
fn sign_jwt() { fn sign_jwt() {
let rng = ChaCha8Rng::seed_from_u64(42); let mut rng = ChaCha8Rng::seed_from_u64(42);
let alg = JsonWebSignatureAlg::$alg; let alg = JsonWebSignatureAlg::$alg;
let payload = Payload { let payload = Payload {
hello: "world".to_string(), hello: "world".to_string(),
@ -129,7 +129,7 @@ macro_rules! asymetric_jwt_test {
let key = mas_jose::jwa::AsymmetricSigningKey::from_jwk_and_alg(key.params(), &alg) let key = mas_jose::jwa::AsymmetricSigningKey::from_jwk_and_alg(key.params(), &alg)
.unwrap(); .unwrap();
let jwt: Jwt<'_, Payload> = Jwt::sign_with_rng(rng, header, payload, &key).unwrap(); let jwt: Jwt<'_, Payload> = Jwt::sign_with_rng(&mut rng, header, payload, &key).unwrap();
insta::assert_snapshot!(jwt.as_str()); insta::assert_snapshot!(jwt.as_str());
} }

View File

@ -11,16 +11,16 @@ aead = { version = "0.5.1", features = ["std"] }
const-oid = { version = "0.9.1", features = ["std"] } const-oid = { version = "0.9.1", features = ["std"] }
cookie = { version = "0.16.2", features = ["key-expansion", "private"] } cookie = { version = "0.16.2", features = ["key-expansion", "private"] }
der = { version = "0.6.1", features = ["std"] } der = { version = "0.6.1", features = ["std"] }
ecdsa = { version = "0.14.8", features = ["std"] } ecdsa = { version = "0.15.1", features = ["std"] }
elliptic-curve = { version = "0.12.3", features = ["std", "pem", "sec1"] } elliptic-curve = { version = "0.12.3", features = ["std", "pem", "sec1"] }
k256 = { version = "0.11.6", features = ["std"] } k256 = { version = "0.12.0", features = ["std"] }
p256 = { version = "0.11.1", features = ["std"] } p256 = { version = "0.12.0", features = ["std"] }
p384 = { version = "0.11.2", features = ["std"] } p384 = { version = "0.12.0", features = ["std"] }
pem-rfc7468 = { version = "0.6.0", features = ["std"] } pem-rfc7468 = { version = "0.6.0", features = ["std"] }
pkcs1 = { version = "0.4.1", features = ["std"] } pkcs1 = { version = "0.4.1", features = ["std"] }
pkcs8 = { version = "0.9.0", features = ["std", "pkcs5", "encryption"] } pkcs8 = { version = "0.9.0", features = ["std", "pkcs5", "encryption"] }
rand = "0.8.5" rand = "0.8.5"
rsa = { version = "0.7.2", features = ["std", "pem"] } rsa = { version = "0.8.1", features = ["std", "pem"] }
sec1 = { version = "0.3.0", features = ["std"] } sec1 = { version = "0.3.0", features = ["std"] }
spki = { version = "0.6.0", features = ["std"] } spki = { version = "0.6.0", features = ["std"] }
thiserror = "1.0.38" thiserror = "1.0.38"

View File

@ -12,7 +12,7 @@ http-body = "0.4.5"
hyper = { version = "0.14.23", features = ["server", "http1", "http2", "tcp"] } hyper = { version = "0.14.23", features = ["server", "http1", "http2", "tcp"] }
pin-project-lite = "0.2.9" pin-project-lite = "0.2.9"
thiserror = "1.0.38" thiserror = "1.0.38"
tokio = { version = "1.24.1", features = ["net", "rt", "macros", "signal", "time"] } tokio = { version = "1.24.2", features = ["net", "rt", "macros", "signal", "time"] }
tokio-rustls = "0.23.4" tokio-rustls = "0.23.4"
tower-http = { version = "0.3.5", features = ["add-extension"] } tower-http = { version = "0.3.5", features = ["add-extension"] }
tower-service = "0.3.2" tower-service = "0.3.2"
@ -21,8 +21,8 @@ libc = "0.2.139"
[dev-dependencies] [dev-dependencies]
anyhow = "1.0.68" anyhow = "1.0.68"
rustls-pemfile = "1.0.1" rustls-pemfile = "1.0.2"
tokio = { version = "1.24.1", features = ["net", "rt", "macros", "signal", "time", "rt-multi-thread"] } tokio = { version = "1.24.2", features = ["net", "rt", "macros", "signal", "time", "rt-multi-thread"] }
tokio-test = "0.4.2" tokio-test = "0.4.2"
tracing-subscriber = "0.3.16" tracing-subscriber = "0.3.16"

View File

@ -13,7 +13,7 @@ language-tags = { version = "0.3.2", features = ["serde"] }
url = { version = "2.3.1", features = ["serde"] } url = { version = "2.3.1", features = ["serde"] }
parse-display = "0.8.0" parse-display = "0.8.0"
indoc = "1.0.8" indoc = "1.0.8"
serde_with = { version = "2.1.0", features = ["chrono"] } serde_with = { version = "2.2.0", features = ["chrono"] }
chrono = "0.4.23" chrono = "0.4.23"
sha2 = "0.10.6" sha2 = "0.10.6"
data-encoding = "2.3.3" data-encoding = "2.3.3"

View File

@ -33,9 +33,9 @@ rand = "0.8.5"
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
serde_json = "1.0.91" serde_json = "1.0.91"
serde_urlencoded = "0.7.1" serde_urlencoded = "0.7.1"
serde_with = "2.1.0" serde_with = "2.2.0"
thiserror = "1.0.38" thiserror = "1.0.38"
tokio = { version = "1.24.1", features = ["rt", "macros", "rt-multi-thread"] } tokio = { version = "1.24.2", features = ["rt", "macros", "rt-multi-thread"] }
tower = { version = "0.4.13", features = ["full"] } tower = { version = "0.4.13", features = ["full"] }
tracing = "0.1.37" tracing = "0.1.37"
url = { version = "2.3.1", features = ["serde"] } url = { version = "2.3.1", features = ["serde"] }
@ -48,7 +48,7 @@ oauth2-types = { path = "../oauth2-types" }
# Default http service # Default http service
http-body = { version = "0.4.5", optional = true } http-body = { version = "0.4.5", optional = true }
rustls = {version = "0.20.7", optional = true } rustls = {version = "0.20.8", optional = true }
[dependencies.hyper-rustls] [dependencies.hyper-rustls]
version = "0.23.2" version = "0.23.2"
features = ["http1", "http2", "rustls-native-certs"] features = ["http1", "http2", "rustls-native-certs"]
@ -68,4 +68,4 @@ assert_matches = "1.5.0"
bitflags = "1.3.2" bitflags = "1.3.2"
mas-keystore = { path = "../keystore" } mas-keystore = { path = "../keystore" }
rand_chacha = "0.3.1" rand_chacha = "0.3.1"
wiremock = "0.5.16" wiremock = "0.5.17"

View File

@ -11,7 +11,7 @@ opa-wasm = { git = "https://github.com/matrix-org/rust-opa-wasm.git" }
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
serde_json = "1.0.91" serde_json = "1.0.91"
thiserror = "1.0.38" thiserror = "1.0.38"
tokio = { version = "1.24.1", features = ["io-util"] } tokio = { version = "1.24.2", features = ["io-util"] }
tracing = "0.1.37" tracing = "0.1.37"
wasmtime = { version = "4.0.0", default-features = false, features = ["async", "cranelift"] } wasmtime = { version = "4.0.0", default-features = false, features = ["async", "cranelift"] }
@ -19,7 +19,7 @@ mas-data-model = { path = "../data-model" }
oauth2-types = { path = "../oauth2-types" } oauth2-types = { path = "../oauth2-types" }
[dev-dependencies] [dev-dependencies]
tokio = { version = "1.24.1", features = ["fs", "rt", "macros"] } tokio = { version = "1.24.2", features = ["fs", "rt", "macros"] }
[features] [features]
cache = ["wasmtime/cache"] cache = ["wasmtime/cache"]

View File

@ -6,7 +6,7 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
axum = { version = "0.6.2", default-features = false } axum = { version = "0.6.4", default-features = false }
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }
serde_urlencoded = "0.7.1" serde_urlencoded = "0.7.1"
url = "2.3.1" url = "2.3.1"

View File

@ -14,7 +14,7 @@ headers = "0.3.8"
http = "0.2.8" http = "0.2.8"
tower-service = "0.3.2" tower-service = "0.3.2"
tower-http = { version = "0.3.5", features = ["fs"] } tower-http = { version = "0.3.5", features = ["fs"] }
tokio = { version = "1.24.1", features = ["fs"] } tokio = { version = "1.24.2", features = ["fs"] }
[[bin]] [[bin]]
name = "render" name = "render"

View File

@ -6,7 +6,7 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
async-trait = "0.1.60" async-trait = "0.1.63"
sqlx = { version = "0.6.2", features = ["runtime-tokio-rustls", "postgres", "migrate", "chrono", "offline", "json", "uuid"] } sqlx = { version = "0.6.2", features = ["runtime-tokio-rustls", "postgres", "migrate", "chrono", "offline", "json", "uuid"] }
chrono = { version = "0.4.23", features = ["serde"] } chrono = { version = "0.4.23", features = ["serde"] }
serde = { version = "1.0.152", features = ["derive"] } serde = { version = "1.0.152", features = ["derive"] }

View File

@ -6,7 +6,7 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
async-trait = "0.1.60" async-trait = "0.1.63"
chrono = "0.4.23" chrono = "0.4.23"
thiserror = "1.0.38" thiserror = "1.0.38"
futures-util = "0.3.25" futures-util = "0.3.25"

View File

@ -6,8 +6,8 @@ edition = "2021"
license = "Apache-2.0" license = "Apache-2.0"
[dependencies] [dependencies]
tokio = "1.24.1" tokio = "1.24.2"
async-trait = "0.1.61" async-trait = "0.1.63"
tokio-stream = "0.1.11" tokio-stream = "0.1.11"
futures-util = "0.3.25" futures-util = "0.3.25"
tracing = "0.1.37" tracing = "0.1.37"

View File

@ -7,7 +7,7 @@ license = "Apache-2.0"
[dependencies] [dependencies]
tracing = "0.1.37" tracing = "0.1.37"
tokio = { version = "1.24.1", features = ["macros", "rt"] } tokio = { version = "1.24.2", features = ["macros", "rt"] }
anyhow = "1.0.68" anyhow = "1.0.68"
thiserror = "1.0.38" thiserror = "1.0.38"