/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 | | } |