From 2371a65c0352d6be0d794d4559851f42cb674432 Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 14 Aug 2026 13:26:47 +0200 Subject: [PATCH] Align NaCl crates with stable RustCrypto releases --- Cargo.lock | 185 ++++++++++++++++-------------- crypto_box/Cargo.toml | 14 +-- crypto_box/src/lib.rs | 26 +++-- crypto_box/tests/lib.rs | 11 +- crypto_secretbox/Cargo.toml | 16 +-- crypto_secretbox/src/lib.rs | 26 ++--- crypto_secretstream/Cargo.toml | 8 +- crypto_secretstream/src/header.rs | 4 +- crypto_secretstream/src/key.rs | 2 +- crypto_secretstream/src/stream.rs | 2 +- crypto_secretstream/tests/lib.rs | 21 ++-- 11 files changed, 166 insertions(+), 149 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4552087..2cc9221 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16,12 +16,12 @@ checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] name = "aead" -version = "0.6.0-rc.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac8202ab55fcbf46ca829833f347a82a2a4ce0596f0304ac322c2d100030cd56" +checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" dependencies = [ + "arrayvec", "crypto-common", - "heapless", "inout", ] @@ -52,6 +52,12 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "arrayvec" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + [[package]] name = "autocfg" version = "1.5.0" @@ -78,18 +84,18 @@ checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "blake2" -version = "0.11.0-rc.2" +version = "0.11.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edac47499deef695d9431bf241c75ea29f4cf3dcb78d39e19b31515e4ad3b08" +checksum = "061f1a09225e328e1ffbb378d2d49923c0ca5fee19fb5ac1cc9c1e9d52b93690" dependencies = [ "digest", ] [[package]] name = "block-buffer" -version = "0.11.0-rc.5" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9ef36a6fcdb072aa548f3da057640ec10859eb4e91ddf526ee648d50c76a949" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" dependencies = [ "hybrid-array", "zeroize", @@ -131,21 +137,22 @@ checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "chacha20" -version = "0.10.0-rc.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd162f2b8af3e0639d83f28a637e4e55657b7a74508dba5a9bf4da523d5c9e9" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", "cipher", "cpufeatures", + "rand_core 0.10.1", "zeroize", ] [[package]] name = "cipher" -version = "0.5.0-rc.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e12a13eb01ded5d32ee9658d94f553a19e804204f2dc811df69ab4d9e0cb8c7" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" dependencies = [ "block-buffer", "crypto-common", @@ -153,6 +160,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + [[package]] name = "core2" version = "0.4.0" @@ -164,9 +177,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" dependencies = [ "libc", ] @@ -182,12 +195,13 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.2.0-rc.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8235645834fbc6832939736ce2f2d08192652269e11010a6240f61b908a1c6" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" dependencies = [ + "getrandom 0.4.3", "hybrid-array", - "rand_core", + "rand_core 0.10.1", ] [[package]] @@ -215,7 +229,7 @@ version = "0.3.0-pre" dependencies = [ "blake2", "curve25519-dalek", - "rand_core", + "rand_core 0.9.3", "serdect", ] @@ -241,21 +255,31 @@ dependencies = [ "aead", "chacha20", "poly1305", - "rand_core", + "rand_core 0.9.3", "subtle", ] +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "curve25519-dalek" -version = "5.0.0-pre.1" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f9200d1d13637f15a6acb71e758f64624048d85b31a5fdbfd8eca1e2687d0b7" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", + "rand_core 0.10.1", "rustc_version", "subtle", "zeroize", @@ -291,34 +315,35 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.0-rc.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6749b668519cd7149ee3d11286a442a8a8bdc3a9d529605f579777bfccc5a4bc" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer", "crypto-common", - "subtle", + "ctutils", ] [[package]] name = "ed25519" -version = "3.0.0-rc.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef49c0b20c0ad088893ad2a790a29c06a012b3f05bcfc66661fd22a94b32129" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" dependencies = [ "signature", ] [[package]] name = "ed25519-dalek" -version = "3.0.0-pre.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad207ed88a133091f83224265eac21109930db09bedcad05d5252f2af2de20a1" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" dependencies = [ "curve25519-dalek", "ed25519", - "rand_core", + "rand_core 0.10.1", "sha2", + "signature", "subtle", "zeroize", ] @@ -388,17 +413,20 @@ checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 5.3.0", "wasi", ] [[package]] -name = "hash32" -version = "0.3.1" +name = "getrandom" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ - "byteorder", + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", ] [[package]] @@ -417,16 +445,6 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32", - "stable_deref_trait", -] - [[package]] name = "hex" version = "0.4.3" @@ -458,9 +476,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hybrid-array" -version = "0.4.4" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bad028b20a90afcdb5e28a53392562f1db2bdfa238aa1a978b911461bfffb92" +checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" dependencies = [ "typenum", "zeroize", @@ -478,9 +496,9 @@ dependencies = [ [[package]] name = "inout" -version = "0.2.0-rc.6" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1603f76010ff924b616c8f44815a42eb10fb0b93d308b41deaa8da6d4251fd4b" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ "hybrid-array", ] @@ -626,23 +644,14 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "poly1305" -version = "0.9.0-rc.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb78a635f75d76d856374961deecf61031c0b6f928c83dc9c0924ab6c019c298" +checksum = "6e2d0073b297041425c7c3df6eb4792d598a15323fe63346852b092eca02904c" dependencies = [ "cpufeatures", "universal-hash", ] -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - [[package]] name = "proc-macro2" version = "1.0.101" @@ -668,23 +677,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "rand" -version = "0.9.2" +name = "r-efi" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha", - "rand_core", -] +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] -name = "rand_chacha" -version = "0.9.0" +name = "rand" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ - "ppv-lite86", - "rand_core", + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] @@ -693,9 +699,15 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom", + "getrandom 0.3.3", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "redox_syscall" version = "0.5.17" @@ -757,9 +769,9 @@ dependencies = [ [[package]] name = "salsa20" -version = "0.11.0-rc.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3ff3b81c8a6e381bc1673768141383f9328048a60edddcfc752a8291a138443" +checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" dependencies = [ "cfg-if", "cipher", @@ -812,9 +824,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.11.0-rc.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1e3878ab0f98e35b2df35fe53201d088299b41a6bb63e3e34dada2ac4abd924" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", "cpufeatures", @@ -829,9 +841,12 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signature" -version = "3.0.0-rc.4" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc280a6ff65c79fbd6622f64d7127f32b85563bca8c53cd2e9141d6744a9056d" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" +dependencies = [ + "rand_core 0.10.1", +] [[package]] name = "simd-adler32" @@ -839,12 +854,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "subtle" version = "2.6.1" @@ -884,9 +893,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "unicode-ident" @@ -896,12 +905,12 @@ checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "universal-hash" -version = "0.6.0-rc.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55be643b40a21558f44806b53ee9319595bc7ca6896372e4e08e5d7d83c9cd6" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" dependencies = [ "crypto-common", - "subtle", + "ctutils", ] [[package]] diff --git a/crypto_box/Cargo.toml b/crypto_box/Cargo.toml index bab33b9..0ad925e 100644 --- a/crypto_box/Cargo.toml +++ b/crypto_box/Cargo.toml @@ -18,32 +18,32 @@ edition = "2021" rust-version = "1.85" [dependencies] -aead = { version = "0.6.0-rc.2", default-features = false } +aead = { version = "=0.6.1", default-features = false } crypto_secretbox = { version = "=0.2.0-pre.0", default-features = false, path = "../crypto_secretbox" } -curve25519-dalek = { version = "=5.0.0-pre.1", default-features = false, features = ["zeroize"] } +curve25519-dalek = { version = "=5.0.0", default-features = false, features = ["zeroize"] } subtle = { version = "2", default-features = false } zeroize = { version = "1", default-features = false } # optional dependencies chacha20 = { version = "0.10.0-rc.2", optional = true } blake2 = { version = "0.11.0-rc.2", optional = true, default-features = false } -salsa20 = { version = "0.11.0-rc.1", optional = true } +salsa20 = { version = "=0.11.0", optional = true } serdect = { version = "0.4", optional = true, default-features = false } [dev-dependencies] hex-literal = "0.4" -rand = "0.9" +rand = "0.10.2" rmp-serde = "1" -ed25519-dalek = { version = "3.0.0-pre.1", features = ["rand_core"] } +ed25519-dalek = { version = "3.0.0", features = ["rand_core"] } [features] default = ["alloc", "os_rng", "rand_core", "salsa20"] alloc = ["aead/alloc"] std = ["alloc"] -os_rng = ["aead/os_rng"] +os_rng = ["aead/getrandom"] chacha20 = ["dep:chacha20", "crypto_secretbox/chacha20"] -heapless = ["aead/heapless"] +heapless = ["aead/arrayvec"] rand_core = ["aead/rand_core"] salsa20 = ["dep:salsa20", "crypto_secretbox/salsa20"] seal = ["dep:blake2", "alloc"] diff --git a/crypto_box/src/lib.rs b/crypto_box/src/lib.rs index ecd124e..b9a5bbb 100644 --- a/crypto_box/src/lib.rs +++ b/crypto_box/src/lib.rs @@ -13,7 +13,10 @@ #![cfg_attr(not(all(feature = "os_rng", feature = "std")), doc = "```ignore")] //! # fn main() -> Result<(), Box> { //! use crypto_box::{ -//! aead::{Aead, AeadCore, rand_core::{OsRng, TryRngCore}}, +//! aead::{ +//! common::getrandom::{rand_core::UnwrapErr, SysRng}, +//! Aead, Generate, Nonce, +//! }, //! SalsaBox, PublicKey, SecretKey //! }; //! @@ -23,7 +26,7 @@ //! //! // Generate a random secret key. //! // NOTE: The secret key bytes can be accessed by calling `secret_key.as_bytes()` -//! let alice_secret_key = SecretKey::generate(&mut OsRng.unwrap_err()); +//! let alice_secret_key = SecretKey::generate(&mut UnwrapErr(SysRng)); //! //! // Get the public key for the secret key we just generated //! let alice_public_key_bytes = alice_secret_key.public_key().as_bytes().clone(); @@ -41,7 +44,7 @@ //! let alice_box = SalsaBox::new(&bob_public_key, &alice_secret_key); //! //! // Get a random nonce to encrypt the message under -//! let nonce = SalsaBox::generate_nonce_with_rng(&mut OsRng.unwrap_err()); +//! let nonce = Nonce::::generate(); //! //! // Message to encrypt //! let plaintext = b"Top secret message we're encrypting"; @@ -96,11 +99,14 @@ )] //! # fn main() -> Result<(), Box> { //! use crypto_box::{ -//! aead::{Aead, AeadCore, Payload, rand_core::{OsRng, TryRngCore}}, +//! aead::{ +//! common::getrandom::{rand_core::UnwrapErr, SysRng}, +//! Aead, Generate, Nonce, +//! }, //! ChaChaBox, PublicKey, SecretKey //! }; //! -//! let alice_secret_key = SecretKey::generate(&mut OsRng.unwrap_err()); +//! let alice_secret_key = SecretKey::generate(&mut UnwrapErr(SysRng)); //! let alice_public_key_bytes = alice_secret_key.public_key().as_bytes().clone(); //! let bob_public_key = PublicKey::from([ //! 0xe8, 0x98, 0xc, 0x86, 0xe0, 0x32, 0xf1, 0xeb, @@ -109,7 +115,7 @@ //! 0x67, 0x8a, 0x53, 0x78, 0x9d, 0x92, 0xc7, 0x54, //! ]); //! let alice_box = ChaChaBox::new(&bob_public_key, &alice_secret_key); -//! let nonce = ChaChaBox::generate_nonce_with_rng(&mut OsRng.unwrap_err()); +//! let nonce = Nonce::::generate(); //! //! // Message to encrypt //! let plaintext = b"Top secret message we're encrypting".as_ref(); @@ -143,13 +149,13 @@ //! This crate has an optional `alloc` feature which can be disabled in e.g. //! microcontroller environments that don't have a heap. //! -//! The [`AeadInPlace::encrypt_in_place`] and [`AeadInPlace::decrypt_in_place`] +//! The [`AeadInOut::encrypt_in_place`] and [`AeadInOut::decrypt_in_place`] //! methods accept any type that impls the [`aead::Buffer`] trait which //! contains the plaintext for encryption or ciphertext for decryption. //! //! Note that if you enable the `heapless` feature of this crate, -//! you will receive an impl of `aead::Buffer` for [`heapless::Vec`] -//! (re-exported from the `aead` crate as `aead::heapless::Vec`), +//! you will receive an impl of `aead::Buffer` for [`arrayvec::ArrayVec`] +//! (re-exported from the `aead` crate as `aead::arrayvec::ArrayVec`), //! which can then be passed as the `buffer` parameter to the in-place encrypt //! and decrypt methods. //! @@ -163,7 +169,7 @@ //! [X25519]: https://cr.yp.to/ecdh.html //! [XSalsa20Poly1305]: https://nacl.cr.yp.to/secretbox.html //! [ECIES]: https://en.wikipedia.org/wiki/Integrated_Encryption_Scheme -//! [`heapless::Vec`]: https://docs.rs/heapless/latest/heapless/struct.Vec.html +//! [`arrayvec::ArrayVec`]: https://docs.rs/arrayvec/latest/arrayvec/struct.ArrayVec.html #[cfg(feature = "seal")] extern crate alloc; diff --git a/crypto_box/tests/lib.rs b/crypto_box/tests/lib.rs index cd3e908..2060a59 100644 --- a/crypto_box/tests/lib.rs +++ b/crypto_box/tests/lib.rs @@ -15,7 +15,7 @@ use crypto_box::{ }; use curve25519_dalek::EdwardsPoint; use hex_literal::hex; -use rand::{rngs::OsRng, TryRngCore}; +use rand::{rand_core::UnwrapErr, rngs::SysRng}; // Alice's keypair const ALICE_SECRET_KEY: [u8; 32] = @@ -45,7 +45,7 @@ const PLAINTEXT: &[u8] = &[ #[test] fn generate_secret_key() { - SecretKey::generate(&mut OsRng.unwrap_err()); + SecretKey::generate(&mut UnwrapErr(SysRng)); } #[test] @@ -242,7 +242,7 @@ fn seal() { ]; let pk = PublicKey::from(SEAL_PUBLIC_KEY); - let encrypted = pk.seal(&mut OsRng.unwrap_err(), SEAL_PLAINTEXT).unwrap(); + let encrypted = pk.seal(&mut UnwrapErr(SysRng), SEAL_PLAINTEXT).unwrap(); let sk = SecretKey::from(SEAL_SECRET_KEY); assert_eq!(SEAL_PLAINTEXT, sk.unseal(&encrypted).unwrap()); @@ -269,11 +269,10 @@ fn test_seal_regression() { #[cfg(feature = "chacha20")] fn seal_open_roundtrip(this: &ed25519_dalek::SigningKey, other: &ed25519_dalek::SigningKey) { - use aead::AeadCore; + use aead::{Generate, Nonce}; let msg = b"super secret message!!!!".to_vec(); - let nonce = crypto_box::ChaChaBox::try_generate_nonce_with_rng(&mut rand::rngs::OsRng) - .expect("not enough randomness"); + let nonce = Nonce::::generate_from_rng(&mut UnwrapErr(SysRng)); let shared_a = { let secret_key = crypto_box::SecretKey::from(this.to_scalar()); diff --git a/crypto_secretbox/Cargo.toml b/crypto_secretbox/Cargo.toml index 4998a80..5c3c3e1 100644 --- a/crypto_secretbox/Cargo.toml +++ b/crypto_secretbox/Cargo.toml @@ -18,16 +18,16 @@ categories = ["cryptography", "no-std"] rust-version = "1.85" [dependencies] -aead = { version = "=0.6.0-rc.2", default-features = false } -cipher = { version = "=0.5.0-rc.1", default-features = false } +aead = { version = "=0.6.1", default-features = false } +cipher = { version = "=0.5.2", default-features = false } hybrid-array = { version = "0.4.4", features = ["zeroize"] } -poly1305 = "=0.9.0-rc.2" +poly1305 = "=0.9.1" subtle = { version = "2", default-features = false } zeroize = { version = "1", default-features = false } # optional dependencies -chacha20 = { version = "=0.10.0-rc.2", optional = true, features = ["zeroize", "xchacha", "legacy"] } -salsa20 = { version = "=0.11.0-rc.1", optional = true, features = ["zeroize"] } +chacha20 = { version = "=0.10.0", optional = true, features = ["zeroize", "xchacha", "legacy"] } +salsa20 = { version = "=0.11.0", optional = true, features = ["zeroize"] } [dev-dependencies] hex-literal = "0.4" @@ -37,9 +37,11 @@ default = ["alloc", "os_rng", "rand_core", "salsa20"] alloc = ["aead/alloc"] std = ["alloc"] -heapless = ["aead/heapless"] +chacha20 = ["dep:chacha20"] +heapless = ["aead/arrayvec"] rand_core = ["aead/rand_core"] -os_rng = ["aead/os_rng"] +os_rng = ["aead/getrandom"] +salsa20 = ["dep:salsa20"] [package.metadata.docs.rs] all-features = true diff --git a/crypto_secretbox/src/lib.rs b/crypto_secretbox/src/lib.rs index 096a5f0..2a9f0fe 100644 --- a/crypto_secretbox/src/lib.rs +++ b/crypto_secretbox/src/lib.rs @@ -14,13 +14,13 @@ #![cfg_attr(not(all(feature = "os_rng", feature = "std")), doc = "```ignore")] //! # fn main() -> Result<(), Box> { //! use crypto_secretbox::{ -//! aead::{Aead, AeadCore, KeyInit, rand_core::{OsRng, TryRngCore}}, +//! aead::{Aead, Generate, Key, KeyInit}, //! XSalsa20Poly1305, Nonce //! }; //! -//! let key = XSalsa20Poly1305::generate_key_with_rng(&mut OsRng.unwrap_err()); +//! let key = Key::::generate(); //! let cipher = XSalsa20Poly1305::new(&key); -//! let nonce = XSalsa20Poly1305::generate_nonce_with_rng(&mut OsRng.unwrap_err()); // unique per message +//! let nonce = Nonce::generate(); // unique per message //! let ciphertext = cipher.encrypt(&nonce, b"plaintext message".as_ref())?; //! let plaintext = cipher.decrypt(&nonce, ciphertext.as_ref())?; //! assert_eq!(&plaintext, b"plaintext message"); @@ -33,13 +33,13 @@ //! This crate has an optional `alloc` feature which can be disabled in e.g. //! microcontroller environments that don't have a heap. //! -//! The [`AeadInPlace::encrypt_in_place`] and [`AeadInPlace::decrypt_in_place`] +//! The [`AeadInOut::encrypt_in_place`] and [`AeadInOut::decrypt_in_place`] //! methods accept any type that impls the [`aead::Buffer`] trait which //! contains the plaintext for encryption or ciphertext for decryption. //! //! Note that if you enable the `heapless` feature of this crate, -//! you will receive an impl of [`aead::Buffer`] for `heapless::Vec` -//! (re-exported from the `aead` crate as [`aead::heapless::Vec`]), +//! you will receive an impl of [`aead::Buffer`] for `arrayvec::ArrayVec` +//! (re-exported from the `aead` crate as [`aead::arrayvec::ArrayVec`]), //! which can then be passed as the `buffer` parameter to the in-place encrypt //! and decrypt methods: //! @@ -53,26 +53,26 @@ )] //! # fn main() -> Result<(), Box> { //! use crypto_secretbox::{ -//! aead::{AeadCore, AeadInPlace, KeyInit, rand_core::{OsRng, TryRngCore}, heapless::Vec}, +//! aead::{arrayvec::ArrayVec, AeadInOut, Generate, Key, KeyInit}, //! XSalsa20Poly1305, Nonce, //! }; //! -//! let key = XSalsa20Poly1305::generate_key_with_rng(&mut OsRng.unwrap_err()); +//! let key = Key::::generate(); //! let cipher = XSalsa20Poly1305::new(&key); -//! let nonce = XSalsa20Poly1305::generate_nonce_with_rng(&mut OsRng.unwrap_err()); // unique per message +//! let nonce = Nonce::generate(); // unique per message //! -//! let mut buffer: Vec = Vec::new(); // Note: buffer needs 16-bytes overhead for auth tag -//! buffer.extend_from_slice(b"plaintext message"); +//! let mut buffer: ArrayVec = ArrayVec::new(); // Note: buffer needs 16-bytes overhead for auth tag +//! buffer.try_extend_from_slice(b"plaintext message").unwrap(); //! //! // Encrypt `buffer` in-place, replacing the plaintext contents with ciphertext //! cipher.encrypt_in_place(&nonce, b"", &mut buffer)?; //! //! // `buffer` now contains the message ciphertext -//! assert_ne!(&buffer, b"plaintext message"); +//! assert_ne!(buffer.as_slice(), b"plaintext message"); //! //! // Decrypt `buffer` in-place, replacing its ciphertext context with the original plaintext //! cipher.decrypt_in_place(&nonce, b"", &mut buffer)?; -//! assert_eq!(&buffer, b"plaintext message"); +//! assert_eq!(buffer.as_slice(), b"plaintext message"); //! # Ok(()) //! # } //! ``` diff --git a/crypto_secretstream/Cargo.toml b/crypto_secretstream/Cargo.toml index dab8312..add5ffd 100644 --- a/crypto_secretstream/Cargo.toml +++ b/crypto_secretstream/Cargo.toml @@ -17,9 +17,9 @@ edition = "2021" rust-version = "1.85" [dependencies] -aead = { version = "=0.6.0-rc.2", default-features = false } -chacha20 = { version = "=0.10.0-rc.2", features = ["xchacha"] } -poly1305 = "0.9.0-rc.2" +aead = { version = "=0.6.1", default-features = false } +chacha20 = { version = "=0.10.0", features = ["xchacha"] } +poly1305 = "=0.9.1" subtle = { version = "2", default-features = false } rand_core = { version = "0.9", optional = true } @@ -32,7 +32,7 @@ default = ["std", "rand_core"] alloc = ["aead/alloc"] std = ["alloc", "rand_core?/std"] -heapless = ["aead/heapless"] +heapless = ["aead/arrayvec"] rand_core = ["dep:rand_core"] [package.metadata.docs.rs] diff --git a/crypto_secretstream/src/header.rs b/crypto_secretstream/src/header.rs index f4f75c9..43f9d23 100644 --- a/crypto_secretstream/src/header.rs +++ b/crypto_secretstream/src/header.rs @@ -66,9 +66,9 @@ mod tests { #[test] fn can_be_constructed_by_serialized() { - let header = Header::generate(&mut OsRng.unwrap_err()); + let header = Header::generate(OsRng.unwrap_err()); - let reconstructed_header = Header::from(header); + let reconstructed_header = Header::from(*header.as_ref()); assert_eq!(header.as_ref(), reconstructed_header.as_ref()); } diff --git a/crypto_secretstream/src/key.rs b/crypto_secretstream/src/key.rs index 30ab2eb..494a317 100644 --- a/crypto_secretstream/src/key.rs +++ b/crypto_secretstream/src/key.rs @@ -60,7 +60,7 @@ mod tests { #[test] fn can_be_constructed_by_serialized() { - let key = Key::generate(&mut OsRng.unwrap_err()); + let key = Key::generate(OsRng.unwrap_err()); let reconstructed_key = Key::from(*key.as_ref()); diff --git a/crypto_secretstream/src/stream.rs b/crypto_secretstream/src/stream.rs index f9a004c..9de5565 100644 --- a/crypto_secretstream/src/stream.rs +++ b/crypto_secretstream/src/stream.rs @@ -11,7 +11,7 @@ use chacha20::{ use core::{mem, slice}; use poly1305::{ universal_hash::{ - crypto_common::{BlockSizeUser, IvSizeUser}, + common::{BlockSizeUser, IvSizeUser}, UniversalHash, }, Poly1305, diff --git a/crypto_secretstream/tests/lib.rs b/crypto_secretstream/tests/lib.rs index 1defee2..ac96321 100644 --- a/crypto_secretstream/tests/lib.rs +++ b/crypto_secretstream/tests/lib.rs @@ -9,20 +9,21 @@ const ASSOCIATED_DATA: &[u8] = b"beware of giving it away"; #[test] #[cfg(feature = "heapless")] fn two_pushstreams_dont_generate_same_ciphertext() { - use aead::heapless::Vec; + use aead::arrayvec::ArrayVec; use rand_core::TryRngCore; - let key = Key::generate(&mut OsRng.unwrap_err()); + let key = Key::generate(OsRng.unwrap_err()); - let (_, mut first_stream) = PushStream::init(&mut OsRng.unwrap_err(), &key); - let (_, mut second_stream) = PushStream::init(&mut OsRng.unwrap_err(), &key); + let (_, mut first_stream) = PushStream::init(OsRng.unwrap_err(), &key); + let (_, mut second_stream) = PushStream::init(OsRng.unwrap_err(), &key); - let mut first_ciphertext = Vec::::from_slice(PLAINTEXT).expect("create first vec"); + let mut first_ciphertext = ArrayVec::::try_from(PLAINTEXT).expect("create first vec"); first_stream .push(&mut first_ciphertext, ASSOCIATED_DATA, Tag::Message) .expect("push in first stream"); - let mut second_ciphertext = Vec::::from_slice(PLAINTEXT).expect("create second vec"); + let mut second_ciphertext = + ArrayVec::::try_from(PLAINTEXT).expect("create second vec"); second_stream .push(&mut second_ciphertext, ASSOCIATED_DATA, Tag::Message) .expect("push in second stream"); @@ -35,9 +36,9 @@ fn two_pushstreams_dont_generate_same_ciphertext() { fn pushstream_doesnt_generate_same_ciphertext_for_same_plaintext() { use rand_core::TryRngCore; - let key = Key::generate(&mut OsRng.unwrap_err()); + let key = Key::generate(OsRng.unwrap_err()); - let (_, mut stream) = PushStream::init(&mut OsRng.unwrap_err(), &key); + let (_, mut stream) = PushStream::init(OsRng.unwrap_err(), &key); let mut first_ciphertext = Vec::from(PLAINTEXT); stream @@ -57,9 +58,9 @@ fn pushstream_doesnt_generate_same_ciphertext_for_same_plaintext() { fn pushed_can_be_pulled() { use rand_core::TryRngCore; - let key = Key::generate(&mut OsRng.unwrap_err()); + let key = Key::generate(OsRng.unwrap_err()); - let (header, mut push_stream) = PushStream::init(&mut rand_core::OsRng.unwrap_err(), &key); + let (header, mut push_stream) = PushStream::init(rand_core::OsRng.unwrap_err(), &key); let mut pull_stream = PullStream::init(header, &key); let mut message = Vec::from(PLAINTEXT);