sec1/
parameters.rs
1use der::{
2 asn1::{AnyRef, ObjectIdentifier},
3 DecodeValue, EncodeValue, FixedTag, Header, Length, Reader, Tag, Writer,
4};
5
6#[derive(Copy, Clone, Debug, Eq, PartialEq)]
21#[cfg_attr(docsrs, doc(cfg(feature = "der")))]
22pub enum EcParameters {
23 NamedCurve(ObjectIdentifier),
29}
30
31impl<'a> DecodeValue<'a> for EcParameters {
32 fn decode_value<R: Reader<'a>>(decoder: &mut R, header: Header) -> der::Result<Self> {
33 ObjectIdentifier::decode_value(decoder, header).map(Self::NamedCurve)
34 }
35}
36
37impl EncodeValue for EcParameters {
38 fn value_len(&self) -> der::Result<Length> {
39 match self {
40 Self::NamedCurve(oid) => oid.value_len(),
41 }
42 }
43
44 fn encode_value(&self, writer: &mut dyn Writer) -> der::Result<()> {
45 match self {
46 Self::NamedCurve(oid) => oid.encode_value(writer),
47 }
48 }
49}
50
51impl EcParameters {
52 pub fn named_curve(self) -> Option<ObjectIdentifier> {
54 match self {
55 Self::NamedCurve(oid) => Some(oid),
56 }
57 }
58}
59
60impl<'a> From<&'a EcParameters> for AnyRef<'a> {
61 fn from(params: &'a EcParameters) -> AnyRef<'a> {
62 match params {
63 EcParameters::NamedCurve(oid) => oid.into(),
64 }
65 }
66}
67
68impl From<ObjectIdentifier> for EcParameters {
69 fn from(oid: ObjectIdentifier) -> EcParameters {
70 EcParameters::NamedCurve(oid)
71 }
72}
73
74impl FixedTag for EcParameters {
75 const TAG: Tag = Tag::ObjectIdentifier;
76}