Skip to content

Commit c672864

Browse files
committed
Upgraded rand to v0.9
1 parent 818c5d1 commit c672864

File tree

9 files changed

+35
-39
lines changed

9 files changed

+35
-39
lines changed

Cargo.toml

+9-9
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,20 @@ keywords = ["cryptography", "crypto", "post-quantum", "encapsulation", "kem"]
88
categories = ["cryptography", "no-std"]
99

1010
[dependencies]
11-
rand_core = "0.6.4"
12-
sha3 = { version = "0.10.8", default-features = false }
13-
subtle = { version = "2.6.0", default-features = false, features = [
11+
rand_core = "0.9"
12+
sha3 = { version = "0.10", default-features = false }
13+
subtle = { version = "2.6", default-features = false, features = [
1414
"const-generics",
1515
] }
16-
zeroize = { version = "1.8.1", default-features = false, features = ["derive"] }
16+
zeroize = { version = "1", default-features = false, features = ["derive"] }
1717

1818
[dev-dependencies]
19-
rand = "0.8.5"
20-
criterion = "0.3"
19+
rand = "0.9"
20+
criterion = "0.5"
2121
aes_ctr_drbg = "0.0.2"
22-
serde = { version = "1.0.203", features = ["derive"] }
23-
serde_json = "1.0.117"
24-
hex = "0.4.3"
22+
serde = { version = "1", features = ["derive"] }
23+
serde_json = "1"
24+
hex = "0.4"
2525

2626
[features]
2727
default = ["asm"]

benches/all.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use criterion::{criterion_group, criterion_main, Criterion};
77
macro_rules! bench_variant {
88
($bench_name:ident, $privkey_name:ident) => {
99
fn $bench_name(c: &mut Criterion) {
10-
let mut rng = rand::thread_rng();
10+
let mut rng = rand::rng();
1111

1212
let gen_bench_name = format!("{}-gen-keypair", stringify!($bench_name));
1313
c.bench_function(&gen_bench_name, |b| {

examples/simple.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use saber_kem::lightsaber::{
33
};
44

55
fn main() {
6-
let mut rng = rand::thread_rng();
6+
let mut rng = rand::rng();
77

88
// Generate a keypair
99
let sk = LightsaberSecretKey::generate(&mut rng);

src/arithmetic/matrix_arith.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl<const X: usize, const Y: usize> Default for Matrix<X, Y> {
1616

1717
impl<const X: usize, const Y: usize> Matrix<X, Y> {
1818
#[cfg(test)]
19-
pub fn rand(rng: &mut impl rand_core::CryptoRngCore) -> Self {
19+
pub fn rand(rng: &mut impl rand_core::CryptoRng) -> Self {
2020
let mut mat = Matrix::default();
2121
for i in 0..X {
2222
for j in 0..Y {
@@ -150,7 +150,7 @@ mod test {
150150
const X: usize = 4;
151151
const Y: usize = 7;
152152

153-
let mut rng = rand::thread_rng();
153+
let mut rng = rand::rng();
154154

155155
// Test mul_transpose
156156
let mat = Matrix::<X, Y>::rand(&mut rng);
@@ -182,7 +182,7 @@ mod test {
182182
const Y: usize = 7;
183183
const Z: usize = 13;
184184

185-
let mut rng = rand::thread_rng();
185+
let mut rng = rand::rng();
186186

187187
// Check that A^T B == (B^T A)^T
188188
let mat1 = Matrix::<X, Y>::rand(&mut rng);

src/arithmetic/ring_arith.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ impl Default for RingElem {
2727
impl RingElem {
2828
/// Creates a random ring element
2929
#[cfg(test)]
30-
pub(crate) fn rand(rng: &mut impl rand_core::CryptoRngCore) -> Self {
30+
pub(crate) fn rand(rng: &mut impl rand_core::CryptoRng) -> Self {
3131
let modulus = 1 << crate::consts::MODULUS_Q_BITS as u32;
3232

3333
let mut result = [0; RING_DEG];
@@ -231,12 +231,12 @@ mod test {
231231
use super::*;
232232
use crate::consts::RING_DEG;
233233

234-
use rand::{thread_rng, Rng, RngCore};
234+
use rand::{rng, Rng, RngCore};
235235

236236
// Checks that a * b == b * a and a + b == b + a for ring elements a, b
237237
#[test]
238238
fn commutativity() {
239-
let mut rng = thread_rng();
239+
let mut rng = rng();
240240

241241
for _ in 0..100 {
242242
let a = RingElem::rand(&mut rng);
@@ -256,7 +256,7 @@ mod test {
256256
// Tests equivalence of karatsuba and schoolbook multiplication
257257
#[test]
258258
fn karatsuba() {
259-
let mut rng = thread_rng();
259+
let mut rng = rng();
260260

261261
for _ in 0..100 {
262262
let a = RingElem::rand(&mut rng);
@@ -272,7 +272,7 @@ mod test {
272272
// Tests serialization and deserialization of ring elements
273273
#[test]
274274
fn from_bytes() {
275-
let mut rng = thread_rng();
275+
let mut rng = rng();
276276

277277
// The largest buffer we'll need for the following tests. We make 2 because we need to
278278
// compare values in some places
@@ -327,7 +327,7 @@ mod test {
327327

328328
// Pick a random bits_per_elem
329329
for _ in 0..10 {
330-
let bits_per_elem = rng.gen_range(1..=13);
330+
let bits_per_elem = rng.random_range(1..=13);
331331
let bitmask = (1 << bits_per_elem) - 1;
332332

333333
// Generate a random element and make sure none of the values exceed 2^bits_per_elem

src/impls.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::{
66
pke::ciphertext_len,
77
};
88

9-
use rand_core::CryptoRngCore;
9+
use rand_core::CryptoRng;
1010
use zeroize::{Zeroize, ZeroizeOnDrop};
1111

1212
/// A shared secret of a KEM execution. This is just a `[u8; 32]` that zeroes itself from memory
@@ -60,7 +60,7 @@ macro_rules! variant_impl {
6060
pub const SERIALIZED_LEN: usize = KemSecretKey::<$variant_ell>::SERIALIZED_LEN;
6161

6262
/// Generate a fresh secret key
63-
pub fn generate(rng: &mut impl CryptoRngCore) -> Self {
63+
pub fn generate(rng: &mut impl CryptoRng) -> Self {
6464
Self(KemSecretKey::generate::<$variant_mu>(rng))
6565
}
6666

@@ -99,7 +99,7 @@ macro_rules! variant_impl {
9999
/// Encapsulates a fresh shared secret
100100
pub fn encapsulate(
101101
&self,
102-
rng: &mut impl CryptoRngCore,
102+
rng: &mut impl CryptoRng,
103103
) -> ($ciphertext_name, SharedSecret) {
104104
let mut ct = [0u8; $ciphertext_len_name];
105105
let ss = self.encapsulate_in_place(rng, &mut ct);
@@ -112,7 +112,7 @@ macro_rules! variant_impl {
112112
/// buffer
113113
pub fn encapsulate_in_place(
114114
&self,
115-
rng: &mut impl CryptoRngCore,
115+
rng: &mut impl CryptoRng,
116116
ct_out: &mut $ciphertext_name,
117117
) -> SharedSecret {
118118
let shared_secret =
@@ -140,7 +140,7 @@ macro_rules! variant_impl {
140140
/// Basic test that keygen, encap, decap, ser, and deser work
141141
#[test]
142142
fn test_api() {
143-
let mut rng = rand::thread_rng();
143+
let mut rng = rand::rng();
144144
let sk = $privkey_name::generate(&mut rng);
145145
let pk = sk.public_key();
146146

src/kem.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::pke::{
55
PkeSecretKey,
66
};
77

8-
use rand_core::CryptoRngCore;
8+
use rand_core::CryptoRng;
99
use sha3::{digest::Digest, Sha3_256};
1010
use subtle::{ConditionallySelectable, ConstantTimeEq};
1111

@@ -59,7 +59,7 @@ impl<const L: usize> KemSecretKey<L> {
5959

6060
// Algorithm 20, Saber.KEM.KeyGen
6161
/// Generate a fresh secret key
62-
pub fn generate<const MU: usize>(rng: &mut impl CryptoRngCore) -> KemSecretKey<L> {
62+
pub fn generate<const MU: usize>(rng: &mut impl CryptoRng) -> KemSecretKey<L> {
6363
let (pke_sk, pke_pk) = pke::gen_keypair::<L, MU>(rng);
6464

6565
// Hash the public key
@@ -147,7 +147,7 @@ impl<const L: usize> KemSecretKey<L> {
147147
/// Encapsulate a shared secret to the given public key. Returns the shared secret.
148148
/// `out_buf` MUST have length `ciphertext_len::<L>()`.
149149
pub(crate) fn encap<const L: usize, const MU: usize, const MODULUS_T_BITS: usize>(
150-
rng: &mut impl CryptoRngCore,
150+
rng: &mut impl CryptoRng,
151151
kem_pk: &KemPublicKey<L>,
152152
out_buf: &mut [u8],
153153
) -> SharedSecret {
@@ -284,15 +284,15 @@ mod test {
284284
}
285285

286286
fn test_encap_decap<const L: usize, const MU: usize, const MODULUS_T_BITS: usize>() {
287-
let mut rng = rand::thread_rng();
287+
let mut rng = rand::rng();
288288
let mut backing_buf = [0u8; max_ciphertext_len()];
289289

290290
for _ in 0..100 {
291291
let sk = KemSecretKey::<L>::generate::<MU>(&mut rng);
292292
let pk = sk.public_key();
293293
let ct_buf = &mut backing_buf[..ciphertext_len::<L, MODULUS_T_BITS>()];
294294

295-
let m: [u8; 32] = rng.gen();
295+
let m: [u8; 32] = rng.random();
296296
let ss1 = encap_deterministic::<L, MU, MODULUS_T_BITS>(&m, &pk, ct_buf);
297297
let ss2 = decap::<L, MU, MODULUS_T_BITS>(&sk, &ct_buf);
298298
assert_eq!(ss1, ss2);
@@ -302,9 +302,9 @@ mod test {
302302
// encapsulator
303303
let perturbed_ct = ct_buf;
304304
// XOR the ciphertext with a random (nonzero) byte in a random location
305-
let idx = (rng.gen::<u32>() as usize) % perturbed_ct.len();
305+
let idx = (rng.random::<u32>() as usize) % perturbed_ct.len();
306306
let byte = loop {
307-
let b = rng.gen::<u8>();
307+
let b = rng.random::<u8>();
308308
if b != 0 {
309309
break b;
310310
}

src/pke.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{
99
ser::deserialize,
1010
};
1111

12-
use rand_core::CryptoRngCore;
12+
use rand_core::CryptoRng;
1313
use sha3::{digest::ExtendableOutput, Shake128};
1414

1515
const H1_VAL: u16 = 1 << (MODULUS_Q_BITS - MODULUS_P_BITS - 1);
@@ -91,7 +91,7 @@ pub const fn ciphertext_len<const L: usize, const MODULUS_T_BITS: usize>() -> us
9191
// Algorithm 17, Saber.PKE.KeyGen
9292
/// Generates a keypair with a secret from R^ℓ with bionimal parameter μ
9393
pub(crate) fn gen_keypair<const L: usize, const MU: usize>(
94-
rng: &mut impl CryptoRngCore,
94+
rng: &mut impl CryptoRng,
9595
) -> (PkeSecretKey<L>, PkePublicKey<L>) {
9696
let mut matrix_seed = [0u8; 32];
9797
let mut matrix_seed_unhashed = [0u8; 32];
@@ -213,7 +213,7 @@ mod test {
213213

214214
// Helper function that encrypts and decrypts a random 32-byte message
215215
fn test_enc_dec<const L: usize, const MODULUS_T_BITS: usize, const MU: usize>() {
216-
let mut rng = rand::thread_rng();
216+
let mut rng = rand::rng();
217217
let mut backing_buf =
218218
[0u8; MAX_MODULUS_T_BITS * RING_DEG / 8 + MAX_L * MODULUS_P_BITS * RING_DEG / 8];
219219

tests/kat.rs

-4
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,6 @@ impl RngCore for KatRng {
5050
fn fill_bytes(&mut self, dest: &mut [u8]) {
5151
self.0.get_random(dest)
5252
}
53-
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> {
54-
self.fill_bytes(dest);
55-
Ok(())
56-
}
5753

5854
fn next_u32(&mut self) -> u32 {
5955
unimplemented!()

0 commit comments

Comments
 (0)