Skip to content

Commit 4064907

Browse files
authoredJan 19, 2025
dsa: gate signing under hazmat feature (#859)
Resolves #858
1 parent e658b96 commit 4064907

13 files changed

+49
-10
lines changed
 

‎dsa/Cargo.toml

+13
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,16 @@ sha1 = "=0.11.0-pre.4"
3333

3434
[features]
3535
std = []
36+
hazmat = []
37+
38+
[[example]]
39+
name = "sign"
40+
required-features = ["hazmat"]
41+
42+
[[example]]
43+
name = "generate"
44+
required-features = ["hazmat"]
45+
46+
[[example]]
47+
name = "export"
48+
required-features = ["hazmat"]

‎dsa/examples/export.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![cfg(feature = "hazmat")]
2+
13
use dsa::{Components, KeySize, SigningKey};
24
use pkcs8::{EncodePrivateKey, EncodePublicKey, LineEnding};
35
use std::{fs::File, io::Write};

‎dsa/examples/generate.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![cfg(feature = "hazmat")]
2+
13
use dsa::{Components, KeySize, SigningKey};
24

35
fn main() {

‎dsa/examples/sign.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![cfg(feature = "hazmat")]
2+
13
use digest::Digest;
24
use dsa::{Components, KeySize, SigningKey};
35
use pkcs8::{EncodePrivateKey, EncodePublicKey, LineEnding};

‎dsa/src/generate.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ mod keypair;
88
mod secret_number;
99

1010
pub use self::components::{common as common_components, public as public_component};
11-
pub use self::keypair::keypair;
1211
pub use self::secret_number::{secret_number, secret_number_rfc6979};
1312

13+
#[cfg(feature = "hazmat")]
14+
pub use self::keypair::keypair;
15+
1416
/// Calculate the upper and lower bounds for generating values like p or q
1517
#[inline]
1618
fn calculate_bounds(size: u32) -> (BigUint, BigUint) {

‎dsa/src/generate/keypair.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
#![cfg(feature = "hazmat")]
12
//!
23
//! Generate a DSA keypair
34
//!
45
5-
use crate::{generate::components, Components, SigningKey, VerifyingKey};
6+
use crate::{generate::components, signing_key::SigningKey, Components, VerifyingKey};
67
use num_bigint::{BigUint, RandBigInt};
78
use num_traits::One;
89
use signature::rand_core::CryptoRngCore;

‎dsa/src/generate/secret_number.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//! Generate a per-message secret number
33
//!
44
5-
use crate::{Components, SigningKey};
5+
use crate::{signing_key::SigningKey, Components};
66
use alloc::{vec, vec::Vec};
77
use core::cmp::min;
88
use digest::{core_api::BlockSizeUser, Digest, FixedOutputReset};

‎dsa/src/lib.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
//!
1313
//! Generate a DSA keypair
1414
//!
15-
//! ```
15+
#![cfg_attr(feature = "hazmat", doc = "```")]
16+
#![cfg_attr(not(feature = "hazmat"), doc = "```ignore")]
1617
//! # use dsa::{KeySize, Components, SigningKey};
1718
//! let mut csprng = rand::thread_rng();
1819
//! let components = Components::generate(&mut csprng, KeySize::DSA_2048_256);
@@ -22,7 +23,8 @@
2223
//!
2324
//! Create keypair from existing components
2425
//!
25-
//! ```
26+
#![cfg_attr(feature = "hazmat", doc = "```")]
27+
#![cfg_attr(not(feature = "hazmat"), doc = "```ignore")]
2628
//! # use dsa::{Components, SigningKey, VerifyingKey};
2729
//! # use num_bigint::BigUint;
2830
//! # use num_traits::One;
@@ -46,9 +48,10 @@
4648
4749
extern crate alloc;
4850

49-
pub use crate::{
50-
components::Components, signing_key::SigningKey, size::KeySize, verifying_key::VerifyingKey,
51-
};
51+
#[cfg(feature = "hazmat")]
52+
pub use crate::signing_key::SigningKey;
53+
54+
pub use crate::{components::Components, size::KeySize, verifying_key::VerifyingKey};
5255

5356
pub use num_bigint::BigUint;
5457
pub use pkcs8;

‎dsa/src/signing_key.rs

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ impl SigningKey {
5151
})
5252
}
5353

54+
#[cfg(feature = "hazmat")]
5455
/// Generate a new DSA keypair
5556
#[inline]
5657
pub fn generate(rng: &mut impl CryptoRngCore, components: Components) -> SigningKey {
@@ -70,6 +71,7 @@ impl SigningKey {
7071
&self.x
7172
}
7273

74+
#[cfg(feature = "hazmat")]
7375
/// Try to sign the given message digest deterministically with a prehashed digest.
7476
/// The parameter `D` must match the hash function used to sign the digest.
7577
///

‎dsa/tests/deterministic.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![cfg(feature = "hazmat")]
2+
13
use digest::{core_api::BlockSizeUser, Digest, FixedOutputReset};
24
use dsa::{Components, Signature, SigningKey, VerifyingKey};
35
use num_bigint::BigUint;

‎dsa/tests/signature.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![cfg(feature = "hazmat")]
12
#![allow(deprecated)]
23

34
use digest::Digest;

‎dsa/tests/signing_key.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![cfg(feature = "hazmat")]
12
// We abused the deprecated attribute for unsecure key sizes
23
// But we want to use those small key sizes for fast tests
34
#![allow(deprecated)]

‎dsa/tests/verifying_key.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22
// But we want to use those small key sizes for fast tests
33
#![allow(deprecated)]
44

5-
use dsa::{Components, KeySize, SigningKey, VerifyingKey};
5+
use dsa::VerifyingKey;
6+
use pkcs8::{DecodePublicKey, EncodePublicKey, LineEnding};
7+
8+
#[cfg(feature = "hazmat")]
9+
use dsa::{Components, KeySize, SigningKey};
10+
#[cfg(feature = "hazmat")]
611
use num_bigint::BigUint;
12+
#[cfg(feature = "hazmat")]
713
use num_traits::One;
8-
use pkcs8::{DecodePublicKey, EncodePublicKey, LineEnding};
914

1015
const OPENSSL_PEM_PUBLIC_KEY: &str = include_str!("pems/public.pem");
1116

17+
#[cfg(feature = "hazmat")]
1218
fn generate_verifying_key() -> VerifyingKey {
1319
let mut rng = rand::thread_rng();
1420
let components = Components::generate(&mut rng, KeySize::DSA_1024_160);
@@ -29,6 +35,7 @@ fn decode_encode_openssl_verifying_key() {
2935
assert_eq!(reencoded_verifying_key, OPENSSL_PEM_PUBLIC_KEY);
3036
}
3137

38+
#[cfg(feature = "hazmat")]
3239
#[test]
3340
fn encode_decode_verifying_key() {
3441
let verifying_key = generate_verifying_key();
@@ -38,6 +45,7 @@ fn encode_decode_verifying_key() {
3845
assert_eq!(verifying_key, decoded_verifying_key);
3946
}
4047

48+
#[cfg(feature = "hazmat")]
4149
#[test]
4250
fn validate_verifying_key() {
4351
let verifying_key = generate_verifying_key();

0 commit comments

Comments
 (0)