pub struct Signature<C>where
    C: PrimeCurve,{ /* private fields */ }
Available on crate feature signature only.
Expand description

ECDSA signature (fixed-size). Generic over elliptic curve types.

Serialized as fixed-sized big endian scalar values with no added framing:

  • r: field element size for the given curve, big-endian
  • s: field element size for the given curve, big-endian

Both r and s MUST be non-zero.

For example, in a curve with a 256-bit modulus like NIST P-256 or secp256k1, r and s will both be 32-bytes and serialized as big endian, resulting in a signature with a total of 64-bytes.

ASN.1 DER-encoded signatures also supported via the Signature::from_der and Signature::to_der methods.

serde support

When the serde feature of this crate is enabled, it provides support for serializing and deserializing ECDSA signatures using the Serialize and Deserialize traits.

The serialization uses a hexadecimal encoding when used with “human readable” text formats, and a binary encoding otherwise.

Implementations§

source§

impl<C> Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

source

pub fn from_bytes( bytes: &GenericArray<u8, <<C as Curve>::FieldBytesSize as Add>::Output> ) -> Result<Signature<C>, Error>

Parse a signature from fixed-width bytes, i.e. 2 * the size of [FieldBytes] for a particular curve.

Returns
  • Ok(signature) if the r and s components are both in the valid range 1..n when serialized as concatenated big endian integers.
  • Err(err) if the r and/or s component of the signature is out-of-range when interpreted as a big endian integer.
source

pub fn from_slice(slice: &[u8]) -> Result<Signature<C>, Error>

Parse a signature from a byte slice.

source

pub fn from_der(bytes: &[u8]) -> Result<Signature<C>, Error>where <<<C as Curve>::FieldBytesSize as Add>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>, <<C as Curve>::FieldBytesSize as Add>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>> + ArrayLength<u8>,

Available on crate feature der only.

Parse a signature from ASN.1 DER.

source

pub fn from_scalars( r: impl Into<GenericArray<u8, <C as Curve>::FieldBytesSize>>, s: impl Into<GenericArray<u8, <C as Curve>::FieldBytesSize>> ) -> Result<Signature<C>, Error>

Create a Signature from the serialized r and s scalar values which comprise the signature.

Returns
  • Ok(signature) if the r and s components are both in the valid range 1..n when serialized as concatenated big endian integers.
  • Err(err) if the r and/or s component of the signature is out-of-range when interpreted as a big endian integer.
source

pub fn split_bytes( &self ) -> (GenericArray<u8, <C as Curve>::FieldBytesSize>, GenericArray<u8, <C as Curve>::FieldBytesSize>)

Split the signature into its r and s components, represented as bytes.

source

pub fn to_bytes( &self ) -> GenericArray<u8, <<C as Curve>::FieldBytesSize as Add>::Output>

Serialize this signature as bytes.

source

pub fn to_der(&self) -> Signature<C>where <<<C as Curve>::FieldBytesSize as Add>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>, <<C as Curve>::FieldBytesSize as Add>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>> + ArrayLength<u8>,

Available on crate feature der only.

Serialize this signature as ASN.1 DER.

source

pub fn to_vec(&self) -> Vec<u8>

Available on crate feature alloc only.

Convert this signature into a byte vector.

Trait Implementations§

source§

impl<C> Clone for Signature<C>where C: Clone + PrimeCurve,

source§

fn clone(&self) -> Signature<C>

Returns a copy 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<C> Debug for Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

source§

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

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

impl<C> Display for Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

source§

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

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

impl<C> From<Signature<C>> for GenericArray<u8, <<C as Curve>::FieldBytesSize as Add>::Output>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

source§

fn from( signature: Signature<C> ) -> GenericArray<u8, <<C as Curve>::FieldBytesSize as Add>::Output>

Converts to this type from the input type.
source§

impl<C> From<Signature<C>> for Signature<C>where C: PrimeCurve, <<<C as Curve>::FieldBytesSize as Add>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>, <<C as Curve>::FieldBytesSize as Add>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>> + ArrayLength<u8>,

source§

fn from(sig: Signature<C>) -> Signature<C>

Converts to this type from the input type.
source§

impl<C> LowerHex for Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

source§

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

Formats the value using the given formatter.
source§

impl<C> PartialEq for Signature<C>where C: PartialEq + PrimeCurve,

source§

fn eq(&self, other: &Signature<C>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<C> SignatureEncoding for Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

§

type Repr = GenericArray<u8, <<C as Curve>::FieldBytesSize as Add>::Output>

Byte representation of a signature.
source§

fn to_bytes(&self) -> Self::Repr

Encode signature as its byte representation.
source§

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

Available on crate feature alloc only.
Encode signature as a byte vector.
source§

fn encoded_len(&self) -> usize

Get the length of this signature when encoded.
source§

impl<C> Signer<Signature<C>> for SigningKey<C>where C: CurveAlg, SignatureSize<C>: ArrayLength<u8>,

source§

fn try_sign(&self, msg: &[u8]) -> Result<Signature<C>, Error>

Attempt to sign the given message, returning a digital signature on success, or an error if something went wrong. Read more
source§

fn sign(&self, msg: &[u8]) -> S

Sign the given message and return a digital signature
source§

impl<C> TryFrom<&[u8]> for Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

§

type Error = Error

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

fn try_from(slice: &[u8]) -> Result<Signature<C>, Error>

Performs the conversion.
source§

impl<C> TryFrom<Signature<C>> for Signature<C>where C: PrimeCurve, <<<C as Curve>::FieldBytesSize as Add>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>, <<C as Curve>::FieldBytesSize as Add>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>> + ArrayLength<u8>,

§

type Error = Error

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

fn try_from(sig: Signature<C>) -> Result<Signature<C>, Error>

Performs the conversion.
source§

impl<C> UpperHex for Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>,

source§

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

Formats the value using the given formatter.
source§

impl<C> Verifier<Signature<C>> for VerifyingKey<C>where C: CurveAlg + PrimeCurve, FieldBytesSize<C>: ModulusSize, SignatureSize<C>: ArrayLength<u8>,

source§

fn verify(&self, msg: &[u8], sig: &Signature<C>) -> Result<(), Error>

Use Self to verify that the provided signature for a given message bytestring is authentic. Read more
source§

impl<C> Copy for Signature<C>where C: PrimeCurve, <<C as Curve>::FieldBytesSize as Add>::Output: ArrayLength<u8>, <<<C as Curve>::FieldBytesSize as Add>::Output as ArrayLength<u8>>::ArrayType: Copy,

source§

impl<C> Eq for Signature<C>where C: Eq + PrimeCurve,

source§

impl<C> StructuralEq for Signature<C>where C: PrimeCurve,

source§

impl<C> StructuralPartialEq for Signature<C>where C: PrimeCurve,

Auto Trait Implementations§

§

impl<C> RefUnwindSafe for Signature<C>where <C as Curve>::Uint: RefUnwindSafe,

§

impl<C> Send for Signature<C>

§

impl<C> Sync for Signature<C>

§

impl<C> Unpin for Signature<C>where <C as Curve>::Uint: Unpin,

§

impl<C> UnwindSafe for Signature<C>where <C as Curve>::Uint: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 Twhere 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

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

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 Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

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

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

§

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 Twhere U: TryFrom<T>,

§

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.