Struct ethers::signers::yubihsm::ecdsa::Signature [−][src]
pub struct Signature<C> where
C: Curve,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>, { /* fields omitted */ }
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-endians
: field element size for the given curve, big-endian
For example, in a curve with a 256-bit modulus like NIST P-256 or
secp256k1, r
and s
will both be 32-bytes, 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.
Implementations
impl<C> Signature<C> where
C: Curve,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> Signature<C> where
C: Curve,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
pub fn from_scalars(
r: impl Into<GenericArray<u8, <<C as Curve>::UInt as ArrayEncoding>::ByteSize>>,
s: impl Into<GenericArray<u8, <<C as Curve>::UInt as ArrayEncoding>::ByteSize>>
) -> Result<Signature<C>, Error>
pub fn from_scalars(
r: impl Into<GenericArray<u8, <<C as Curve>::UInt as ArrayEncoding>::ByteSize>>,
s: impl Into<GenericArray<u8, <<C as Curve>::UInt as ArrayEncoding>::ByteSize>>
) -> Result<Signature<C>, Error>
Create a Signature
from the serialized r
and s
scalar values
which comprise the signature.
pub fn from_der(bytes: &[u8]) -> Result<Signature<C>, Error> where
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
pub fn from_der(bytes: &[u8]) -> Result<Signature<C>, Error> where
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
Parse a signature from ASN.1 DER
pub fn to_der(&self) -> Signature<C> where
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
pub fn to_der(&self) -> Signature<C> where
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
Serialize this signature as ASN.1 DER
impl<C> Signature<C> where
C: Curve + ProjectiveArithmetic,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> Signature<C> where
C: Curve + ProjectiveArithmetic,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
Get the r
component of this signature
Get the s
component of this signature
pub fn normalize_s(&mut self) -> Result<bool, Error> where
<C as ScalarArithmetic>::Scalar: NormalizeLow,
pub fn normalize_s(&mut self) -> Result<bool, Error> where
<C as ScalarArithmetic>::Scalar: NormalizeLow,
Normalize signature into “low S” form as described in BIP 0062: Dealing with Malleability.
Trait Implementations
impl<C, D> DigestSigner<D, Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = <<C as Curve>::UInt as ArrayEncoding>::ByteSize> + BlockInput + Clone + Default + Reset + Update,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
impl<C, D> DigestSigner<D, Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = <<C as Curve>::UInt as ArrayEncoding>::ByteSize> + BlockInput + Clone + Default + Reset + Update,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
Sign message prehash using a deterministic ephemeral scalar (k
)
computed using the algorithm described in RFC 6979 (Section 3.2):
https://tools.ietf.org/html/rfc6979#section-3
Compute a fixed-sized P-256 ECDSA signature of the given digest
Compute a fixed-sized P-384 ECDSA signature of the given digest
pub fn try_sign_digest(&self, digest: D) -> Result<Signature<Secp256k1>, Error>
pub fn try_sign_digest(&self, digest: D) -> Result<Signature<Secp256k1>, Error>
pub fn try_sign_digest(&self, digest: D) -> Result<Signature<Secp256k1>, Error>
pub fn try_sign_digest(&self, digest: D) -> Result<Signature<Secp256k1>, Error>
Compute a fixed-size secp256k1 ECDSA signature of the given digest
impl<C, D> DigestVerifier<D, Signature<C>> for VerifyingKey<C> where
C: Curve + ProjectiveArithmetic,
D: Digest<OutputSize = <<C as Curve>::UInt as ArrayEncoding>::ByteSize>,
<C as AffineArithmetic>::AffinePoint: VerifyPrimitive<C>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C, D> DigestVerifier<D, Signature<C>> for VerifyingKey<C> where
C: Curve + ProjectiveArithmetic,
D: Digest<OutputSize = <<C as Curve>::UInt as ArrayEncoding>::ByteSize>,
<C as AffineArithmetic>::AffinePoint: VerifyPrimitive<C>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> PrehashSignature for Signature<C> where
C: DigestPrimitive,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> PrehashSignature for Signature<C> where
C: DigestPrimitive,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
type Digest = <C as DigestPrimitive>::Digest
type Digest = <C as DigestPrimitive>::Digest
Preferred Digest
algorithm to use when computing this signature type.
impl<C, D> RandomizedDigestSigner<D, Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = <<C as Curve>::UInt as ArrayEncoding>::ByteSize> + BlockInput + Clone + Default + Reset + Update,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
impl<C, D> RandomizedDigestSigner<D, Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = <<C as Curve>::UInt as ArrayEncoding>::ByteSize> + BlockInput + Clone + Default + Reset + Update,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
Sign message prehash using an ephemeral scalar (k
) derived according
to a variant of RFC 6979 (Section 3.6) which supplies additional
entropy from an RNG.
Sign the given prehashed message Digest
, returning a signature. Read more
impl<C> RandomizedSigner<Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic + DigestPrimitive,
SigningKey<C>: RandomizedDigestSigner<<C as DigestPrimitive>::Digest, Signature<C>>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
impl<C> RandomizedSigner<Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic + DigestPrimitive,
SigningKey<C>: RandomizedDigestSigner<<C as DigestPrimitive>::Digest, Signature<C>>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
Attempt to sign the given message, returning a digital signature on success, or an error if something went wrong. Read more
Parse a signature from its byte representation
impl<C> Signer<Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic + DigestPrimitive,
SigningKey<C>: DigestSigner<<C as DigestPrimitive>::Digest, Signature<C>>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
impl<C> Signer<Signature<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic + DigestPrimitive,
SigningKey<C>: DigestSigner<<C as DigestPrimitive>::Digest, Signature<C>>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<C as ScalarArithmetic>::Scalar: Invert,
<C as ScalarArithmetic>::Scalar: SignPrimitive<C>,
<C as ScalarArithmetic>::Scalar: Zeroize,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as ScalarArithmetic>::Scalar as Invert>::Output == <C as ScalarArithmetic>::Scalar,
impl<C> TryFrom<Signature<C>> for Signature<C> where
C: Curve,
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> TryFrom<Signature<C>> for Signature<C> where
C: Curve,
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>>::Output: ArrayLength<u8>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: Add<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B1>>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> Verifier<Signature<C>> for VerifyingKey<C> where
C: Curve + ProjectiveArithmetic + DigestPrimitive,
<C as DigestPrimitive>::Digest: Digest,
<C as AffineArithmetic>::AffinePoint: VerifyPrimitive<C>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as DigestPrimitive>::Digest as Digest>::OutputSize == <<C as Curve>::UInt as ArrayEncoding>::ByteSize,
impl<C> Verifier<Signature<C>> for VerifyingKey<C> where
C: Curve + ProjectiveArithmetic + DigestPrimitive,
<C as DigestPrimitive>::Digest: Digest,
<C as AffineArithmetic>::AffinePoint: VerifyPrimitive<C>,
<C as ScalarArithmetic>::Scalar: FromDigest<C>,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<C as DigestPrimitive>::Digest as Digest>::OutputSize == <<C as Curve>::UInt as ArrayEncoding>::ByteSize,
impl<C> Copy for Signature<C> where
C: Curve,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as ArrayLength<u8>>::ArrayType: Copy,
impl<C> Eq for Signature<C> where
C: Eq + Curve,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> StructuralEq for Signature<C> where
C: Curve,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
impl<C> StructuralPartialEq for Signature<C> where
C: Curve,
<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output: ArrayLength<u8>,
Auto Trait Implementations
impl<C> RefUnwindSafe for Signature<C> where
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as ArrayLength<u8>>::ArrayType: RefUnwindSafe,
impl<C> Unpin for Signature<C> where
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as ArrayLength<u8>>::ArrayType: Unpin,
impl<C> UnwindSafe for Signature<C> where
<<<<C as Curve>::UInt as ArrayEncoding>::ByteSize as Add<<<C as Curve>::UInt as ArrayEncoding>::ByteSize>>::Output as ArrayLength<u8>>::ArrayType: UnwindSafe,
Blanket Implementations
pub fn as_slice_of<T>(&self) -> Result<&[T], Error> where
T: FromByteSlice,
pub fn base32_len(&self) -> usize
pub fn base32_len(&self) -> usize
Calculate the base32 serialized length
Mutably borrows from an owned value. Read more
Compare self to key
and return true
if they are equal.
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
pub fn write_base32<W>(
&self,
writer: &mut W
) -> Result<(), <W as WriteBase32>::Err> where
W: WriteBase32,
pub fn write_base32<W>(
&self,
writer: &mut W
) -> Result<(), <W as WriteBase32>::Err> where
W: WriteBase32,
Encode as base32 and write it to the supplied writer Implementations shouldn’t allocate. Read more
pub fn vzip(self) -> V
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more