Merge branch 'upgrade-deps'

master
Damir Jelić 2021-06-21 20:31:57 +02:00
commit cba22ae3b2
10 changed files with 125 additions and 99 deletions

View File

@ -19,6 +19,6 @@ base64 = "0.13.0"
byteorder = "1.4.3" byteorder = "1.4.3"
image = { version = "0.23.14", optional = true } image = { version = "0.23.14", optional = true }
qrcode = { version = "0.12.0", default-features = false } qrcode = { version = "0.12.0", default-features = false }
rqrr = { version = "0.3.2" , optional = true } rqrr = { version = "0.3.2", optional = true }
ruma-identifiers = { version = "0.19.3", git = "https://github.com/ruma/ruma", rev = "d73ab8add" } ruma-identifiers = "0.19.3"
thiserror = "1.0.24" thiserror = "1.0.25"

View File

@ -32,15 +32,15 @@ docs = ["encryption", "sled_cryptostore", "sled_state_store", "sso_login"]
[dependencies] [dependencies]
dashmap = "4.0.2" dashmap = "4.0.2"
futures = "0.3.12" futures = "0.3.15"
http = "0.2.3" http = "0.2.4"
serde_json = "1.0.61" serde_json = "1.0.64"
thiserror = "1.0.23" thiserror = "1.0.25"
tracing = "0.1.22" tracing = "0.1.26"
url = "2.2.0" url = "2.2.2"
zeroize = "1.2.0" zeroize = "1.3.0"
mime = "0.3.16" mime = "0.3.16"
rand = { version = "0.8.2", optional = true } rand = { version = "0.8.4", optional = true }
bytes = "1.0.1" bytes = "1.0.1"
matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" } matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" }
@ -51,22 +51,20 @@ path = "../matrix_sdk_base"
default_features = false default_features = false
[dependencies.reqwest] [dependencies.reqwest]
version = "0.11.0" version = "0.11.3"
default_features = false default_features = false
[dependencies.ruma] [dependencies.ruma]
version = "0.1.2" version = "0.2.0"
git = "https://github.com/ruma/ruma"
rev = "d73ab8add"
features = ["client-api-c", "compat", "unstable-pre-spec"] features = ["client-api-c", "compat", "unstable-pre-spec"]
[dependencies.tokio-stream] [dependencies.tokio-stream]
version = "0.1.4" version = "0.1.6"
features = ["net"] features = ["net"]
optional = true optional = true
[dependencies.warp] [dependencies.warp]
version = "0.3.0" version = "0.3.1"
default-features = false default-features = false
optional = true optional = true
@ -75,7 +73,7 @@ version = "0.3.0"
features = ["tokio"] features = ["tokio"]
[dependencies.tracing-futures] [dependencies.tracing-futures]
version = "0.2.4" version = "0.2.5"
default-features = false default-features = false
features = ["std", "std-future"] features = ["std", "std-future"]
@ -83,7 +81,7 @@ features = ["std", "std-future"]
futures-timer = "3.0.2" futures-timer = "3.0.2"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio] [target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
version = "1.1.0" version = "1.7.1"
default-features = false default-features = false
features = ["fs", "rt"] features = ["fs", "rt"]
@ -92,13 +90,13 @@ version = "3.0.2"
features = ["wasm-bindgen"] features = ["wasm-bindgen"]
[dev-dependencies] [dev-dependencies]
dirs = "3.0.1" dirs = "3.0.2"
matrix-sdk-test = { version = "0.2.0", path = "../matrix_sdk_test" } matrix-sdk-test = { version = "0.2.0", path = "../matrix_sdk_test" }
tokio = { version = "1.1.0", default-features = false, features = ["rt-multi-thread", "macros"] } tokio = { version = "1.7.1", default-features = false, features = ["rt-multi-thread", "macros"] }
serde_json = "1.0.61" serde_json = "1.0.64"
tracing-subscriber = "0.2.15" tracing-subscriber = "0.2.18"
tempfile = "3.2.0" tempfile = "3.2.0"
mockito = "0.29.0" mockito = "0.30.0"
lazy_static = "1.4.0" lazy_static = "1.4.0"
matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" } matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" }

View File

@ -10,11 +10,11 @@ edition = "2018"
crate-type = ["cdylib"] crate-type = ["cdylib"]
[dependencies] [dependencies]
url = "2.2.1" url = "2.2.2"
wasm-bindgen = { version = "0.2.72", features = ["serde-serialize"] } wasm-bindgen = { version = "0.2.74", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4.22" wasm-bindgen-futures = "0.4.24"
console_error_panic_hook = "0.1.6" console_error_panic_hook = "0.1.6"
web-sys = { version = "0.3.49", features = ["console"] } web-sys = { version = "0.3.51", features = ["console"] }
[dependencies.matrix-sdk] [dependencies.matrix-sdk]
path = "../.." path = "../.."

View File

@ -32,9 +32,7 @@ warp = { git = "https://github.com/seanmonstar/warp.git", rev = "629405", option
matrix-sdk = { version = "0.2", path = "../matrix_sdk", default-features = false, features = ["appservice", "native-tls"] } matrix-sdk = { version = "0.2", path = "../matrix_sdk", default-features = false, features = ["appservice", "native-tls"] }
[dependencies.ruma] [dependencies.ruma]
version = "0.1.2" version = "0.2.0"
git = "https://github.com/ruma/ruma"
rev = "d73ab8add"
features = ["client-api-c", "appservice-api-s", "unstable-pre-spec"] features = ["client-api-c", "appservice-api-s", "unstable-pre-spec"]
[dev-dependencies] [dev-dependencies]

View File

@ -26,44 +26,44 @@ docs = ["encryption", "sled_cryptostore"]
[dependencies] [dependencies]
dashmap = "4.0.2" dashmap = "4.0.2"
lru = "0.6.5" lru = "0.6.5"
ruma = { version = "0.1.2", features = ["client-api-c", "unstable-pre-spec"], git = "https://github.com/ruma/ruma", rev = "d73ab8add" } ruma = { version = "0.2.0", features = ["client-api-c", "unstable-pre-spec"] }
serde = { version = "1.0.122", features = ["rc"] } serde = { version = "1.0.126", features = ["rc"] }
serde_json = "1.0.61" serde_json = "1.0.64"
tracing = "0.1.22" tracing = "0.1.26"
matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" } matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" }
matrix-sdk-crypto = { version = "0.2.0", path = "../matrix_sdk_crypto", optional = true } matrix-sdk-crypto = { version = "0.2.0", path = "../matrix_sdk_crypto", optional = true }
# Misc dependencies # Misc dependencies
thiserror = "1.0.23" thiserror = "1.0.25"
futures = "0.3.12" futures = "0.3.15"
zeroize = { version = "1.2.0", features = ["zeroize_derive"] } zeroize = { version = "1.3.0", features = ["zeroize_derive"] }
# Deps for the sled state store # Deps for the sled state store
sled = { version = "0.34.6", optional = true } sled = { version = "0.34.6", optional = true }
chacha20poly1305 = { version = "0.7.1", optional = true } chacha20poly1305 = { version = "0.8.0", optional = true }
pbkdf2 = { version = "0.6.0", default-features = false, optional = true } pbkdf2 = { version = "0.8.0", default-features = false, optional = true }
hmac = { version = "0.10.1", optional = true } hmac = { version = "0.11.0", optional = true }
sha2 = { version = "0.9.2", optional = true } sha2 = { version = "0.9.5", optional = true }
rand = { version = "0.8.2", optional = true } rand = { version = "0.8.4", optional = true }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio] [target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
version = "1.1.0" version = "1.7.1"
default-features = false default-features = false
features = ["sync", "fs"] features = ["sync", "fs"]
[dev-dependencies] [dev-dependencies]
matrix-sdk-test = { version = "0.2.0", path = "../matrix_sdk_test" } matrix-sdk-test = { version = "0.2.0", path = "../matrix_sdk_test" }
http = "0.2.3" http = "0.2.4"
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
tokio = { version = "1.1.0", default-features = false, features = ["rt-multi-thread", "macros"] } tokio = { version = "1.7.1", default-features = false, features = ["rt-multi-thread", "macros"] }
tempfile = "3.2.0" tempfile = "3.2.0"
rustyline = "7.1.0" rustyline = "8.2.0"
rustyline-derive = "0.4.0" rustyline-derive = "0.4.0"
atty = "0.2.14" atty = "0.2.14"
clap = "2.33.3" clap = "2.33.3"
syntect = "4.5.0" syntect = "4.5.0"
[target.'cfg(target_arch = "wasm32")'.dev-dependencies] [target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "0.3.19" wasm-bindgen-test = "0.3.24"

View File

@ -11,21 +11,21 @@ repository = "https://github.com/matrix-org/matrix-rust-sdk"
version = "0.2.0" version = "0.2.0"
[dependencies] [dependencies]
async-trait = "0.1.42" async-trait = "0.1.50"
instant = { version = "0.1.9", features = ["wasm-bindgen", "now"] } instant = { version = "0.1.9", features = ["wasm-bindgen", "now"] }
ruma = { version = "0.1.2", features = ["client-api-c"], git = "https://github.com/ruma/ruma", rev = "d73ab8add" } ruma = { version = "0.2.0", features = ["client-api-c"] }
serde = "1.0.122" serde = "1.0.126"
[target.'cfg(not(target_arch = "wasm32"))'.dependencies] [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
uuid = { version = "0.8.2", default-features = false, features = ["v4", "serde"] } uuid = { version = "0.8.2", default-features = false, features = ["v4", "serde"] }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio] [target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
version = "1.1.0" version = "1.7.1"
default-features = false default-features = false
features = ["rt", "sync"] features = ["rt", "sync"]
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
futures = "0.3.12" futures = "0.3.15"
futures-locks = { version = "0.6.0", default-features = false } futures-locks = { version = "0.6.0", default-features = false }
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4.24"
uuid = { version = "0.8.2", default-features = false, features = ["v4", "wasm-bindgen"] } uuid = { version = "0.8.2", default-features = false, features = ["v4", "wasm-bindgen"] }

View File

@ -22,41 +22,41 @@ docs = ["sled_cryptostore"]
[dependencies] [dependencies]
matrix-qrcode = { version = "0.1.0", path = "../matrix_qrcode" } matrix-qrcode = { version = "0.1.0", path = "../matrix_qrcode" }
matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" } matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" }
ruma = { version = "0.1.2", features = ["client-api-c", "unstable-pre-spec"], git = "https://github.com/ruma/ruma", rev = "d73ab8add" } ruma = { version = "0.2.0", features = ["client-api-c", "unstable-pre-spec"] }
olm-rs = { version = "1.0.0", features = ["serde"] } olm-rs = { version = "1.0.1", features = ["serde"] }
getrandom = "0.2.2" getrandom = "0.2.3"
serde = { version = "1.0.122", features = ["derive", "rc"] } serde = { version = "1.0.126", features = ["derive", "rc"] }
serde_json = "1.0.61" serde_json = "1.0.64"
zeroize = { version = "1.2.0", features = ["zeroize_derive"] } zeroize = { version = "1.3.0", features = ["zeroize_derive"] }
# Misc dependencies # Misc dependencies
futures = "0.3.12" futures = "0.3.15"
sled = { version = "0.34.6", optional = true } sled = { version = "0.34.6", optional = true }
thiserror = "1.0.23" thiserror = "1.0.25"
tracing = "0.1.22" tracing = "0.1.26"
atomic = "0.5.0" atomic = "0.5.0"
dashmap = "4.0.2" dashmap = "4.0.2"
sha2 = "0.9.2" sha2 = "0.9.5"
aes-gcm = "0.8.0" aes-gcm = "0.9.2"
aes-ctr = "0.6.0" aes = { version = "0.7.4", features = ["ctr"] }
pbkdf2 = { version = "0.6.0", default-features = false } pbkdf2 = { version = "0.8.0", default-features = false }
hmac = "0.10.1" hmac = "0.11.0"
base64 = "0.13.0" base64 = "0.13.0"
byteorder = "1.4.2" byteorder = "1.4.3"
[dev-dependencies] [dev-dependencies]
tokio = { version = "1.1.0", default-features = false, features = ["rt-multi-thread", "macros"] } tokio = { version = "1.7.1", default-features = false, features = ["rt-multi-thread", "macros"] }
proptest = "0.10.1" proptest = "1.0.0"
serde_json = "1.0.61" serde_json = "1.0.64"
tempfile = "3.2.0" tempfile = "3.2.0"
http = "0.2.3" http = "0.2.4"
matrix-sdk-test = { version = "0.2.0", path = "../matrix_sdk_test" } matrix-sdk-test = { version = "0.2.0", path = "../matrix_sdk_test" }
indoc = "1.0.3" indoc = "1.0.3"
criterion = { version = "0.3.4", features = ["async", "async_tokio", "html_reports"] } criterion = { version = "0.3.4", features = ["async", "async_tokio", "html_reports"] }
[target.'cfg(target_os = "linux")'.dev-dependencies] [target.'cfg(target_os = "linux")'.dev-dependencies]
pprof = { version = "0.4.2", features = ["flamegraph"] } pprof = { version = "0.4.3", features = ["flamegraph"] }
[[bench]] [[bench]]
name = "crypto_bench" name = "crypto_bench"

View File

@ -17,9 +17,9 @@ use std::{
io::{Error as IoError, ErrorKind, Read}, io::{Error as IoError, ErrorKind, Read},
}; };
use aes_ctr::{ use aes::{
cipher::{NewStreamCipher, SyncStreamCipher}, cipher::{generic_array::GenericArray, FromBlockCipher, NewBlockCipher, StreamCipher},
Aes256Ctr, Aes256, Aes256Ctr,
}; };
use base64::DecodeError; use base64::DecodeError;
use getrandom::getrandom; use getrandom::getrandom;
@ -37,17 +37,25 @@ const VERSION: &str = "v2";
/// A wrapper that transparently encrypts anything that implements `Read` as an /// A wrapper that transparently encrypts anything that implements `Read` as an
/// Matrix attachment. /// Matrix attachment.
#[derive(Debug)]
pub struct AttachmentDecryptor<'a, R: 'a + Read> { pub struct AttachmentDecryptor<'a, R: 'a + Read> {
inner_reader: &'a mut R, inner: &'a mut R,
expected_hash: Vec<u8>, expected_hash: Vec<u8>,
sha: Sha256, sha: Sha256,
aes: Aes256Ctr, aes: Aes256Ctr,
} }
impl<'a, R: 'a + Read + std::fmt::Debug> std::fmt::Debug for AttachmentDecryptor<'a, R> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("AttachmentDecryptor")
.field("inner", &self.inner)
.field("expected_hash", &self.expected_hash)
.finish()
}
}
impl<'a, R: Read> Read for AttachmentDecryptor<'a, R> { impl<'a, R: Read> Read for AttachmentDecryptor<'a, R> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> { fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
let read_bytes = self.inner_reader.read(buf)?; let read_bytes = self.inner.read(buf)?;
if read_bytes == 0 { if read_bytes == 0 {
let hash = self.sha.finalize_reset(); let hash = self.sha.finalize_reset();
@ -126,19 +134,20 @@ impl<'a, R: Read + 'a> AttachmentDecryptor<'a, R> {
let hash = decode(info.hashes.get("sha256").ok_or(DecryptorError::MissingHash)?)?; let hash = decode(info.hashes.get("sha256").ok_or(DecryptorError::MissingHash)?)?;
let key = Zeroizing::from(decode_url_safe(info.web_key.k)?); let key = Zeroizing::from(decode_url_safe(info.web_key.k)?);
let iv = decode(info.iv)?; let iv = decode(info.iv)?;
let iv = GenericArray::from_exact_iter(iv).ok_or(DecryptorError::KeyNonceLength)?;
let sha = Sha256::default(); let sha = Sha256::default();
let aes = Aes256Ctr::new_var(&key, &iv).map_err(|_| DecryptorError::KeyNonceLength)?; let aes = Aes256::new_from_slice(&key).map_err(|_| DecryptorError::KeyNonceLength)?;
let aes = Aes256Ctr::from_block_cipher(aes, &iv);
Ok(AttachmentDecryptor { inner_reader: input, expected_hash: hash, sha, aes }) Ok(AttachmentDecryptor { inner: input, expected_hash: hash, sha, aes })
} }
} }
/// A wrapper that transparently encrypts anything that implements `Read`. /// A wrapper that transparently encrypts anything that implements `Read`.
#[derive(Debug)]
pub struct AttachmentEncryptor<'a, R: Read + 'a> { pub struct AttachmentEncryptor<'a, R: Read + 'a> {
finished: bool, finished: bool,
inner_reader: &'a mut R, inner: &'a mut R,
web_key: JsonWebKey, web_key: JsonWebKey,
iv: String, iv: String,
hashes: BTreeMap<String, String>, hashes: BTreeMap<String, String>,
@ -146,9 +155,18 @@ pub struct AttachmentEncryptor<'a, R: Read + 'a> {
sha: Sha256, sha: Sha256,
} }
impl<'a, R: 'a + Read + std::fmt::Debug> std::fmt::Debug for AttachmentEncryptor<'a, R> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("AttachmentEncryptor")
.field("inner", &self.inner)
.field("finished", &self.finished)
.finish()
}
}
impl<'a, R: Read + 'a> Read for AttachmentEncryptor<'a, R> { impl<'a, R: Read + 'a> Read for AttachmentEncryptor<'a, R> {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> { fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
let read_bytes = self.inner_reader.read(buf)?; let read_bytes = self.inner.read(buf)?;
if read_bytes == 0 { if read_bytes == 0 {
let hash = self.sha.finalize_reset(); let hash = self.sha.finalize_reset();
@ -209,12 +227,15 @@ impl<'a, R: Read + 'a> AttachmentEncryptor<'a, R> {
ext: true, ext: true,
}); });
let encoded_iv = encode(&*iv); let encoded_iv = encode(&*iv);
let iv = GenericArray::from_slice(&*iv);
let key = GenericArray::from_slice(&*key);
let aes = Aes256Ctr::new_var(&*key, &*iv).expect("Cannot create AES encryption object."); let aes = Aes256::new(key);
let aes = Aes256Ctr::from_block_cipher(aes, iv);
AttachmentEncryptor { AttachmentEncryptor {
finished: false, finished: false,
inner_reader: reader, inner: reader,
iv: encoded_iv, iv: encoded_iv,
web_key, web_key,
hashes: BTreeMap::new(), hashes: BTreeMap::new(),

View File

@ -14,9 +14,9 @@
use std::io::{Cursor, Read, Seek, SeekFrom}; use std::io::{Cursor, Read, Seek, SeekFrom};
use aes_ctr::{ use aes::{
cipher::{NewStreamCipher, SyncStreamCipher}, cipher::{generic_array::GenericArray, FromBlockCipher, NewBlockCipher, StreamCipher},
Aes256Ctr, Aes256, Aes256Ctr,
}; };
use byteorder::{BigEndian, ReadBytesExt}; use byteorder::{BigEndian, ReadBytesExt};
use getrandom::getrandom; use getrandom::getrandom;
@ -161,7 +161,12 @@ fn encrypt_helper(mut plaintext: &mut [u8], passphrase: &str, rounds: u32) -> St
pbkdf2::<Hmac<Sha512>>(passphrase.as_bytes(), &salt, rounds, &mut derived_keys); pbkdf2::<Hmac<Sha512>>(passphrase.as_bytes(), &salt, rounds, &mut derived_keys);
let (key, hmac_key) = derived_keys.split_at(KEY_SIZE); let (key, hmac_key) = derived_keys.split_at(KEY_SIZE);
let mut aes = Aes256Ctr::new_var(key, &iv.to_be_bytes()).expect("Can't create AES object"); 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);
aes.apply_keystream(&mut plaintext); aes.apply_keystream(&mut plaintext);
@ -169,11 +174,11 @@ fn encrypt_helper(mut plaintext: &mut [u8], passphrase: &str, rounds: u32) -> St
payload.extend(&VERSION.to_be_bytes()); payload.extend(&VERSION.to_be_bytes());
payload.extend(&salt); payload.extend(&salt);
payload.extend(&iv.to_be_bytes()); payload.extend(&*iv);
payload.extend(&rounds.to_be_bytes()); payload.extend(&rounds.to_be_bytes());
payload.extend_from_slice(plaintext); payload.extend_from_slice(plaintext);
let mut hmac = Hmac::<Sha256>::new_varkey(hmac_key).expect("Can't create HMAC object"); let mut hmac = Hmac::<Sha256>::new_from_slice(hmac_key).expect("Can't create HMAC object");
hmac.update(&payload); hmac.update(&payload);
let mac = hmac.finalize(); let mac = hmac.finalize();
@ -213,12 +218,16 @@ fn decrypt_helper(ciphertext: &str, passphrase: &str) -> Result<String, KeyExpor
pbkdf2::<Hmac<Sha512>>(passphrase.as_bytes(), &salt, rounds, &mut derived_keys); pbkdf2::<Hmac<Sha512>>(passphrase.as_bytes(), &salt, rounds, &mut derived_keys);
let (key, hmac_key) = derived_keys.split_at(KEY_SIZE); let (key, hmac_key) = derived_keys.split_at(KEY_SIZE);
let mut hmac = Hmac::<Sha256>::new_varkey(hmac_key).expect("Can't create an HMAC object"); let mut hmac = Hmac::<Sha256>::new_from_slice(hmac_key).expect("Can't create an HMAC object");
hmac.update(&decoded[0..ciphertext_end]); hmac.update(&decoded[0..ciphertext_end]);
hmac.verify(&mac).map_err(|_| KeyExportError::InvalidMac)?; hmac.verify(&mac).map_err(|_| KeyExportError::InvalidMac)?;
let key = GenericArray::from_slice(key);
let iv = GenericArray::from_slice(&iv);
let mut ciphertext = &mut decoded[ciphertext_start..ciphertext_end]; let mut ciphertext = &mut decoded[ciphertext_start..ciphertext_end];
let mut aes = Aes256Ctr::new_var(key, &iv).expect("Can't create an AES object"); let aes = Aes256::new(key);
let mut aes = Aes256Ctr::from_block_cipher(aes, iv);
aes.apply_keystream(&mut ciphertext); aes.apply_keystream(&mut ciphertext);
Ok(String::from_utf8(ciphertext.to_owned())?) Ok(String::from_utf8(ciphertext.to_owned())?)

View File

@ -14,10 +14,10 @@ version = "0.2.0"
appservice = [] appservice = []
[dependencies] [dependencies]
http = "0.2.3" http = "0.2.4"
lazy_static = "1.4.0" lazy_static = "1.4.0"
matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" } matrix-sdk-common = { version = "0.2.0", path = "../matrix_sdk_common" }
matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix_sdk_test_macros" } matrix-sdk-test-macros = { version = "0.1.0", path = "../matrix_sdk_test_macros" }
ruma = { version = "0.1.2", features = ["client-api-c"], git = "https://github.com/ruma/ruma", rev = "d73ab8add" } ruma = { version = "0.2.0", features = ["client-api-c"] }
serde = "1.0.122" serde = "1.0.126"
serde_json = "1.0.61" serde_json = "1.0.64"