Skip to content

Commit a860dfe

Browse files
committed
test: remove a ton of rand feature-gating
Sometihng like half the tests in this crate are gated on "rand", most of which are for dumb reasons (we are generating random keys from the thread rng). By adding a non-feature=rand "random key generator" we can enable these tests even without the rand feature. We typically also have a gate on "std", which is needed to get the thread rng, but in some cases this is the *only* reason to have a std gate. So by eliminating the rand requirement we can make tests work in nostd. In the LLM-generated tests in musig2.rs we have some rand feature gates for literally no reason at all :/. My bad. In addition to dramatically increasing nostd test coverage, the new "generate random keys" function also gives us an opportunity to use the new global context API including rerandomization.
1 parent a2cc6e7 commit a860dfe

File tree

7 files changed

+187
-135
lines changed

7 files changed

+187
-135
lines changed

src/ecdh.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,9 @@ mod tests {
194194
use crate::Secp256k1;
195195

196196
#[test]
197-
#[cfg(all(feature = "rand", feature = "std"))]
198197
fn ecdh() {
199-
let s = Secp256k1::signing_only();
200-
let (sk1, pk1) = s.generate_keypair(&mut rand::rng());
201-
let (sk2, pk2) = s.generate_keypair(&mut rand::rng());
198+
let (sk1, pk1) = crate::test_random_keypair();
199+
let (sk2, pk2) = crate::test_random_keypair();
202200

203201
let sec1 = SharedSecret::new(&pk2, &sk1);
204202
let sec2 = SharedSecret::new(&pk1, &sk2);
@@ -226,15 +224,14 @@ mod tests {
226224

227225
#[test]
228226
#[cfg(not(secp256k1_fuzz))]
229-
#[cfg(all(feature = "hashes", feature = "rand", feature = "std"))]
227+
#[cfg(feature = "hashes")]
230228
fn hashes_and_sys_generate_same_secret() {
231229
use hashes::{sha256, Hash, HashEngine};
232230

233231
use crate::ecdh::shared_secret_point;
234232

235-
let s = Secp256k1::signing_only();
236-
let (sk1, _) = s.generate_keypair(&mut rand::rng());
237-
let (_, pk2) = s.generate_keypair(&mut rand::rng());
233+
let (sk1, _) = crate::test_random_keypair();
234+
let (_, pk2) = crate::test_random_keypair();
238235

239236
let secret_sys = SharedSecret::new(&pk2, &sk1);
240237

@@ -251,7 +248,7 @@ mod tests {
251248
}
252249

253250
#[test]
254-
#[cfg(all(feature = "serde", feature = "alloc"))]
251+
#[cfg(all(feature = "serde"))]
255252
fn serde() {
256253
use serde_test::{assert_tokens, Configure, Token};
257254
#[rustfmt::skip]

src/ecdsa/recovery.rs

Lines changed: 30 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -264,17 +264,17 @@ mod tests {
264264
use crate::{Error, Message, Secp256k1, SecretKey};
265265

266266
#[test]
267-
#[cfg(all(feature = "rand", feature = "std"))]
267+
#[cfg(feature = "std")]
268268
fn capabilities() {
269269
let sign = Secp256k1::signing_only();
270270
let vrfy = Secp256k1::verification_only();
271271
let full = Secp256k1::new();
272272

273-
let msg = crate::random_32_bytes(&mut rand::rng());
273+
let msg = crate::test_random_32_bytes();
274274
let msg = Message::from_digest_slice(&msg).unwrap();
275275

276276
// Try key generation
277-
let (sk, pk) = full.generate_keypair(&mut rand::rng());
277+
let (sk, pk) = crate::test_random_keypair();
278278

279279
// Try signing
280280
assert_eq!(sign.sign_ecdsa_recoverable(msg, &sk), full.sign_ecdsa_recoverable(msg, &sk));
@@ -296,11 +296,10 @@ mod tests {
296296

297297
#[test]
298298
#[cfg(not(secp256k1_fuzz))] // fixed sig vectors can't work with fuzz-sigs
299-
#[cfg(all(feature = "rand", feature = "std"))]
299+
#[cfg(feature = "std")]
300300
#[rustfmt::skip]
301301
fn sign() {
302-
let mut s = Secp256k1::new();
303-
s.randomize(&mut rand::rng());
302+
let s = Secp256k1::new();
304303

305304
let sk = SecretKey::from_slice(&ONE).unwrap();
306305
let msg = Message::from_digest_slice(&ONE).unwrap();
@@ -321,11 +320,10 @@ mod tests {
321320

322321
#[test]
323322
#[cfg(not(secp256k1_fuzz))] // fixed sig vectors can't work with fuzz-sigs
324-
#[cfg(all(feature = "rand", feature = "std"))]
323+
#[cfg(feature = "std")]
325324
#[rustfmt::skip]
326325
fn sign_with_noncedata() {
327-
let mut s = Secp256k1::new();
328-
s.randomize(&mut rand::rng());
326+
let s = Secp256k1::new();
329327

330328
let sk = SecretKey::from_slice(&ONE).unwrap();
331329
let msg = Message::from_digest_slice(&ONE).unwrap();
@@ -346,68 +344,57 @@ mod tests {
346344
}
347345

348346
#[test]
349-
#[cfg(all(feature = "rand", feature = "std"))]
347+
#[cfg(feature = "std")]
350348
fn sign_and_verify_fail() {
351-
let mut s = Secp256k1::new();
352-
s.randomize(&mut rand::rng());
353-
354-
let msg = crate::random_32_bytes(&mut rand::rng());
355-
let msg = Message::from_digest_slice(&msg).unwrap();
349+
let s = Secp256k1::new();
356350

357-
let (sk, pk) = s.generate_keypair(&mut rand::rng());
351+
let msg = Message::from_digest(crate::test_random_32_bytes());
352+
let (sk, pk) = crate::test_random_keypair();
358353

359354
let sigr = s.sign_ecdsa_recoverable(msg, &sk);
360355
let sig = sigr.to_standard();
361356

362-
let msg = crate::random_32_bytes(&mut rand::rng());
363-
let msg = Message::from_digest_slice(&msg).unwrap();
357+
let msg = Message::from_digest(crate::test_random_32_bytes());
364358
assert_eq!(s.verify_ecdsa(&sig, msg, &pk), Err(Error::IncorrectSignature));
365359

366360
let recovered_key = s.recover_ecdsa(msg, &sigr).unwrap();
367361
assert!(recovered_key != pk);
368362
}
369363

370364
#[test]
371-
#[cfg(all(feature = "rand", feature = "std"))]
365+
#[cfg(feature = "std")]
372366
fn sign_with_recovery() {
373-
let mut s = Secp256k1::new();
374-
s.randomize(&mut rand::rng());
375-
376-
let msg = crate::random_32_bytes(&mut rand::rng());
377-
let msg = Message::from_digest_slice(&msg).unwrap();
367+
let s = Secp256k1::new();
378368

379-
let (sk, pk) = s.generate_keypair(&mut rand::rng());
369+
let msg = Message::from_digest(crate::test_random_32_bytes());
370+
let (sk, pk) = crate::test_random_keypair();
380371

381372
let sig = s.sign_ecdsa_recoverable(msg, &sk);
382373

383374
assert_eq!(s.recover_ecdsa(msg, &sig), Ok(pk));
384375
}
385376

386377
#[test]
387-
#[cfg(all(feature = "rand", feature = "std"))]
378+
#[cfg(feature = "std")]
388379
fn sign_with_recovery_and_noncedata() {
389-
let mut s = Secp256k1::new();
390-
s.randomize(&mut rand::rng());
391-
392-
let msg = crate::random_32_bytes(&mut rand::rng());
393-
let msg = Message::from_digest_slice(&msg).unwrap();
380+
let s = Secp256k1::new();
394381

395-
let noncedata = [42u8; 32];
382+
let msg = Message::from_digest(crate::test_random_32_bytes());
383+
let noncedata = crate::test_random_32_bytes();
396384

397-
let (sk, pk) = s.generate_keypair(&mut rand::rng());
385+
let (sk, pk) = crate::test_random_keypair();
398386

399387
let sig = s.sign_ecdsa_recoverable_with_noncedata(msg, &sk, &noncedata);
400388

401389
assert_eq!(s.recover_ecdsa(msg, &sig), Ok(pk));
402390
}
403391

404392
#[test]
405-
#[cfg(all(feature = "rand", feature = "std"))]
393+
#[cfg(feature = "std")]
406394
fn bad_recovery() {
407-
let mut s = Secp256k1::new();
408-
s.randomize(&mut rand::rng());
395+
let s = Secp256k1::new();
409396

410-
let msg = Message::from_digest_slice(&[0x55; 32]).unwrap();
397+
let msg = Message::from_digest(crate::test_random_32_bytes());
411398

412399
// Zero is not a valid sig
413400
let sig = RecoverableSignature::from_compact(&[0; 64], RecoveryId::Zero).unwrap();
@@ -468,22 +455,21 @@ mod tests {
468455
}
469456

470457
#[cfg(bench)]
471-
#[cfg(all(feature = "rand", feature = "std"))] // Currently only a single bench that requires "rand" + "std".
458+
#[cfg(feature = "std")] // Currently only a single bench that requires "rand" + "std".
472459
mod benches {
473460
use test::{black_box, Bencher};
474461

475-
use super::{Message, Secp256k1};
462+
use crate::{Message, Secp256k1, SecretKey};
476463

477464
#[bench]
478465
pub fn bench_recover(bh: &mut Bencher) {
479466
let s = Secp256k1::new();
480-
let msg = crate::random_32_bytes(&mut rand::rng());
481-
let msg = Message::from_digest_slice(&msg).unwrap();
482-
let (sk, _) = s.generate_keypair(&mut rand::rng());
483-
let sig = s.sign_ecdsa_recoverable(&msg, &sk);
467+
let msg = Message::from_digest(crate::test_random_32_bytes());
468+
let sk = SecretKey::test_random();
469+
let sig = s.sign_ecdsa_recoverable(msg, &sk);
484470

485471
bh.iter(|| {
486-
let res = s.recover_ecdsa(&msg, &sig).unwrap();
472+
let res = s.recover_ecdsa(msg, &sig).unwrap();
487473
black_box(res);
488474
});
489475
}

0 commit comments

Comments
 (0)