ECPrivateKey

Struct ECPrivateKey 

Source
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

Source

pub fn new() -> Self

Creates a new random ECDSA private key.

Uses a secure random number generator to generate the key.

Source

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.

Source

pub fn data(&self) -> &[u8; 32]

Returns the ECDSA private key as an array of bytes.

Source

pub fn as_bytes(&self) -> &[u8]

Get the ECDSA private key as a byte slice.

Source

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.

Source

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.

Source

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

Source

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.

Source

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.

Source

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.

Source

pub fn schnorr_sign(&self, message: impl AsRef<[u8]>) -> [u8; 64]

Signs a message using the Schnorr signature scheme.

Uses a secure random number generator for nonce generation.

Returns a 64-byte signature.

Trait Implementations§

Source§

impl AsRef<[u8]> for ECPrivateKey

Provides a reference to the key data as a byte slice.

Source§

fn as_ref(&self) -> &[u8]

Returns a reference to the key as a byte slice.

Source§

impl CBORTagged for ECPrivateKey

Defines CBOR tags for EC keys.

Source§

fn cbor_tags() -> Vec<Tag>

Returns the CBOR tags for EC keys.

Source§

impl CBORTaggedEncodable for ECPrivateKey

Implements CBOR encoding for EC private keys.

Source§

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

Returns the tagged CBOR encoding of this instance. Read more
Source§

fn tagged_cbor_data(&self) -> Vec<u8>

Returns the tagged value in CBOR binary representation. Read more
Source§

impl Clone for ECPrivateKey

Source§

fn clone(&self) -> ECPrivateKey

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ECPrivateKey

Formats the key for debugging, showing type name and hexadecimal value.

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Displays the key with type information and hexadecimal value.

Source§

impl Default for ECPrivateKey

Implements the Default trait, creating a random key.

Source§

fn default() -> Self

Creates a new random key as the default value.

Source§

impl Display for ECPrivateKey

Formats the key as a hexadecimal string.

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Displays the key as a hexadecimal string.

Source§

impl ECKey for ECPrivateKey

Implements the ECKey trait for deriving public keys.

Source§

fn public_key(&self) -> ECPublicKey

Derives the corresponding ECDSA compressed public key.

Source§

impl ECKeyBase for ECPrivateKey

Implements the ECKeyBase trait methods.

Source§

const KEY_SIZE: usize = 32usize

The size of an EC private key (32 bytes).

Source§

fn from_data_ref(data: impl AsRef<[u8]>) -> Result<Self>
where Self: Sized,

Creates a key from a byte slice, with validation.

Source§

fn data(&self) -> &[u8]

Returns the key as a byte slice.

Source§

fn hex(&self) -> String

Returns the key as a hexadecimal string.
Source§

fn from_hex(hex: impl AsRef<str>) -> Result<Self>

Creates a key from a hexadecimal string. Read more
Source§

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

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.

Source§

fn from(value: &'a ECPrivateKey) -> Self

Returns a reference to the underlying byte array.

Source§

impl From<[u8; 32]> for ECPrivateKey

Converts a fixed-size byte array to an ECPrivateKey.

Source§

fn from(data: [u8; 32]) -> Self

Converts a 32-byte array into an EC private key.

Source§

impl From<ECPrivateKey> for CBOR

Converts an ECPrivateKey to CBOR.

Source§

fn from(value: ECPrivateKey) -> Self

Converts to tagged CBOR.

Source§

impl Hash for ECPrivateKey

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ECPrivateKey

Source§

fn eq(&self, other: &ECPrivateKey) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for ECPrivateKey

Source§

impl StructuralPartialEq for ECPrivateKey

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CBOREncodable for T
where T: Into<CBOR> + Clone,

Source§

fn to_cbor(&self) -> CBOR

Converts this value to a CBOR object. Read more
Source§

fn to_cbor_data(&self) -> Vec<u8>

Converts this value directly to binary CBOR data. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToHex for T
where T: AsRef<[u8]>,

Source§

fn encode_hex<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing self into the result. Lower case letters are used (e.g. f9b4ca)
Source§

fn encode_hex_upper<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing self into the result. Upper case letters are used (e.g. F9B4CA)
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UREncodable for T

Source§

fn ur(&self) -> UR

Returns the UR representation of the object.
Source§

fn ur_string(&self) -> String

Returns the UR string representation of the object.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> ErasedDestructor for T
where T: 'static,