Module k256::ecdsa::recoverable

source ·
Expand description

Ethereum-style “recoverable signatures”.

These signatures include an additional Id field which allows for recovery of the VerifyingKey which can be used to verify them.

This is helpful in cases where a hash/fingerprint of a VerifyingKey for a given signature in known in advance.

Signing/Recovery Example

NOTE: make sure to enable both the ecdsa and keccak256 features of this crate for the example to work.

use k256::{
    ecdsa::{SigningKey, recoverable, signature::Signer},
    EncodedPoint
};
use rand_core::OsRng; // requires 'getrandom' feature

// Signing
let signing_key = SigningKey::random(&mut OsRng); // Serialize with `::to_bytes()`
let verifying_key = signing_key.verifying_key();
let message = b"ECDSA proves knowledge of a secret number in the context of a single message";

// Note: the signature type must be annotated or otherwise inferrable as
// `Signer` has many impls of the `Signer` trait (for both regular and
// recoverable signature types).
let signature: recoverable::Signature = signing_key.sign(message);
let recovered_key = signature.recover_verifying_key(message).expect("couldn't recover pubkey");

assert_eq!(&verifying_key, &recovered_key);

Structs

Constants

  • Size of an Ethereum-style recoverable signature in bytes