Skip to content

Commit b90db64

Browse files
feat(dsa): implement `SigningKey::sign_prehashed_rfc6979 (#798)
Allows to use other digest algorithms.
1 parent ab263a9 commit b90db64

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

dsa/src/signing_key.rs

+13
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,18 @@ impl SigningKey {
6767
&self.x
6868
}
6969

70+
/// Try to sign the given message digest deterministically with a prehashed digest.
71+
/// The parameter `D` must match the hash function used to sign the digest.
72+
///
73+
/// [RFC6979]: https://datatracker.ietf.org/doc/html/rfc6979
74+
pub fn sign_prehashed_rfc6979<D>(&self, prehash: &[u8]) -> Result<Signature, signature::Error>
75+
where
76+
D: Digest + BlockSizeUser + FixedOutputReset,
77+
{
78+
let k_kinv = crate::generate::secret_number_rfc6979::<D>(self, prehash);
79+
self.sign_prehashed(k_kinv, prehash)
80+
}
81+
7082
/// Sign some pre-hashed data
7183
fn sign_prehashed(
7284
&self,
@@ -105,6 +117,7 @@ impl Signer<Signature> for SigningKey {
105117
}
106118

107119
impl PrehashSigner<Signature> for SigningKey {
120+
/// Warning: This uses `sha2::Sha256` as the hash function for the digest. If you need to use a different one, use [`SigningKey::sign_prehashed_rfc6979`].
108121
fn sign_prehash(&self, prehash: &[u8]) -> Result<Signature, signature::Error> {
109122
let k_kinv = crate::generate::secret_number_rfc6979::<sha2::Sha256>(self, prehash);
110123
self.sign_prehashed(k_kinv, prehash)

0 commit comments

Comments
 (0)