From e351c333fcd05692347f43519b616af674b7491b Mon Sep 17 00:00:00 2001 From: Pierre Hubert Date: Fri, 28 Apr 2023 08:29:04 +0000 Subject: [PATCH] Update bincode to v2.0.0-rc3 (#109) Prepare for the next major update of bincode Reviewed-on: https://gitea.communiquons.org/pierre/BasicOIDC/pulls/109 --- Cargo.lock | 73 ++++++++++++++++++++++-------------- Cargo.toml | 2 +- src/data/crypto_wrapper.rs | 14 +++---- src/data/user.rs | 3 +- src/data/webauthn_manager.rs | 5 ++- 5 files changed, 57 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 873c0f6..67b0af1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -350,9 +350,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371" +checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450" dependencies = [ "anstyle", "anstyle-parse", @@ -389,9 +389,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -604,13 +604,23 @@ dependencies = [ [[package]] name = "bincode" -version = "1.3.3" +version = "2.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95" dependencies = [ + "bincode_derive", "serde", ] +[[package]] +name = "bincode_derive" +version = "2.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e30759b3b99a1b802a7a3aa21c85c3ded5c28e1c83170d82d70f08bbf7f3e4c" +dependencies = [ + "virtue", +] + [[package]] name = "binstring" version = "0.1.1" @@ -738,9 +748,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.4" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62" +checksum = "8a1f23fa97e1d1641371b51f35535cb26959b8e27ab50d167a8b996b5bada819" dependencies = [ "clap_builder", "clap_derive", @@ -749,9 +759,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.4" +version = "4.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749" +checksum = "0fdc5d93c358224b4d6867ef1356d740de2303e9892edc06c5340daeccd96bab" dependencies = [ "anstream", "anstyle", @@ -1754,9 +1764,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf" +checksum = "2e8776872cdc2f073ccaab02e336fa321328c1e02646ebcb9d2108d0baab480d" [[package]] name = "local-channel" @@ -1985,9 +1995,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.51" +version = "0.10.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ea2d98598bf9ada7ea6ee8a30fb74f9156b63bbe495d64ec2b87c269d2dda3" +checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" dependencies = [ "bitflags", "cfg-if", @@ -2017,9 +2027,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.86" +version = "0.9.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992bac49bdbab4423199c654a5515bd2a6c6a23bf03f2dd3bdb7e5ae6259bc69" +checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" dependencies = [ "cc", "libc", @@ -2379,9 +2389,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.14" +version = "0.37.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f" +checksum = "a0661814f891c57c930a610266415528da53c4933e6dea5fb350cbfe048a9ece" dependencies = [ "bitflags", "errno", @@ -2768,9 +2778,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" dependencies = [ "autocfg", "bytes", @@ -2780,7 +2790,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "socket2", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2795,9 +2805,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -2824,11 +2834,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "cf9cf6a813d3f40c88b0b6b6f29a5c95c6cdbf97c1f9cc53fb820200f5ad814d" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -2837,13 +2846,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -2983,6 +2992,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "virtue" +version = "0.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dcc60c0624df774c82a0ef104151231d37da4962957d691c011c852b2473314" + [[package]] name = "want" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index 350d76a..3e423c1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ qrcode-generator = "4.1.8" webauthn-rs = { version = "0.4.8", features = ["danger-allow-state-serialisation"] } url = "2.3.1" aes-gcm = { version = "0.10.1", features = ["aes"] } -bincode = "1.3.3" +bincode = "2.0.0-rc.3" chrono = "0.4.24" lazy_static = "1.4.0" reqwest = { version = "0.11.16", features = ["json"] } \ No newline at end of file diff --git a/src/data/crypto_wrapper.rs b/src/data/crypto_wrapper.rs index 2f48e77..eb2d34b 100644 --- a/src/data/crypto_wrapper.rs +++ b/src/data/crypto_wrapper.rs @@ -4,9 +4,8 @@ use aes_gcm::aead::{Aead, OsRng}; use aes_gcm::{Aes256Gcm, Key, KeyInit, Nonce}; use base64::engine::general_purpose::STANDARD as BASE64_STANDARD; use base64::Engine as _; +use bincode::{Decode, Encode}; use rand::Rng; -use serde::de::DeserializeOwned; -use serde::Serialize; use crate::utils::err::Res; @@ -25,11 +24,11 @@ impl CryptoWrapper { } /// Encrypt some data - pub fn encrypt(&self, data: &T) -> Res { + pub fn encrypt(&self, data: &T) -> Res { let aes_key = Aes256Gcm::new(&self.key); let nonce_bytes = rand::thread_rng().gen::<[u8; NONCE_LEN]>(); - let serialized_data = bincode::serialize(data)?; + let serialized_data = bincode::encode_to_vec(data, bincode::config::standard())?; let mut enc = aes_key .encrypt(Nonce::from_slice(&nonce_bytes), serialized_data.as_slice()) @@ -40,7 +39,7 @@ impl CryptoWrapper { } /// Decrypt some data previously encrypted using the [`CryptoWrapper::encrypt`] method - pub fn decrypt(&self, input: &str) -> Res { + pub fn decrypt(&self, input: &str) -> Res { let bytes = BASE64_STANDARD.decode(input)?; if bytes.len() < NONCE_LEN { @@ -66,15 +65,16 @@ impl CryptoWrapper { } }; - Ok(bincode::deserialize(&dec)?) + Ok(bincode::decode_from_slice(&dec, bincode::config::standard())?.0) } } #[cfg(test)] mod test { use crate::data::crypto_wrapper::CryptoWrapper; + use bincode::{Decode, Encode}; - #[derive(serde::Serialize, serde::Deserialize, Eq, PartialEq, Debug)] + #[derive(Encode, Decode, Eq, PartialEq, Debug)] struct Message(String); #[test] diff --git a/src/data/user.rs b/src/data/user.rs index c3aafb0..74d4d25 100644 --- a/src/data/user.rs +++ b/src/data/user.rs @@ -1,3 +1,4 @@ +use bincode::{Decode, Encode}; use std::collections::HashMap; use std::net::IpAddr; @@ -10,7 +11,7 @@ use crate::data::totp_key::TotpKey; use crate::data::webauthn_manager::WebauthnPubKey; use crate::utils::time::{fmt_time, time}; -#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] +#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, Encode, Decode)] pub struct UserID(pub String); #[derive(Debug, Clone)] diff --git a/src/data/webauthn_manager.rs b/src/data/webauthn_manager.rs index 8474737..0575ed8 100644 --- a/src/data/webauthn_manager.rs +++ b/src/data/webauthn_manager.rs @@ -2,6 +2,7 @@ use std::io::ErrorKind; use std::sync::Arc; use actix_web::web; +use bincode::{Decode, Encode}; use uuid::Uuid; use webauthn_rs::prelude::{ CreationChallengeResponse, Passkey, PublicKeyCredential, RegisterPublicKeyCredential, @@ -28,7 +29,7 @@ pub struct RegisterKeyRequest { pub creation_challenge: CreationChallengeResponse, } -#[derive(Debug, serde::Serialize, serde::Deserialize)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Encode, Decode)] struct RegisterKeyOpaqueData { registration_state: String, user_id: UserID, @@ -40,7 +41,7 @@ pub struct AuthRequest { pub login_challenge: RequestChallengeResponse, } -#[derive(Debug, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Encode, Decode)] struct AuthStateOpaqueData { authentication_state: String, user_id: UserID,