Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ subtle = { version = "2.6.1", default-features = false }
digest = { version = "=0.11.0-pre.10", default-features = false, features = ["alloc", "oid"] }
pkcs1 = { version = "0.8.0-rc.1", default-features = false, features = ["alloc", "pkcs8"] }
pkcs8 = { version = "0.11.0-rc.2", default-features = false, features = ["alloc"] }
signature = { version = "=2.3.0-pre.6", default-features = false, features = ["alloc", "digest", "rand_core"] }
signature = { version = "=3.0.0-pre", default-features = false, features = ["alloc", "digest", "rand_core"] }
spki = { version = "0.8.0-rc.1", default-features = false, features = ["alloc"] }
zeroize = { version = "1.5", features = ["alloc"] }
crypto-bigint = { version = "0.7.0-pre", default-features = false, features = ["zeroize", "alloc"] }
Expand Down Expand Up @@ -57,7 +57,7 @@ os_rng = ["rand_core/os_rng", "crypto-bigint/rand_core"]
serde = ["dep:serde", "dep:serdect", "crypto-bigint/serde"]
pem = ["pkcs1/pem", "pkcs8/pem"]
pkcs5 = ["pkcs8/encryption"]
std = ["digest/std", "pkcs1/std", "pkcs8/std", "rand_core/std", "signature/std", "crypto-bigint/rand"]
std = ["digest/std", "pkcs1/std", "pkcs8/std", "rand_core/std", "crypto-bigint/rand"]


[package.metadata.docs.rs]
Expand Down
24 changes: 12 additions & 12 deletions src/pkcs1v15.rs
Original file line number Diff line number Diff line change
Expand Up @@ -458,15 +458,15 @@ mod tests {
let signing_key = SigningKey::<Sha1>::new(priv_key);

for (text, expected) in &tests {
let out = signing_key.sign(text.as_bytes()).to_bytes();
let sig: Signature = signing_key.sign(text.as_bytes());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this really still needed?

Copy link
Member Author

@baloo baloo Apr 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

error[E0282]: type annotations needed
   --> src/pkcs1v15.rs:461:35
    |
461 |             let out = signing_key.sign(text.as_bytes()).to_bytes();
    |                                   ^^^^
    |
help: try using a fully qualified path to specify the expected types
    |
461 -             let out = signing_key.sign(text.as_bytes()).to_bytes();
461 +             let out = <pkcs1v15::signing_key::SigningKey<CoreWrapper<Sha1Core>> as Signer<S>>::sign(&signing_key, text.as_bytes()).to_bytes();
    |

For more information about this error, try `rustc --explain E0282`.

Without it.

In the end I think #505 creates less changes to the downstream consumer.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the blanket impl is legitimately breaking inference for the case there's an explicit Signer impl instead of using the blanket one, which would be a case of RustCrypto/traits#1831

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

agreed

let out = sig.to_bytes();
assert_ne!(out.as_ref(), text.as_bytes());
assert_ne!(out.as_ref(), &Sha1::digest(text.as_bytes()).to_vec());
assert_eq!(out.as_ref(), expected);

let mut rng = ChaCha8Rng::from_seed([42; 32]);
let out2 = signing_key
.sign_with_rng(&mut rng, text.as_bytes())
.to_bytes();
let sig2: Signature = signing_key.sign_with_rng(&mut rng, text.as_bytes());
let out2 = sig2.to_bytes();
assert_eq!(out2.as_ref(), expected);
}
}
Expand All @@ -486,14 +486,14 @@ mod tests {
let signing_key = SigningKey::<Sha256>::new(priv_key);

for (text, expected) in &tests {
let out = signing_key.sign(text.as_bytes()).to_bytes();
let sig: Signature = signing_key.sign(text.as_bytes());
let out = sig.to_bytes();
assert_ne!(out.as_ref(), text.as_bytes());
assert_eq!(out.as_ref(), expected);

let mut rng = ChaCha8Rng::from_seed([42; 32]);
let out2 = signing_key
.sign_with_rng(&mut rng, text.as_bytes())
.to_bytes();
let sig2: Signature = signing_key.sign_with_rng(&mut rng, text.as_bytes());
let out2 = sig2.to_bytes();
assert_eq!(out2.as_ref(), expected);
}
}
Expand All @@ -513,14 +513,14 @@ mod tests {
let signing_key = SigningKey::<Sha3_256>::new(priv_key);

for (text, expected) in &tests {
let out = signing_key.sign(text.as_bytes()).to_bytes();
let signature: Signature = signing_key.sign(text.as_bytes());
let out = signature.to_bytes();
assert_ne!(out.as_ref(), text.as_bytes());
assert_eq!(out.as_ref(), expected);

let mut rng = ChaCha8Rng::from_seed([42; 32]);
let out2 = signing_key
.sign_with_rng(&mut rng, text.as_bytes())
.to_bytes();
let sig2: Signature = signing_key.sign_with_rng(&mut rng, text.as_bytes());
let out2 = sig2.to_bytes();
assert_eq!(out2.as_ref(), expected);
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/pss.rs
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ tAboUGBxTDq3ZroNism3DaMIbKPyYrAqhKov1h5V
let verifying_key = signing_key.verifying_key();

for test in &tests {
let sig = signing_key.sign_with_rng(&mut rng, test.as_bytes());
let sig: Signature = signing_key.sign_with_rng(&mut rng, test.as_bytes());
verifying_key
.verify(test.as_bytes(), &sig)
.expect("failed to verify");
Expand All @@ -470,7 +470,7 @@ tAboUGBxTDq3ZroNism3DaMIbKPyYrAqhKov1h5V
let verifying_key = signing_key.verifying_key();

for test in &tests {
let sig = signing_key.sign_with_rng(&mut rng, test.as_bytes());
let sig: Signature = signing_key.sign_with_rng(&mut rng, test.as_bytes());
verifying_key
.verify(test.as_bytes(), &sig)
.expect("failed to verify");
Expand Down
10 changes: 5 additions & 5 deletions tests/pkcs1v15.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ fn signature_stringify() {
use pkcs8::DecodePrivateKey;
use signature::Signer;

use rsa::pkcs1v15::SigningKey;
use rsa::pkcs1v15::{Signature, SigningKey};
use rsa::RsaPrivateKey;

let pem = include_str!("examples/pkcs8/rsa2048-priv.pem");
let private_key = RsaPrivateKey::from_pkcs8_pem(pem).unwrap();
let signing_key = SigningKey::<sha2::Sha256>::new(private_key);

let bytes: &[u8] = b"rsa4096"; // HACK - the criterion is that the signature has leading zeros.
let signature = signing_key.sign(bytes);
let signature: Signature = signing_key.sign(bytes);

let expected = "029E365B60971D5A499FF5E1C288B954D3A5DCF52482CEE46DB90DC860B725A8D6CA031146FA156E9F17579BE6122FFB11DAC35E59B2193D75F7B31CE1442DDE7F4FF7885AD5D6080266E9A33BB4CEC93FCC2B6B885457A0ABF19E2DAA00876F694B37F535F119925CCCF9A17B90AE6CF39F07D7FEFBEECDF1B344C14B728196DDD154230BADDEDA5A7EFF373F6CD3EF6D41789572A7A068E3A252D3B7D5D706C6170D8CFDB48C8E738A4B3BFEA3E15716805E376EBD99EA09C6E82F3CFA13CEB23CD289E8F95C27F489ADC05AAACE8A9276EE7CED3B7A5C7264F0D34FF18CEDC3E91D667FCF9992A8CFDE8562F65FDDE1E06595C27E0F82063839A358C927B2";
assert_eq!(format!("{}", signature), expected);
Expand All @@ -26,7 +26,7 @@ fn signature_stringify() {
#[test]
fn signing_key_new_same_as_from() {
use pkcs1::DecodeRsaPrivateKey;
use rsa::RsaPrivateKey;
use rsa::{pkcs1v15::Signature, RsaPrivateKey};
use signature::{Keypair, Signer, Verifier};

// randomly generated key, hardcoded for test repeatability
Expand Down Expand Up @@ -64,8 +64,8 @@ Rmb665iB5fwpqmbE/hYKIn7asYQE+V0dkgt8M3qvlJJ5JJbCrJx3

let key_via_new = rsa::pkcs1v15::SigningKey::<sha2::Sha256>::new(priv_key.clone());
let key_via_from = rsa::pkcs1v15::SigningKey::<sha2::Sha256>::from(priv_key.clone());
let sig_via_new = key_via_new.sign(msg);
let sig_via_from = key_via_from.sign(msg);
let sig_via_new: Signature = key_via_new.sign(msg);
let sig_via_from: Signature = key_via_from.sign(msg);
assert_eq!(sig_via_new, sig_via_from);

// each verifies the other
Expand Down
3 changes: 2 additions & 1 deletion tests/proptests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ proptest! {
#[test]
fn pkcs1v15_sign_roundtrip(private_key in private_key(), msg in any::<Vec<u8>>()) {
let signing_key = pkcs1v15::SigningKey::<Sha256>::new(private_key);
let signature_bytes = signing_key.sign(&msg).to_bytes();
let signature: pkcs1v15::Signature = signing_key.sign(&msg);
let signature_bytes = signature.to_bytes();

let verifying_key = signing_key.verifying_key();
let signature = pkcs1v15::Signature::try_from(&*signature_bytes).unwrap();
Expand Down