Merge branch 'main' into gnunicorn/issue133

This commit is contained in:
Benjamin Kampmann
2022-04-28 12:36:36 +02:00
committed by GitHub
23 changed files with 288 additions and 214 deletions

View File

@@ -8,17 +8,17 @@ version = "1.0.0"
publish = false
[dependencies]
criterion = { version = "0.3.4", features = ["async", "async_tokio", "html_reports"] }
criterion = { version = "0.3.5", features = ["async", "async_tokio", "html_reports"] }
matrix-sdk-crypto = { path = "../crates/matrix-sdk-crypto" }
matrix-sdk-sled = { path = "../crates/matrix-sdk-sled", default-features = false, features = ["crypto-store"] }
matrix-sdk-test = { path = "../crates/matrix-sdk-test" }
ruma = { git = "https://github.com/ruma/ruma", rev = "4014e6959" }
serde_json = "1.0.79"
tempfile = "3.2.0"
tokio = { version = "1.7.1", default-features = false, features = ["rt-multi-thread"] }
tempfile = "3.3.0"
tokio = { version = "1.17.0", default-features = false, features = ["rt-multi-thread"] }
[target.'cfg(target_os = "linux")'.dependencies]
pprof = { version = "0.6.2", features = ["flamegraph", "criterion"] }
pprof = { version = "0.8.0", features = ["flamegraph", "criterion"] }
[[bench]]
name = "crypto_bench"

View File

@@ -9,23 +9,23 @@ crate-type = ["cdylib", "lib"]
name = "matrix_crypto"
[dependencies]
anyhow = "1.0.56"
anyhow = "1.0.57"
base64 = "0.13.0"
hmac = "0.11.0"
http = "0.2.4"
pbkdf2 = "0.8.0"
rand = "0.8.4"
serde = "1.0.126"
serde_json = "1.0.64"
sha2 = "0.9.5"
thiserror = "1.0.25"
tracing = "0.1.26"
tracing-subscriber = "0.2.18"
hmac = "0.12.1"
http = "0.2.6"
pbkdf2 = "0.11.0"
rand = "0.8.5"
serde = "1.0.136"
serde_json = "1.0.79"
sha2 = "0.10.2"
thiserror = "1.0.30"
tracing = "0.1.34"
tracing-subscriber = { version = "0.3.11", features = ["env-filter"] }
uniffi = "0.17.0"
zeroize = { version = "1.3.0", features = ["zeroize_derive"] }
[dependencies.js_int]
version = "0.2.1"
version = "0.2.2"
features = ["lax_deserialize"]
[dependencies.matrix-sdk-common]
@@ -45,7 +45,7 @@ git = "https://github.com/matrix-org/vodozemac"
rev = "e09c93f2c8df9770793abeec57ed984d5e1f3834"
[dependencies.tokio]
version = "1.7.1"
version = "1.17.0"
default_features = false
features = ["rt-multi-thread"]

View File

@@ -123,16 +123,16 @@ pub struct PickledInboundGroupSession {
#[derive(thiserror::Error, Debug)]
pub enum MigrationError {
/// Generic catch all error variant.
#[error("error migrating database: {message}")]
#[error("error migrating database: {error_message}")]
Generic {
/// The error message
message: String,
error_message: String,
},
}
impl From<anyhow::Error> for MigrationError {
fn from(e: anyhow::Error) -> MigrationError {
MigrationError::Generic { message: e.to_string() }
MigrationError::Generic { error_message: e.to_string() }
}
}

View File

@@ -27,7 +27,7 @@ impl Write for LoggerWrapper {
}
}
impl MakeWriter for LoggerWrapper {
impl MakeWriter<'_> for LoggerWrapper {
type Writer = LoggerWrapper;
fn make_writer(&self) -> Self::Writer {

View File

@@ -32,7 +32,7 @@ use ruma::{
},
events::{
key::verification::VerificationMethod, room::encrypted::OriginalSyncRoomEncryptedEvent,
AnyMessageLikeEventContent, EventContent,
AnyMessageLikeEventContent, AnySyncMessageLikeEvent, EventContent,
},
DeviceKeyAlgorithm, EventId, OwnedTransactionId, OwnedUserId, RoomId, UserId,
};
@@ -701,6 +701,28 @@ impl OlmMachine {
Ok(())
}
/// Receive an unencrypted verification event.
///
/// This method can be used to pass verification events that are happening
/// in unencrypted rooms to the `OlmMachine`.
///
/// **Note**: This does not need to be called for encrypted events since
/// those will get passed to the `OlmMachine` during decryption.
pub fn receive_unencrypted_verification_event(
&self,
event: &str,
room_id: &str,
) -> Result<(), CryptoStoreError> {
let room_id = RoomId::parse(room_id)?;
let event: AnySyncMessageLikeEvent = serde_json::from_str(event)?;
let event = event.into_full_event(room_id);
self.runtime.block_on(self.inner.receive_unencrypted_verification_event(&event))?;
Ok(())
}
/// Get all the verification requests that we share with the given user.
///
/// # Arguments

View File

@@ -11,7 +11,7 @@ namespace olm {
[Error]
interface MigrationError {
Generic(string message);
Generic(string error_message);
};
callback interface Logger {
@@ -299,6 +299,8 @@ interface OlmMachine {
[Throws=CryptoStoreError]
sequence<Request> share_room_key([ByRef] string room_id, sequence<string> users);
[Throws=CryptoStoreError]
void receive_unencrypted_verification_event([ByRef] string event, [ByRef] string room_id);
sequence<VerificationRequest> get_verification_requests([ByRef] string user_id);
VerificationRequest? get_verification_request([ByRef] string user_id, [ByRef] string flow_id);
Verification? get_verification([ByRef] string user_id, [ByRef] string flow_id);

View File

@@ -22,11 +22,11 @@ decode_image = ["image", "rqrr", "qrcode/image", "qrcode/svg"]
[dependencies]
base64 = "0.13.0"
byteorder = "1.4.3"
image = { version = "0.23.14", optional = true }
image = { version = "0.23.0", optional = true }
qrcode = { version = "0.12.0", default-features = false }
ruma-common = { git = "https://github.com/ruma/ruma", rev = "4014e6959" }
rqrr = { version = "0.4.0", optional = true }
thiserror = "1.0.25"
thiserror = "1.0.30"
[dependencies.vodozemac]
git = "https://github.com/matrix-org/vodozemac"

View File

@@ -24,22 +24,22 @@ sso-login = ["matrix-sdk/sso-login"]
docs = []
[dependencies]
dashmap = "5.1.0"
http = "0.2"
dashmap = "5.2.0"
http = "0.2.6"
matrix-sdk = { version = "0.4", path = "../matrix-sdk", default-features = false, features = ["appservice"] }
percent-encoding = "2.1.0"
regex = "1"
regex = "1.5.5"
ruma = { git = "https://github.com/ruma/ruma", rev = "4014e6959", features = ["client-api-c", "appservice-api-s"] }
serde = "1"
serde_json = "1"
serde_yaml = "0.8"
thiserror = "1.0"
tracing = "0.1"
url = "2"
warp = { version = "0.3.1", default-features = false }
serde = "1.0.136"
serde_json = "1.0.79"
serde_yaml = "0.8.23"
thiserror = "1.0.30"
tracing = "0.1.34"
url = "2.2.2"
warp = { version = "0.3.2", default-features = false }
[dev-dependencies]
matrix-sdk-test = { version = "0.4", path = "../matrix-sdk-test", features = ["appservice"] }
mockito = "0.30"
tokio = { version = "1", default-features = false, features = ["rt-multi-thread", "macros"] }
tracing-subscriber = "0.3.7"
mockito = "0.31.0"
tokio = { version = "1.17.0", default-features = false, features = ["rt-multi-thread", "macros"] }
tracing-subscriber = "0.3.11"

View File

@@ -24,36 +24,36 @@ qrcode = ["matrix-sdk-crypto/qrcode"]
testing = [ "http" ]
[dependencies]
async-stream = "0.3.2"
async-stream = "0.3.3"
chacha20poly1305 = { version = "0.9.0", optional = true }
dashmap = "5.1.0"
futures-core = "0.3.15"
futures-util = { version = "0.3.15", default-features = false }
futures-channel = "0.3.15"
hmac = { version = "0.12.0", optional = true }
lru = "0.7.2"
dashmap = "5.2.0"
futures-core = "0.3.21"
futures-util = { version = "0.3.21", default-features = false }
futures-channel = "0.3.21"
hmac = { version = "0.12.1", optional = true }
lru = "0.7.5"
matrix-sdk-common = { version = "0.4.0", path = "../matrix-sdk-common" }
matrix-sdk-crypto = { version = "0.4.0", path = "../matrix-sdk-crypto", optional = true }
pbkdf2 = { version = "0.10.0", default-features = false, optional = true }
rand = { version = "0.8.4", optional = true }
pbkdf2 = { version = "0.11.0", default-features = false, optional = true }
rand = { version = "0.8.5", optional = true }
ruma = { git = "https://github.com/ruma/ruma", rev = "4014e6959", features = ["client-api-c", "signatures"] }
serde = { version = "1.0.126", features = ["rc"] }
serde_json = "1.0.64"
sha2 = { version = "0.10.1", optional = true }
thiserror = "1.0.25"
tracing = "0.1.26"
serde = { version = "1.0.136", features = ["rc"] }
serde_json = "1.0.79"
sha2 = { version = "0.10.2", optional = true }
thiserror = "1.0.30"
tracing = "0.1.34"
zeroize = { version = "1.3.0", features = ["zeroize_derive"] }
anyhow = "1"
http = { version = "0.2.4", optional = true }
anyhow = "1.0.57"
http = { version = "0.2.6", optional = true }
[dev-dependencies]
futures = { version = "0.3.15", default-features = false, features = ["executor"] }
futures = { version = "0.3.21", default-features = false, features = ["executor"] }
tracing = { version = "0.1.26", features = ["log"] }
http = "0.2.4"
http = "0.2.6"
assign = "1.1.1"
env_logger = "0.9.0"
matrix-sdk-test = { version = "0.4.0", path = "../matrix-sdk-test" }
tokio = { version = "1.7.1", default-features = false, features = [
tokio = { version = "1.17.0", default-features = false, features = [
"rt-multi-thread",
"macros",
] }

View File

@@ -238,6 +238,22 @@ impl BaseClient {
self.sync_token.read().await.clone()
}
#[cfg(feature = "encryption")]
async fn handle_unenecrypted_verification_event(
&self,
event: &AnySyncMessageLikeEvent,
room_id: &RoomId,
) -> Result<()> {
if let Some(olm) = self.olm_machine().await {
olm.receive_unencrypted_verification_event(
&event.clone().into_full_event(room_id.to_owned()),
)
.await?;
}
Ok(())
}
#[allow(clippy::too_many_arguments)]
async fn handle_timeline(
&self,
@@ -301,21 +317,34 @@ impl BaseClient {
},
#[cfg(feature = "encryption")]
AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomEncrypted(
SyncMessageLikeEvent::Original(encrypted),
)) => {
if let Some(olm) = self.olm_machine().await {
if let Ok(decrypted) =
olm.decrypt_room_event(encrypted, room_id).await
{
event = decrypted.into();
AnySyncRoomEvent::MessageLike(e) => match e {
AnySyncMessageLikeEvent::RoomEncrypted(
SyncMessageLikeEvent::Original(encrypted),
) => {
if let Some(olm) = self.olm_machine().await {
if let Ok(decrypted) =
olm.decrypt_room_event(encrypted, room_id).await
{
event = decrypted.into();
}
}
}
}
// TODO if there is redacted state save the room id,
// event type and state key, add a method to get the
// requests that are needed to be called to heal this
// redacted state.
AnySyncMessageLikeEvent::RoomMessage(
SyncMessageLikeEvent::Original(original_event),
) => match &original_event.content.msgtype {
ruma::events::room::message::MessageType::VerificationRequest(
_,
) => {
self.handle_unenecrypted_verification_event(e, room_id).await?;
}
_ => (),
},
_ if e.event_type().to_string().starts_with("m.key.verification") => {
self.handle_unenecrypted_verification_event(e, room_id).await?;
}
_ => (),
},
#[cfg(not(feature = "encryption"))]
_ => (),
}

View File

@@ -16,26 +16,17 @@ default-target = "x86_64-unknown-linux-gnu"
targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
[dependencies]
async-trait = "0.1.50"
async-trait = "0.1.53"
ruma = { git = "https://github.com/ruma/ruma", rev = "4014e6959", features = ["client-api-c"] }
serde = "1.0.126"
serde = "1.0.136"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
uuid = { version = "0.8.2", default-features = false, features = [
"v4",
"serde",
] }
tokio = { version = "1.7.1", default-features = false, features = ["rt", "sync"] }
tokio = { version = "1.17.0", default-features = false, features = ["rt", "sync"] }
instant = { version = "0.1.12", features = ["now"] }
[target.'cfg(target_arch = "wasm32")'.dependencies]
async-lock = "2.4.0"
async-lock = "2.5.0"
instant = { version = "0.1.12", features = ["wasm-bindgen", "inaccurate"] }
futures-util = { version = "0.3.15", default-features = false, features = ["channel"] }
wasm-bindgen-futures = "0.4.24"
uuid = { version = "0.8.2", default-features = false, features = [
"v4",
"wasm-bindgen",
"serde",
] }
futures-util = { version = "0.3.21", default-features = false, features = ["channel"] }
wasm-bindgen-futures = "0.4.30"

View File

@@ -25,35 +25,40 @@ docsrs = []
testing = ["http"]
[dependencies]
aes = { version = "0.7.4", features = ["ctr"] }
aes-gcm = "0.9.2"
atomic = "0.5.0"
aes = "0.8.1"
aes-gcm = "0.9.4"
atomic = "0.5.1"
base64 = "0.13.0"
bs58 = { version = "0.4.0", optional = true }
byteorder = "1.4.3"
dashmap = "5.1.0"
futures-util = { version = "0.3.15", default-features = false, features = ["alloc"] }
hmac = "0.12.0"
ctr = "0.9.1"
dashmap = "5.2.0"
futures-util = { version = "0.3.21", default-features = false, features = ["alloc"] }
hmac = "0.12.1"
matrix-qrcode = { version = "0.2.0", path = "../matrix-qrcode", optional = true }
matrix-sdk-common = { version = "0.4.0", path = "../matrix-sdk-common" }
olm-rs = { version = "2.1", features = ["serde"], optional = true }
pbkdf2 = { version = "0.10.0", default-features = false }
rand = "0.8.4"
serde = { version = "1.0.126", features = ["derive", "rc"] }
serde_json = "1.0.64"
sha2 = "0.10.1"
thiserror = "1.0.25"
tracing = "0.1.26"
olm-rs = { version = "2.2.0", features = ["serde"], optional = true }
pbkdf2 = { version = "0.11.0", default-features = false }
rand = "0.8.5"
serde = { version = "1.0.136", features = ["derive", "rc"] }
serde_json = "1.0.79"
sha2 = "0.10.2"
thiserror = "1.0.30"
tracing = "0.1.34"
zeroize = { version = "1.3.0", features = ["zeroize_derive"] }
anyhow = "1"
anyhow = "1.0.57"
# feature = testing only
http = { version = "0.2.4", optional = true }
http = { version = "0.2.6", optional = true }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.vodozemac]
git = "https://github.com/matrix-org/vodozemac"
rev = "e09c93f2c8df9770793abeec57ed984d5e1f3834"
[target.'cfg(target_arch = "wasm32")'.dev-dependencies.getrandom]
version = "0.2.6"
features = ["js"]
[target.'cfg(target_arch = "wasm32")'.dependencies.vodozemac]
git = "https://github.com/matrix-org/vodozemac"
rev = "e09c93f2c8df9770793abeec57ed984d5e1f3834"
@@ -65,13 +70,11 @@ rev = "4014e6959"
features = ["client-api-c", "rand", "unstable-msc2676", "unstable-msc2677"]
[dev-dependencies]
futures = { version = "0.3.15", default-features = false, features = [
"executor",
] }
http = "0.2.4"
indoc = "1.0.3"
matches = "0.1.8"
futures = { version = "0.3.21", default-features = false, features = ["executor"] }
http = "0.2.6"
indoc = "1.0.4"
matches = "0.1.9"
matrix-sdk-test = { version = "0.4.0", path = "../matrix-sdk-test" }
proptest = "1.0.0"
# required for async_test macro
tokio = { version = "1.7.1", default-features = false, features = ["macros", "rt-multi-thread"] }
tokio = { version = "1.17.0", default-features = false, features = ["macros", "rt-multi-thread"] }

View File

@@ -18,8 +18,8 @@ use std::{
};
use aes::{
cipher::{generic_array::GenericArray, FromBlockCipher, NewBlockCipher, StreamCipher},
Aes256, Aes256Ctr,
cipher::{generic_array::GenericArray, KeyIvInit, StreamCipher},
Aes256,
};
use base64::DecodeError;
use rand::{thread_rng, RngCore};
@@ -30,12 +30,14 @@ use ruma::{
use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};
use thiserror::Error;
use zeroize::Zeroizing;
use zeroize::Zeroize;
const IV_SIZE: usize = 16;
const KEY_SIZE: usize = 32;
const VERSION: &str = "v2";
type Aes256Ctr = ctr::Ctr128BE<Aes256>;
/// A wrapper that transparently encrypts anything that implements `Read` as an
/// Matrix attachment.
pub struct AttachmentDecryptor<'a, R: Read> {
@@ -134,13 +136,20 @@ impl<'a, R: Read + 'a> AttachmentDecryptor<'a, R> {
let hash =
info.hashes.get("sha256").ok_or(DecryptorError::MissingHash)?.as_bytes().to_owned();
let key = Zeroizing::from(info.web_key.k.into_inner());
let mut key = info.web_key.k.into_inner();
let iv = info.iv.into_inner();
if key.len() != KEY_SIZE {
return Err(DecryptorError::KeyNonceLength);
}
let key_array = GenericArray::from_slice(&key);
let iv = GenericArray::from_exact_iter(iv).ok_or(DecryptorError::KeyNonceLength)?;
let sha = Sha256::default();
let aes = Aes256::new_from_slice(&key).map_err(|_| DecryptorError::KeyNonceLength)?;
let aes = Aes256Ctr::from_block_cipher(aes, &iv);
let aes = Aes256Ctr::new(key_array, &iv);
key.zeroize();
Ok(AttachmentDecryptor { inner: input, expected_hash: hash, sha, aes })
}
@@ -215,12 +224,12 @@ impl<'a, R: Read + ?Sized + 'a> AttachmentEncryptor<'a, R> {
/// let key = encryptor.finish();
/// ```
pub fn new(reader: &'a mut R) -> Self {
let mut key = Zeroizing::new([0u8; KEY_SIZE]);
let mut iv = Zeroizing::new([0u8; IV_SIZE]);
let mut key = [0u8; KEY_SIZE];
let mut iv = [0u8; IV_SIZE];
let mut rng = thread_rng();
rng.fill_bytes(&mut *key);
rng.fill_bytes(&mut key);
// Only populate the first 8 bytes with randomness, the rest is 0
// initialized for the counter.
rng.fill_bytes(&mut iv[0..8]);
@@ -229,15 +238,15 @@ impl<'a, R: Read + ?Sized + 'a> AttachmentEncryptor<'a, R> {
kty: "oct".to_owned(),
key_ops: vec!["encrypt".to_owned(), "decrypt".to_owned()],
alg: "A256CTR".to_owned(),
k: Base64::new((*key).to_vec()),
k: Base64::new(key.to_vec()),
ext: true,
});
let encoded_iv = Base64::new((*iv).to_vec());
let iv = GenericArray::from_slice(&*iv);
let key = GenericArray::from_slice(&*key);
let encoded_iv = Base64::new((iv).to_vec());
let aes = Aes256::new(key);
let aes = Aes256Ctr::from_block_cipher(aes, iv);
let key_array = &key.into();
let aes = Aes256Ctr::new(key_array, &iv.into());
key.zeroize();
AttachmentEncryptor {
finished: false,

View File

@@ -15,8 +15,8 @@
use std::io::{Cursor, Read, Seek, SeekFrom};
use aes::{
cipher::{generic_array::GenericArray, FromBlockCipher, NewBlockCipher, StreamCipher},
Aes256, Aes256Ctr,
cipher::{generic_array::GenericArray, KeyIvInit, StreamCipher},
Aes256,
};
use byteorder::{BigEndian, ReadBytesExt};
use hmac::{Hmac, Mac};
@@ -32,6 +32,8 @@ use crate::{
utilities::{decode, encode, DecodeError},
};
type Aes256Ctr = ctr::Ctr128BE<Aes256>;
const SALT_SIZE: usize = 16;
const IV_SIZE: usize = 16;
const MAC_SIZE: usize = 32;
@@ -169,24 +171,23 @@ fn encrypt_helper(plaintext: &mut [u8], passphrase: &str, rounds: u32) -> String
let mut iv = u128::from_be_bytes(iv);
iv &= !(1 << 63);
let iv = iv.to_be_bytes();
pbkdf2::<Hmac<Sha512>>(passphrase.as_bytes(), &salt, rounds, &mut derived_keys);
let (key, hmac_key) = derived_keys.split_at(KEY_SIZE);
let key = GenericArray::from_slice(key);
let iv = iv.to_be_bytes();
let iv = GenericArray::from_slice(&iv);
let aes = Aes256::new(key);
let mut aes = Aes256Ctr::from_block_cipher(aes, iv);
// This is fine because the key is guaranteed to be 32 bytes, derive 64
// bytes and split at the middle.
let key_array = GenericArray::from_slice(key);
let mut aes = Aes256Ctr::new(key_array, &iv.into());
aes.apply_keystream(plaintext);
let mut payload: Vec<u8> = vec![];
payload.extend(&VERSION.to_be_bytes());
payload.extend(&salt);
payload.extend(&*iv);
payload.extend(&iv);
payload.extend(&rounds.to_be_bytes());
payload.extend_from_slice(plaintext);
@@ -196,6 +197,8 @@ fn encrypt_helper(plaintext: &mut [u8], passphrase: &str, rounds: u32) -> String
payload.extend(mac.into_bytes());
derived_keys.zeroize();
encode(payload)
}
@@ -234,16 +237,17 @@ fn decrypt_helper(ciphertext: &str, passphrase: &str) -> Result<String, KeyExpor
hmac.update(&decoded[0..ciphertext_end]);
hmac.verify_slice(&mac).map_err(|_| KeyExportError::InvalidMac)?;
let key = GenericArray::from_slice(key);
let iv = GenericArray::from_slice(&iv);
// This is fine because the key is guaranteed to be 32 bytes, derive 64
// bytes and split at the middle.
let key_array = GenericArray::from_slice(key);
let ciphertext = &mut decoded[ciphertext_start..ciphertext_end];
let aes = Aes256::new(key);
let mut aes = Aes256Ctr::from_block_cipher(aes, iv);
let mut aes = Aes256Ctr::new(key_array, &iv.into());
aes.apply_keystream(ciphertext);
let ret = String::from_utf8(ciphertext.to_owned());
derived_keys.zeroize();
ciphertext.zeroize();
Ok(ret?)

View File

@@ -40,7 +40,7 @@ use ruma::{
},
room_key::ToDeviceRoomKeyEvent,
secret::request::SecretName,
AnyRoomEvent, AnyToDeviceEvent, MessageLikeEventContent,
AnyMessageLikeEvent, AnyRoomEvent, AnyToDeviceEvent, MessageLikeEventContent,
},
DeviceId, DeviceKeyAlgorithm, DeviceKeyId, EventEncryptionAlgorithm, OwnedDeviceId,
OwnedDeviceKeyId, OwnedTransactionId, OwnedUserId, RoomId, TransactionId, UInt, UserId,
@@ -723,6 +723,20 @@ impl OlmMachine {
self.group_session_manager.share_group_session(room_id, users, encryption_settings).await
}
/// Receive an unencrypted verification event.
///
/// This method can be used to pass verification events that are happening
/// in unencrypted rooms to the `OlmMachine`.
///
/// **Note**: This does not need to be called for encrypted events since
/// those will get passed to the `OlmMachine` during decryption.
pub async fn receive_unencrypted_verification_event(
&self,
event: &AnyMessageLikeEvent,
) -> StoreResult<()> {
self.verification_machine.receive_any_event(event).await
}
/// Receive and properly handle a decrypted to-device event.
///
/// # Arguments

View File

@@ -11,31 +11,31 @@ encryption = ["matrix-sdk-base/encryption", "matrix-sdk-crypto"]
default-target = "wasm32-unknown-unknown"
[dependencies]
anyhow = "1"
base64 = { version = "0.13.0" }
dashmap = "5.1.0"
futures-util = { version = "0.3.15", default-features = false }
indexed_db_futures = { version = "0.2.0" }
anyhow = "1.0.57"
base64 = "0.13.0"
dashmap = "5.2.0"
futures-util = { version = "0.3.21", default-features = false }
indexed_db_futures = "0.2.3"
matrix-sdk-base = { path = "../matrix-sdk-base" }
matrix-sdk-store-encryption = { path = "../matrix-sdk-store-encryption" }
serde = { version = "1.0.126" }
serde_json = "1.0.64"
thiserror = "1.0.25"
tracing = "0.1.26"
wasm-bindgen = { version = "0.2.74", features = ["serde-serialize"] }
web-sys = { version = "0.3.35", features = ["IdbKeyRange"] }
serde = "1.0.136"
serde_json = "1.0.79"
thiserror = "1.0.30"
tracing = "0.1.34"
wasm-bindgen = { version = "0.2.80", features = ["serde-serialize"] }
web-sys = { version = "0.3.57", features = ["IdbKeyRange"] }
matrix-sdk-crypto = { path = "../matrix-sdk-crypto", optional = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
# for wasm32 we need to activate this
getrandom = { version = "0.2", features = ["js"] }
getrandom = { version = "0.2.6", features = ["js"] }
[dev-dependencies]
matrix-sdk-common = { path = "../matrix-sdk-common" }
matrix-sdk-base = { path = "../matrix-sdk-base", features = ["testing"] }
matrix-sdk-crypto = { path = "../matrix-sdk-crypto", features = ["testing"] }
matrix-sdk-test = { path = "../matrix-sdk-test" }
uuid = "0.8"
wasm-bindgen-test = "0.3.24"
uuid = "1.0.0"
wasm-bindgen-test = "0.3.30"

View File

@@ -10,29 +10,29 @@ state-store = ["matrix-sdk-base"]
crypto-store = ["matrix-sdk-crypto"]
[dependencies]
futures-core = "0.3.15"
futures-util = { version = "0.3.15", default-features = false }
futures-core = "0.3.21"
futures-util = { version = "0.3.21", default-features = false }
matrix-sdk-base = { path = "../matrix-sdk-base", optional = true }
matrix-sdk-common = { path = "../matrix-sdk-common" }
matrix-sdk-crypto = { path = "../matrix-sdk-crypto", optional = true }
matrix-sdk-store-encryption = { path = "../matrix-sdk-store-encryption" }
async-stream = "0.3.2"
serde = "1"
serde_json = "1.0.64"
sled = { version = "0.34.6" }
thiserror = "1.0.25"
tokio = { version = "1.7.1", default-features = false, features = ["sync", "fs"] }
tracing = "0.1.26"
anyhow = "1"
dashmap = "5.1.0"
async-stream = "0.3.3"
serde = "1.0.136"
serde_json = "1.0.79"
sled = "0.34.7"
thiserror = "1.0.30"
tokio = { version = "1.17.0", default-features = false, features = ["sync", "fs"] }
tracing = "0.1.34"
anyhow = "1.0.57"
dashmap = "5.2.0"
[dev-dependencies]
lazy_static = "1.4"
tempfile = "3.2.0"
lazy_static = "1.4.0"
tempfile = "3.3.0"
matrix-sdk-test = { version = "0.4.0", path = "../matrix-sdk-test" }
matrix-sdk-crypto = { path = "../matrix-sdk-crypto", features = ["testing"] }
matrix-sdk-base = { path = "../matrix-sdk-base", features = ["testing"] }
tokio = { version = "1.7.1", default-features = false, features = [
tokio = { version = "1.17.0", default-features = false, features = [
"rt-multi-thread",
"macros",
] }

View File

@@ -12,16 +12,16 @@ js = ["getrandom/js"]
[dependencies]
blake3 = "1.3.1"
chacha20poly1305 = { version = "0.9.0", features = ["std"] }
displaydoc = "0.2"
getrandom = { version = "0.2.5", optional = true }
displaydoc = "0.2.3"
getrandom = { version = "0.2.6", optional = true }
hmac = "0.12.1"
pbkdf2 = "0.10.1"
rand = "0.8.4"
serde = { version = "1.0.126", features = ["derive"] }
serde_json = "1.0.64"
pbkdf2 = "0.11.0"
rand = "0.8.5"
serde = { version = "1.0.136", features = ["derive"] }
serde_json = "1.0.79"
sha2 = "0.10.2"
thiserror = "1.0.26"
thiserror = "1.0.30"
zeroize = { version = "1.3.0", features = ["zeroize_derive"] }
[dev-dependencies]
anyhow = "1.0.56"
anyhow = "1.0.57"

View File

@@ -15,6 +15,6 @@ version = "0.1.0"
proc-macro = true
[dependencies]
proc-macro2 = "1.0.29"
quote = "1"
syn = { version = "1.0.81", features = ["full",] }
proc-macro2 = "1.0.37"
quote = "1.0.18"
syn = { version = "1.0.91", features = ["full"] }

View File

@@ -15,9 +15,9 @@ version = "0.4.0"
appservice = []
[dependencies]
http = "0.2.4"
http = "0.2.6"
lazy_static = "1.4.0"
matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix-sdk-test-macros" }
ruma = { git = "https://github.com/ruma/ruma", rev = "4014e6959", features = ["client-api-c"] }
serde = "1.0.126"
serde_json = "1.0.64"
serde = "1.0.136"
serde_json = "1.0.79"

View File

@@ -49,31 +49,31 @@ docsrs = [
]
[dependencies]
anyhow = { version = "1.0.42", optional = true }
anyhow = { version = "1.0.57", optional = true }
anymap2 = "0.13.0"
bytes = "1.0.1"
dashmap = "5.1.0"
event-listener = "2.5.1"
eyre = { version = "0.6.5", optional = true }
futures-core = "0.3.15"
futures-util = { version = "0.3.15", default-features = false }
http = "0.2.4"
bytes = "1.1.0"
dashmap = "5.2.0"
event-listener = "2.5.2"
eyre = { version = "0.6.8", optional = true }
futures-core = "0.3.21"
futures-util = { version = "0.3.21", default-features = false }
http = "0.2.6"
matrix-sdk-common = { version = "0.4.0", path = "../matrix-sdk-common" }
mime = "0.3.16"
rand = { version = "0.8.4", optional = true }
serde = "1.0.126"
serde_json = "1.0.64"
thiserror = "1.0.25"
tracing = "0.1.26"
rand = { version = "0.8.5", optional = true }
serde = "1.0.136"
serde_json = "1.0.79"
thiserror = "1.0.30"
tracing = "0.1.34"
url = "2.2.2"
zeroize = "1.3.0"
async-stream = "0.3.2"
async-stream = "0.3.3"
matrix-sdk-sled = { path = "../matrix-sdk-sled", default-features = false, optional = true }
matrix-sdk-indexeddb = { path = "../matrix-sdk-indexeddb", default-features = false, optional = true }
[dependencies.image]
version = "0.24.0"
version = "0.24.2"
default-features = false
features = [
"gif",
@@ -98,7 +98,7 @@ path = "../matrix-sdk-base"
default_features = false
[dependencies.reqwest]
version = "0.11.3"
version = "0.11.10"
default_features = false
[dependencies.ruma]
@@ -107,47 +107,47 @@ rev = "4014e6959"
features = ["client-api-c", "compat", "rand", "unstable-msc2448"]
[dependencies.tokio-stream]
version = "0.1.6"
version = "0.1.8"
features = ["net"]
optional = true
[dependencies.warp]
version = "0.3.1"
version = "0.3.2"
default-features = false
optional = true
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-timer]
version = "0.2.5"
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-timer= "0.2.5"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.backoff]
version = "0.4.0"
features = ["tokio"]
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
version = "1.7.1"
version = "1.17.0"
default-features = false
features = ["fs", "rt"]
[dev-dependencies]
anyhow = "1.0"
anyhow = "1.0.57"
dirs = "4.0.0"
futures = { version = "0.3.15", default-features = false, features = ["executor"] }
futures = { version = "0.3.21", default-features = false, features = ["executor"] }
lazy_static = "1.4.0"
matches = "0.1.8"
matches = "0.1.9"
matrix-sdk-test = { version = "0.4.0", path = "../matrix-sdk-test" }
mockito = "0.30.0"
serde_json = "1.0.64"
tempfile = "3.2.0"
tracing-subscriber = { version = "0.3.7", features = ["env-filter"] }
mockito = "0.31.0"
serde_json = "1.0.79"
tempfile = "3.3.0"
tracing-subscriber = { version = "0.3.11", features = ["env-filter"] }
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies.tokio]
version = "1.7.1"
version = "1.17.0"
default-features = false
features = ["rt-multi-thread", "macros"]
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "0.3.24"
wasm-bindgen-test = "0.3.30"
[[example]]
name = "cross_signing_bootstrap"

View File

@@ -6,12 +6,12 @@ publish = false
[dependencies]
atty = "0.2.14"
clap = "3.1.0"
futures = { version = "0.3.15", default-features = false, features = ["executor"] }
clap = "3.1.12"
futures = { version = "0.3.21", default-features = false, features = ["executor"] }
matrix-sdk-base = { path = "../../crates/matrix-sdk-base" }
matrix-sdk-sled = { path = "../../crates/matrix-sdk-sled" }
rustyline = "9.0.0"
rustyline = "9.1.2"
rustyline-derive = "0.6.0"
serde = "1.0.136"
serde_json = "1.0.79"
syntect = "4.5.0"
syntect = "4.6.0"

View File

@@ -5,7 +5,7 @@ edition = "2021"
publish = false
[dependencies]
clap = { version = "3.1.3", features = ["derive"] }
clap = { version = "3.1.12", features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"] }
serde_json = "1.0.79"
xshell = "0.1.17"