EcKey

Struct EcKey 

Source
pub struct EcKey<T>(/* private fields */);
Expand description

Public and optional private key on the given curve.

Implementations§

Source§

impl EcKey<Params>

Source

pub fn from_curve_name(nid: Nid) -> Result<EcKey<Params>, ErrorStack>

Constructs an EcKey corresponding to a known curve.

It will not have an associated public or private key. This kind of key is primarily useful to be provided to the set_tmp_ecdh methods on Ssl and SslContextBuilder.

This corresponds to EC_KEY_new_by_curve_name.

Source

pub fn from_group(group: &EcGroupRef) -> Result<EcKey<Params>, ErrorStack>

Constructs an EcKey corresponding to a curve.

This corresponds to EC_KEY_set_group.

Source§

impl EcKey<Public>

Source

pub fn from_public_key( group: &EcGroupRef, public_key: &EcPointRef, ) -> Result<EcKey<Public>, ErrorStack>

Constructs an EcKey from the specified group with the associated EcPoint: public_key.

This will only have the associated public_key.

§Example
use openssl::bn::BigNumContext;
use openssl::ec::*;
use openssl::nid::Nid;
use openssl::pkey::PKey;

let group = EcGroup::from_curve_name(Nid::SECP384R1)?;
let mut ctx = BigNumContext::new()?;

// get bytes from somewhere
let public_key = // ...

// create an EcKey from the binary form of a EcPoint
let point = EcPoint::from_bytes(&group, &public_key, &mut ctx)?;
let key = EcKey::from_public_key(&group, &point)?;
key.check_key()?;

This corresponds to EC_KEY_set_public_key.

Source

pub fn from_public_key_affine_coordinates( group: &EcGroupRef, x: &BigNumRef, y: &BigNumRef, ) -> Result<EcKey<Public>, ErrorStack>

Constructs a public key from its affine coordinates.

This corresponds to EC_KEY_set_public_key_affine_coordinates.

Source

pub fn public_key_from_pem(pem: &[u8]) -> Result<EcKey<Public>, ErrorStack>

Decodes a PEM-encoded SubjectPublicKeyInfo structure containing a EC key.

The input should have a header of -----BEGIN PUBLIC KEY-----.

This corresponds to PEM_read_bio_EC_PUBKEY.

Source

pub fn public_key_from_der(der: &[u8]) -> Result<EcKey<Public>, ErrorStack>

Decodes a DER-encoded SubjectPublicKeyInfo structure containing a EC key.

This corresponds to d2i_EC_PUBKEY.

Source§

impl EcKey<Private>

Source

pub fn generate(group: &EcGroupRef) -> Result<EcKey<Private>, ErrorStack>

Generates a new public/private key pair on the specified curve.

§Examples
use openssl::bn::BigNumContext;
use openssl::nid::Nid;
use openssl::ec::{EcGroup, EcKey, PointConversionForm};

let nid = Nid::X9_62_PRIME256V1; // NIST P-256 curve
let group = EcGroup::from_curve_name(nid)?;
let key = EcKey::generate(&group)?;

let mut ctx = BigNumContext::new()?;

let public_key = &key.public_key().to_bytes(
    &group,
    PointConversionForm::COMPRESSED,
    &mut ctx,
)?;
assert_eq!(public_key.len(), 33);
assert_ne!(public_key[0], 0x04);

let private_key = key.private_key().to_vec();
assert!(private_key.len() >= 31);

This corresponds to EC_KEY_generate_key.

Source

pub fn from_private_components( group: &EcGroupRef, private_number: &BigNumRef, public_key: &EcPointRef, ) -> Result<EcKey<Private>, ErrorStack>

Constructs an public/private key pair given a curve, a private key and a public key point.

This corresponds to EC_KEY_set_private_key.

Source

pub fn private_key_from_pem(pem: &[u8]) -> Result<EcKey<Private>, ErrorStack>

Deserializes a private key from a PEM-encoded ECPrivateKey structure.

The input should have a header of -----BEGIN EC PRIVATE KEY-----.

This corresponds to PEM_read_bio_ECPrivateKey.

Source

pub fn private_key_from_pem_passphrase( pem: &[u8], passphrase: &[u8], ) -> Result<EcKey<Private>, ErrorStack>

Deserializes a private key from a PEM-encoded encrypted ECPrivateKey structure.

The input should have a header of -----BEGIN EC PRIVATE KEY-----.

This corresponds to PEM_read_bio_ECPrivateKey.

Source

pub fn private_key_from_pem_callback<F>( pem: &[u8], callback: F, ) -> Result<EcKey<Private>, ErrorStack>
where F: FnOnce(&mut [u8]) -> Result<usize, ErrorStack>,

Deserializes a private key from a PEM-encoded encrypted ECPrivateKey structure.

The callback should fill the password into the provided buffer and return its length.

The input should have a header of -----BEGIN EC PRIVATE KEY-----.

This corresponds to PEM_read_bio_ECPrivateKey.

Source

pub fn private_key_from_der(der: &[u8]) -> Result<EcKey<Private>, ErrorStack>

Decodes a DER-encoded elliptic curve private key structure.

This corresponds to d2i_ECPrivateKey.

Methods from Deref<Target = EcKeyRef<T>>§

Source

pub fn private_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack>

Serializes the private key to a PEM-encoded ECPrivateKey structure.

The output will have a header of -----BEGIN EC PRIVATE KEY-----.

This corresponds to PEM_write_bio_ECPrivateKey.

Source

pub fn private_key_to_pem_passphrase( &self, cipher: Cipher, passphrase: &[u8], ) -> Result<Vec<u8>, ErrorStack>

Serializes the private key to a PEM-encoded encrypted ECPrivateKey structure.

The output will have a header of -----BEGIN EC PRIVATE KEY-----.

This corresponds to PEM_write_bio_ECPrivateKey.

Source

pub fn private_key_to_der(&self) -> Result<Vec<u8>, ErrorStack>

Serializes the private key into a DER-encoded ECPrivateKey structure.

This corresponds to i2d_ECPrivateKey.

Source

pub fn private_key(&self) -> &BigNumRef

Returns the private key value.

This corresponds to EC_KEY_get0_private_key.

Source

pub fn public_key(&self) -> &EcPointRef

Returns the public key.

This corresponds to EC_KEY_get0_public_key.

Source

pub fn public_key_to_pem(&self) -> Result<Vec<u8>, ErrorStack>

Serializes the public key into a PEM-encoded SubjectPublicKeyInfo structure.

The output will have a header of -----BEGIN PUBLIC KEY-----.

This corresponds to PEM_write_bio_EC_PUBKEY.

Source

pub fn public_key_to_der(&self) -> Result<Vec<u8>, ErrorStack>

Serializes the public key into a DER-encoded SubjectPublicKeyInfo structure.

This corresponds to i2d_EC_PUBKEY.

Source

pub fn group(&self) -> &EcGroupRef

Returns the key’s group.

This corresponds to EC_KEY_get0_group.

Source

pub fn check_key(&self) -> Result<(), ErrorStack>

Checks the key for validity.

This corresponds to EC_KEY_check_key.

Trait Implementations§

Source§

impl<T> AsRef<EcKeyRef<T>> for EcKey<T>

Source§

fn as_ref(&self) -> &EcKeyRef<T>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T> Borrow<EcKeyRef<T>> for EcKey<T>

Source§

fn borrow(&self) -> &EcKeyRef<T>

Immutably borrows from an owned value. Read more
Source§

impl<T> Clone for EcKey<T>

Source§

fn clone(&self) -> EcKey<T>

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<T> Debug for EcKey<T>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<T> Deref for EcKey<T>

Source§

type Target = EcKeyRef<T>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &EcKeyRef<T>

Dereferences the value.
Source§

impl<T> DerefMut for EcKey<T>

Source§

fn deref_mut(&mut self) -> &mut EcKeyRef<T>

Mutably dereferences the value.
Source§

impl<T> Drop for EcKey<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<T> ForeignType for EcKey<T>

Source§

type CType = EC_KEY

The raw C type.
Source§

type Ref = EcKeyRef<T>

The type representing a reference to this type.
Source§

unsafe fn from_ptr(ptr: *mut EC_KEY) -> EcKey<T>

Constructs an instance of this type from its raw type.
Source§

fn as_ptr(&self) -> *mut EC_KEY

Returns a raw pointer to the wrapped value.
Source§

impl<T> TryFrom<EcKey<T>> for PKey<T>

Source§

type Error = ErrorStack

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

fn try_from(ec_key: EcKey<T>) -> Result<PKey<T>, ErrorStack>

Performs the conversion.
Source§

impl<T> TryFrom<PKey<T>> for EcKey<T>

Source§

type Error = ErrorStack

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

fn try_from(pkey: PKey<T>) -> Result<EcKey<T>, ErrorStack>

Performs the conversion.
Source§

impl<T> Send for EcKey<T>

Source§

impl<T> Sync for EcKey<T>

Auto Trait Implementations§

§

impl<T> Freeze for EcKey<T>

§

impl<T> RefUnwindSafe for EcKey<T>
where T: RefUnwindSafe,

§

impl<T> Unpin for EcKey<T>
where T: Unpin,

§

impl<T> UnwindSafe for EcKey<T>
where T: UnwindSafe,

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> 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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, 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.

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 8 bytes