diff --git a/Cargo.lock b/Cargo.lock index 0290528..6d1e356 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1241,8 +1241,7 @@ dependencies = [ [[package]] name = "x-wing" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b51507b887016c3925c84591108dadb8c099f776eb04fec6a60ae3519fee856f" +source = "git+https://github.com/str4d/RustCrypto-KEMs.git?rev=faabbc960470b38a51f4aec07ce7f1d1c381d401#faabbc960470b38a51f4aec07ce7f1d1c381d401" dependencies = [ "kem", "ml-kem", diff --git a/Cargo.toml b/Cargo.toml index 3536d87..e13b693 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,3 +95,6 @@ required-features = ["getrandom"] [lib] bench = false + +[patch.crates-io] +x-wing = { git = "https://github.com/str4d/RustCrypto-KEMs.git", rev = "faabbc960470b38a51f4aec07ce7f1d1c381d401" } diff --git a/src/kem/xwing.rs b/src/kem/xwing.rs index 5f8acae..e8ae2e7 100644 --- a/src/kem/xwing.rs +++ b/src/kem/xwing.rs @@ -14,7 +14,7 @@ use hybrid_array::typenum::{Prod, Sum, U3, U32, U64, U1024, Unsigned}; use rand_core::CryptoRng; use shake::Shake256; use subtle::{Choice, ConstantTimeEq}; -use x_wing::{Decapsulator, KeyExport, TryKeyInit, kem::Decapsulate}; +use x_wing::{Decapsulator, KeyExport, TryKeyInit, kem::TryDecapsulate}; use zeroize::Zeroize; // Type-level size constants for X-Wing @@ -48,7 +48,9 @@ impl Deserializable for PrivateKey { let mut arr = [0u8; Self::OutputSize::USIZE]; arr.copy_from_slice(encoded); - let sk = PrivateKey(arr.into()); + let sk = PrivateKey( + x_wing::DecapsulationKey::from(arr).reject_x25519_non_contributory_behaviour(), + ); arr.zeroize(); Ok(sk) @@ -178,7 +180,10 @@ impl KemTrait for XWing { "X-Wing doesn't support authenticated encapsulation. Use Base or Psk operation mode." ); - let ss = sk_recip.0.decapsulate(&encapped_key.0); + let ss = sk_recip + .0 + .try_decapsulate(&encapped_key.0) + .map_err(|_| HpkeError::DecapError)?; Ok(SharedSecret(ss)) }