Coverage Report

Created: 2025-07-23 06:36

/rust/registry/src/index.crates.io-6f17d22bba15001f/sec1-0.7.3/src/parameters.rs
Line
Count
Source (jump to first uncovered line)
1
use der::{
2
    asn1::{AnyRef, ObjectIdentifier},
3
    DecodeValue, EncodeValue, FixedTag, Header, Length, Reader, Tag, Writer,
4
};
5
6
/// Elliptic curve parameters as described in
7
/// [RFC5480 Section 2.1.1](https://datatracker.ietf.org/doc/html/rfc5480#section-2.1.1):
8
///
9
/// ```text
10
/// ECParameters ::= CHOICE {
11
///   namedCurve         OBJECT IDENTIFIER
12
///   -- implicitCurve   NULL
13
///   -- specifiedCurve  SpecifiedECDomain
14
/// }
15
///   -- implicitCurve and specifiedCurve MUST NOT be used in PKIX.
16
///   -- Details for SpecifiedECDomain can be found in [X9.62].
17
///   -- Any future additions to this CHOICE should be coordinated
18
///   -- with ANSI X9.
19
/// ```
20
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
21
pub enum EcParameters {
22
    /// Elliptic curve named by a particular OID.
23
    ///
24
    /// > namedCurve identifies all the required values for a particular
25
    /// > set of elliptic curve domain parameters to be represented by an
26
    /// > object identifier.
27
    NamedCurve(ObjectIdentifier),
28
}
29
30
impl<'a> DecodeValue<'a> for EcParameters {
31
0
    fn decode_value<R: Reader<'a>>(decoder: &mut R, header: Header) -> der::Result<Self> {
32
0
        ObjectIdentifier::decode_value(decoder, header).map(Self::NamedCurve)
33
0
    }
Unexecuted instantiation: <sec1::parameters::EcParameters as der::decode::DecodeValue>::decode_value::<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>
Unexecuted instantiation: <sec1::parameters::EcParameters as der::decode::DecodeValue>::decode_value::<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>
34
}
35
36
impl EncodeValue for EcParameters {
37
0
    fn value_len(&self) -> der::Result<Length> {
38
0
        match self {
39
0
            Self::NamedCurve(oid) => oid.value_len(),
40
0
        }
41
0
    }
42
43
0
    fn encode_value(&self, writer: &mut impl Writer) -> der::Result<()> {
44
0
        match self {
45
0
            Self::NamedCurve(oid) => oid.encode_value(writer),
46
0
        }
47
0
    }
48
}
49
50
impl EcParameters {
51
    /// Obtain the `namedCurve` OID.
52
0
    pub fn named_curve(self) -> Option<ObjectIdentifier> {
53
0
        match self {
54
0
            Self::NamedCurve(oid) => Some(oid),
55
0
        }
56
0
    }
57
}
58
59
impl<'a> From<&'a EcParameters> for AnyRef<'a> {
60
0
    fn from(params: &'a EcParameters) -> AnyRef<'a> {
61
0
        match params {
62
0
            EcParameters::NamedCurve(oid) => oid.into(),
63
0
        }
64
0
    }
65
}
66
67
impl From<ObjectIdentifier> for EcParameters {
68
0
    fn from(oid: ObjectIdentifier) -> EcParameters {
69
0
        EcParameters::NamedCurve(oid)
70
0
    }
71
}
72
73
impl FixedTag for EcParameters {
74
    const TAG: Tag = Tag::ObjectIdentifier;
75
}