Struct ecdsa::Signature [−][src]
pub struct Signature<C: PrimeCurve> where
SignatureSize<C>: 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
pub fn from_der(bytes: &[u8]) -> Result<Self> where
MaxSize<C>: ArrayLength<u8>,
<FieldSize<C> as Add>::Output: Add<MaxOverhead> + ArrayLength<u8>,
This is supported on crate feature der
only.
pub fn from_der(bytes: &[u8]) -> Result<Self> where
MaxSize<C>: ArrayLength<u8>,
<FieldSize<C> as Add>::Output: Add<MaxOverhead> + ArrayLength<u8>,
der
only.Parse a signature from ASN.1 DER
Create a Signature
from the serialized r
and s
scalar values
which comprise the signature.
Split the signature into its r
and s
components, represented as bytes.
impl<C> Signature<C> where
C: PrimeCurve + ScalarArithmetic,
SignatureSize<C>: ArrayLength<u8>,
impl<C> Signature<C> where
C: PrimeCurve + ScalarArithmetic,
SignatureSize<C>: ArrayLength<u8>,
This is supported on crate feature arithmetic
only.
arithmetic
only.Get the r
component of this signature
This is supported on crate feature arithmetic
only.
arithmetic
only.Get the s
component of this signature
This is supported on crate feature arithmetic
only.
arithmetic
only.Split the signature into its r
and s
scalars.
This is supported on crate feature arithmetic
only.
arithmetic
only.Normalize signature into “low S” form as described in BIP 0062: Dealing with Malleability.
Trait Implementations
impl<'de, C> Deserialize<'de> for Signature<C> where
C: PrimeCurve + ScalarArithmetic,
SignatureSize<C>: ArrayLength<u8>,
This is supported on crate features arithmetic
and serde
only.
impl<'de, C> Deserialize<'de> for Signature<C> where
C: PrimeCurve + ScalarArithmetic,
SignatureSize<C>: ArrayLength<u8>,
arithmetic
and serde
only.Deserialize this value from the given Serde deserializer. Read more
impl<C, D> DigestSigner<D, Signature<C>> for SigningKey<C> where
C: PrimeCurve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = FieldSize<C>> + BlockInput + Clone + Default + Reset + Update,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
impl<C, D> DigestSigner<D, Signature<C>> for SigningKey<C> where
C: PrimeCurve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = FieldSize<C>> + BlockInput + Clone + Default + Reset + Update,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
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
Sign the given prehashed message [Digest
], returning a signature. Read more
impl<C, D> DigestVerifier<D, Signature<C>> for VerifyingKey<C> where
C: PrimeCurve + ProjectiveArithmetic,
D: Digest<OutputSize = FieldSize<C>>,
AffinePoint<C>: VerifyPrimitive<C>,
Scalar<C>: Reduce<C::UInt>,
SignatureSize<C>: ArrayLength<u8>,
impl<C, D> DigestVerifier<D, Signature<C>> for VerifyingKey<C> where
C: PrimeCurve + ProjectiveArithmetic,
D: Digest<OutputSize = FieldSize<C>>,
AffinePoint<C>: VerifyPrimitive<C>,
Scalar<C>: Reduce<C::UInt>,
SignatureSize<C>: ArrayLength<u8>,
Verify the signature against the given [Digest
] output.
impl<C> FromStr for Signature<C> where
C: PrimeCurve + ScalarArithmetic,
SignatureSize<C>: ArrayLength<u8>,
This is supported on crate feature arithmetic
only.
impl<C> FromStr for Signature<C> where
C: PrimeCurve + ScalarArithmetic,
SignatureSize<C>: ArrayLength<u8>,
arithmetic
only.impl<C: PartialEq + PrimeCurve> PartialEq<Signature<C>> for Signature<C> where
SignatureSize<C>: ArrayLength<u8>,
impl<C: PartialEq + PrimeCurve> PartialEq<Signature<C>> for Signature<C> where
SignatureSize<C>: ArrayLength<u8>,
impl<C> PrehashSignature for Signature<C> where
C: DigestPrimitive,
<FieldSize<C> as Add>::Output: ArrayLength<u8>,
This is supported on crate feature hazmat
only.
impl<C> PrehashSignature for Signature<C> where
C: DigestPrimitive,
<FieldSize<C> as Add>::Output: ArrayLength<u8>,
hazmat
only.impl<C, D> RandomizedDigestSigner<D, Signature<C>> for SigningKey<C> where
C: PrimeCurve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = FieldSize<C>> + BlockInput + Clone + Default + Reset + Update,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
impl<C, D> RandomizedDigestSigner<D, Signature<C>> for SigningKey<C> where
C: PrimeCurve + ProjectiveArithmetic,
D: FixedOutput<OutputSize = FieldSize<C>> + BlockInput + Clone + Default + Reset + Update,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
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
Self: RandomizedDigestSigner<C::Digest, Signature<C>>,
C: PrimeCurve + ProjectiveArithmetic + DigestPrimitive,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
impl<C> RandomizedSigner<Signature<C>> for SigningKey<C> where
Self: RandomizedDigestSigner<C::Digest, Signature<C>>,
C: PrimeCurve + ProjectiveArithmetic + DigestPrimitive,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
Attempt to sign the given message, returning a digital signature on success, or an error if something went wrong. Read more
impl<C> Serialize for Signature<C> where
C: PrimeCurve,
SignatureSize<C>: ArrayLength<u8>,
This is supported on crate feature serde
only.
impl<C> Serialize for Signature<C> where
C: PrimeCurve,
SignatureSize<C>: ArrayLength<u8>,
serde
only.impl<C> Signer<Signature<C>> for SigningKey<C> where
Self: DigestSigner<C::Digest, Signature<C>>,
C: PrimeCurve + ProjectiveArithmetic + DigestPrimitive,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
impl<C> Signer<Signature<C>> for SigningKey<C> where
Self: DigestSigner<C::Digest, Signature<C>>,
C: PrimeCurve + ProjectiveArithmetic + DigestPrimitive,
Scalar<C>: Invert<Output = Scalar<C>> + Reduce<C::UInt> + SignPrimitive<C>,
SignatureSize<C>: ArrayLength<u8>,
impl<C> TryFrom<&'_ [u8]> for Signature<C> where
C: PrimeCurve,
SignatureSize<C>: ArrayLength<u8>,
impl<C> TryFrom<&'_ [u8]> for Signature<C> where
C: PrimeCurve,
SignatureSize<C>: ArrayLength<u8>,
impl<C> Verifier<Signature<C>> for VerifyingKey<C> where
C: PrimeCurve + ProjectiveArithmetic + DigestPrimitive,
C::Digest: Digest<OutputSize = FieldSize<C>>,
AffinePoint<C>: VerifyPrimitive<C>,
Scalar<C>: Reduce<C::UInt>,
SignatureSize<C>: ArrayLength<u8>,
impl<C> Verifier<Signature<C>> for VerifyingKey<C> where
C: PrimeCurve + ProjectiveArithmetic + DigestPrimitive,
C::Digest: Digest<OutputSize = FieldSize<C>>,
AffinePoint<C>: VerifyPrimitive<C>,
Scalar<C>: Reduce<C::UInt>,
SignatureSize<C>: ArrayLength<u8>,
impl<C> Copy for Signature<C> where
C: PrimeCurve,
SignatureSize<C>: ArrayLength<u8>,
<SignatureSize<C> as ArrayLength<u8>>::ArrayType: Copy,
impl<C: PrimeCurve> StructuralPartialEq for Signature<C> where
SignatureSize<C>: 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
Mutably borrows from an owned value. Read more