pub struct ECPrivateKey(/* private fields */);
Expand description
A private key for elliptic curve digital signature algorithms.
An ECPrivateKey
is a 32-byte secret value that can be used to:
- Generate its corresponding public key
- Sign messages using the ECDSA signature scheme
- Sign messages using the Schnorr signature scheme (BIP-340)
These keys use the secp256k1 curve, which is the same curve used in Bitcoin and other cryptocurrencies. The secp256k1 curve is defined by the Standards for Efficient Cryptography Group (SECG).
§Security
Private keys should be kept secret and never exposed. They represent proof of ownership and control over any associated assets or identities.
§Examples
Creating a new random private key:
use bc_components::ECPrivateKey;
// Generate a random private key
let private_key = ECPrivateKey::new();
Signing a message with ECDSA:
use bc_components::ECPrivateKey;
// Generate a random private key
let private_key = ECPrivateKey::new();
// Sign a message
let message = b"Hello, world!";
let signature = private_key.ecdsa_sign(message);
Implementations§
Source§impl ECPrivateKey
impl ECPrivateKey
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new random ECDSA private key.
Uses a secure random number generator to generate the key.
Sourcepub fn new_using(rng: &mut impl RandomNumberGenerator) -> Self
pub fn new_using(rng: &mut impl RandomNumberGenerator) -> Self
Creates a new random ECDSA private key using the given random number generator.
This allows for deterministic key generation when using a seeded RNG.
Sourcepub const fn from_data(data: [u8; 32]) -> Self
pub const fn from_data(data: [u8; 32]) -> Self
Restores an ECDSA private key from an array of bytes.
This method performs no validation on the input data.
Sourcepub fn from_data_ref(data: impl AsRef<[u8]>) -> Result<Self>
pub fn from_data_ref(data: impl AsRef<[u8]>) -> Result<Self>
Restores an ECDSA private key from a reference to an array of bytes.
Returns an error if the data is not exactly 32 bytes.
Sourcepub fn derive_from_key_material(key_material: impl AsRef<[u8]>) -> Self
pub fn derive_from_key_material(key_material: impl AsRef<[u8]>) -> Self
Derives a new private key from the given key material.
This method uses the provided key material to deterministically generate a valid private key for the secp256k1 curve.
Source§impl ECPrivateKey
impl ECPrivateKey
Sourcepub fn schnorr_public_key(&self) -> SchnorrPublicKey
pub fn schnorr_public_key(&self) -> SchnorrPublicKey
Derives the Schnorr public key from this ECDSA private key.
Schnorr public keys are used with the BIP-340 Schnorr signature scheme. Unlike ECDSA public keys, Schnorr public keys are 32 bytes (“x-only”) rather than 33 bytes.
Sourcepub fn ecdsa_sign(&self, message: impl AsRef<[u8]>) -> [u8; 64]
pub fn ecdsa_sign(&self, message: impl AsRef<[u8]>) -> [u8; 64]
Signs a message using the ECDSA signature scheme.
Returns a 70-72 byte signature in DER format.
Sourcepub fn schnorr_sign_using(
&self,
message: impl AsRef<[u8]>,
rng: &mut dyn RandomNumberGenerator,
) -> [u8; 64]
pub fn schnorr_sign_using( &self, message: impl AsRef<[u8]>, rng: &mut dyn RandomNumberGenerator, ) -> [u8; 64]
Signs a message using the Schnorr signature scheme with a custom random number generator.
This method implements the BIP-340 Schnorr signature scheme, which provides several advantages over ECDSA including linearity (allowing for signature aggregation) and non-malleability.
Returns a 64-byte signature.
Trait Implementations§
Source§impl AsRef<[u8]> for ECPrivateKey
Provides a reference to the key data as a byte slice.
impl AsRef<[u8]> for ECPrivateKey
Provides a reference to the key data as a byte slice.
Source§impl CBORTagged for ECPrivateKey
Defines CBOR tags for EC keys.
impl CBORTagged for ECPrivateKey
Defines CBOR tags for EC keys.
Returns the CBOR tags for EC keys.
Source§impl CBORTaggedEncodable for ECPrivateKey
Implements CBOR encoding for EC private keys.
impl CBORTaggedEncodable for ECPrivateKey
Implements CBOR encoding for EC private keys.
Source§fn untagged_cbor(&self) -> CBOR
fn untagged_cbor(&self) -> CBOR
Creates the untagged CBOR representation.
The format is a map with:
- Key 2: boolean true (indicates private key)
- Key 3: byte string of the key data
Source§fn tagged_cbor(&self) -> CBOR
fn tagged_cbor(&self) -> CBOR
Source§impl Clone for ECPrivateKey
impl Clone for ECPrivateKey
Source§fn clone(&self) -> ECPrivateKey
fn clone(&self) -> ECPrivateKey
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for ECPrivateKey
Formats the key for debugging, showing type name and hexadecimal value.
impl Debug for ECPrivateKey
Formats the key for debugging, showing type name and hexadecimal value.
Source§impl Default for ECPrivateKey
Implements the Default
trait, creating a random key.
impl Default for ECPrivateKey
Implements the Default
trait, creating a random key.
Source§impl Display for ECPrivateKey
Formats the key as a hexadecimal string.
impl Display for ECPrivateKey
Formats the key as a hexadecimal string.
Source§impl ECKey for ECPrivateKey
Implements the ECKey
trait for deriving public keys.
impl ECKey for ECPrivateKey
Implements the ECKey
trait for deriving public keys.
Source§fn public_key(&self) -> ECPublicKey
fn public_key(&self) -> ECPublicKey
Derives the corresponding ECDSA compressed public key.
Source§impl ECKeyBase for ECPrivateKey
Implements the ECKeyBase
trait methods.
impl ECKeyBase for ECPrivateKey
Implements the ECKeyBase
trait methods.
Source§impl<'a> From<&'a ECPrivateKey> for &'a [u8]
Converts a reference to an ECPrivateKey
to a reference to a byte slice.
impl<'a> From<&'a ECPrivateKey> for &'a [u8]
Converts a reference to an ECPrivateKey
to a reference to a byte slice.
Source§fn from(value: &'a ECPrivateKey) -> Self
fn from(value: &'a ECPrivateKey) -> Self
Returns a reference to the key as a byte slice.
Source§impl<'a> From<&'a ECPrivateKey> for &'a [u8; 32]
Converts a reference to an ECPrivateKey
to a reference to a fixed-size
byte array.
impl<'a> From<&'a ECPrivateKey> for &'a [u8; 32]
Converts a reference to an ECPrivateKey
to a reference to a fixed-size
byte array.
Source§fn from(value: &'a ECPrivateKey) -> Self
fn from(value: &'a ECPrivateKey) -> Self
Returns a reference to the underlying byte array.
Source§impl From<ECPrivateKey> for CBOR
Converts an ECPrivateKey
to CBOR.
impl From<ECPrivateKey> for CBOR
Converts an ECPrivateKey
to CBOR.
Source§fn from(value: ECPrivateKey) -> Self
fn from(value: ECPrivateKey) -> Self
Converts to tagged CBOR.
Source§impl Hash for ECPrivateKey
impl Hash for ECPrivateKey
Source§impl PartialEq for ECPrivateKey
impl PartialEq for ECPrivateKey
impl Eq for ECPrivateKey
impl StructuralPartialEq for ECPrivateKey
Auto Trait Implementations§
impl Freeze for ECPrivateKey
impl RefUnwindSafe for ECPrivateKey
impl Send for ECPrivateKey
impl Sync for ECPrivateKey
impl Unpin for ECPrivateKey
impl UnwindSafe for ECPrivateKey
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CBOREncodable for T
impl<T> CBOREncodable for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ToHex for T
impl<T> ToHex for T
Source§fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Lower case
letters are used (e.g. f9b4ca
)Source§fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
self
into the result. Upper case
letters are used (e.g. F9B4CA
)