bc_components/ec_key/ec_public_key_base.rs
1use crate::{ECKey, ECUncompressedPublicKey};
2
3/// A trait for elliptic curve public keys that can provide their uncompressed form.
4///
5/// This trait extends `ECKey` to provide a method for obtaining the uncompressed
6/// representation of a public key. Elliptic curve public keys can be represented in
7/// both compressed (33 bytes) and uncompressed (65 bytes) formats:
8///
9/// - Compressed format: Uses a single byte prefix (0x02 or 0x03) followed by the
10/// x-coordinate (32 bytes), with the prefix indicating the parity of the y-coordinate.
11///
12/// - Uncompressed format: Uses a byte prefix (0x04) followed by both x and y coordinates
13/// (32 bytes each), for a total of 65 bytes.
14///
15/// The compressed format is more space-efficient and is recommended for most applications,
16/// but some legacy systems require the uncompressed format.
17pub trait ECPublicKeyBase: ECKey {
18 /// Returns the uncompressed public key representation.
19 fn uncompressed_public_key(&self) -> ECUncompressedPublicKey;
20}