I have the k256 crate and I'm trying to sign a string. Here is my code:
let priv_key = SigningKey::from_bytes(self.private_key.as_bytes()).expect("Make priv key");
let tx_hash = transaction.get_hash();
let signer = Signer::new(&tx_hash);
let sig = signer.sign_digest_with_rng(&mut OsRng, tx_hash);
However, compilation results in the following error:
error[E0599]: the function or associated item `new` exists for trait object `dyn Signer<_>`, but its trait bounds were not satisfied
--> src/wallet.rs:32:30
|
32 | let signer = Signer::new(&tx_hash);
| ^^^ function or associated item cannot be called on `dyn Signer<_>` due to unsatisfied trait bounds
|
::: /Users/oriont/.cargo/registry/src/github.com-1ecc6299db9ec823/signature-1.4.0/src/signer.rs:13:1
|
13 | pub trait Signer<S: Signature> {
| ------------------------------
| |
| doesn't satisfy `dyn Signer<_>: Default`
| doesn't satisfy `dyn Signer<_>: HashMarker`
| doesn't satisfy `dyn Signer<_>: Sized`
| doesn't satisfy `dyn Signer<_>: sha2::Digest`
| doesn't satisfy `dyn Signer<_>: sha2::digest::FixedOutput`
| doesn't satisfy `dyn Signer<_>: sha2::digest::Update`
|
= note: the following trait bounds were not satisfied:
`dyn Signer<_>: Sized`
which is required by `dyn Signer<_>: sha2::Digest`
`dyn Signer<_>: sha2::digest::FixedOutput`
which is required by `dyn Signer<_>: sha2::Digest`
`dyn Signer<_>: Default`
which is required by `dyn Signer<_>: sha2::Digest`
`dyn Signer<_>: sha2::digest::Update`
which is required by `dyn Signer<_>: sha2::Digest`
`dyn Signer<_>: HashMarker`
which is required by `dyn Signer<_>: sha2::Digest`
`&dyn Signer<_>: sha2::digest::FixedOutput`
which is required by `&dyn Signer<_>: sha2::Digest`
`&dyn Signer<_>: Default`
which is required by `&dyn Signer<_>: sha2::Digest`
`&dyn Signer<_>: sha2::digest::Update`
which is required by `&dyn Signer<_>: sha2::Digest`
`&dyn Signer<_>: HashMarker`
which is required by `&dyn Signer<_>: sha2::Digest`
`&mut dyn Signer<_>: sha2::digest::FixedOutput`
which is required by `&mut dyn Signer<_>: sha2::Digest`
`&mut dyn Signer<_>: Default`
which is required by `&mut dyn Signer<_>: sha2::Digest`
`&mut dyn Signer<_>: sha2::digest::Update`
which is required by `&mut dyn Signer<_>: sha2::Digest`
`&mut dyn Signer<_>: HashMarker`
which is required by `&mut dyn Signer<_>: sha2::Digest`
For more information about this error, try `rustc --explain E0599`.
It seems like Signer has to have some sort of generic signature type, but the example in the docs don't reflect this. https://docs.rs/k256/0.4.2/k256/ecdsa/index.html
My Cargo.toml
file has the ecdsa
and ecdsa-core
features:
[dependencies]
...
k256 = { version = "0.10.2", features = ["ecdsa", "ecdsa-core"] }
How can I fix this?