Skip to content

Commit 1d34c81

Browse files
committed
feat: allow generating random SigningKey's
Allow generating random SigningKey structs directly. Signed-off-by: Dmitry Baryshkov <[email protected]>
1 parent da78856 commit 1d34c81

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

src/pkcs1v15.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,15 @@ where
332332
phantom: Default::default(),
333333
}
334334
}
335+
336+
/// Generate a new signing key.
337+
pub fn random<R: CryptoRngCore + ?Sized>(rng: &mut R, bit_size: usize) -> Result<Self> {
338+
Ok(Self {
339+
inner: RsaPrivateKey::new(rng, bit_size)?,
340+
prefix: Vec::new(),
341+
phantom: Default::default(),
342+
})
343+
}
335344
}
336345

337346
impl<D> From<RsaPrivateKey> for SigningKey<D>
@@ -356,14 +365,26 @@ impl<D> SigningKey<D>
356365
where
357366
D: Digest + AssociatedOid,
358367
{
359-
/// Create a new verifying key with a prefix for the digest `D`.
368+
/// Create a new signing key with a prefix for the digest `D`.
360369
pub fn new_with_prefix(key: RsaPrivateKey) -> Self {
361370
Self {
362371
inner: key,
363372
prefix: generate_prefix::<D>(),
364373
phantom: Default::default(),
365374
}
366375
}
376+
377+
/// Generate a new signing key with a prefix for the digest `D`.
378+
pub fn random_with_prefix<R: CryptoRngCore + ?Sized>(
379+
rng: &mut R,
380+
bit_size: usize,
381+
) -> Result<Self> {
382+
Ok(Self {
383+
inner: RsaPrivateKey::new(rng, bit_size)?,
384+
prefix: generate_prefix::<D>(),
385+
phantom: Default::default(),
386+
})
387+
}
367388
}
368389

369390
impl<D> AsRef<RsaPrivateKey> for SigningKey<D>

src/pss.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,28 @@ where
558558
phantom: Default::default(),
559559
}
560560
}
561+
562+
/// Generate a new random RSASSA-PSS signing key.
563+
pub fn random<R: CryptoRngCore + ?Sized>(rng: &mut R, bit_size: usize) -> Result<Self> {
564+
Ok(Self {
565+
inner: RsaPrivateKey::new(rng, bit_size)?,
566+
salt_len: None,
567+
phantom: Default::default(),
568+
})
569+
}
570+
571+
/// Generate a new random RSASSA-PSS signing key with a salt of the given length.
572+
pub fn random_with_salt_len<R: CryptoRngCore + ?Sized>(
573+
rng: &mut R,
574+
bit_size: usize,
575+
salt_len: usize,
576+
) -> Result<Self> {
577+
Ok(Self {
578+
inner: RsaPrivateKey::new(rng, bit_size)?,
579+
salt_len: Some(salt_len),
580+
phantom: Default::default(),
581+
})
582+
}
561583
}
562584

563585
impl<D> From<RsaPrivateKey> for SigningKey<D>

0 commit comments

Comments
 (0)