tss_esapi/interface_types/
ecc.rs

1// Copyright 2021 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3use crate::{constants::EccCurveIdentifier, tss2_esys::TPMI_ECC_CURVE, Error, Result};
4use std::convert::TryFrom;
5/// Enum containing the implemented ECC curves
6///
7/// # Details
8/// This corresponds to TPMI_ECC_CURVE
9#[derive(Debug, Copy, Clone, PartialEq, Eq)]
10pub enum EccCurve {
11    NistP192,
12    NistP224,
13    NistP256,
14    NistP384,
15    NistP521,
16    BnP256,
17    BnP638,
18    Sm2P256,
19}
20
21impl From<EccCurve> for EccCurveIdentifier {
22    fn from(ecc_curve: EccCurve) -> Self {
23        match ecc_curve {
24            EccCurve::NistP192 => EccCurveIdentifier::NistP192,
25            EccCurve::NistP224 => EccCurveIdentifier::NistP224,
26            EccCurve::NistP256 => EccCurveIdentifier::NistP256,
27            EccCurve::NistP384 => EccCurveIdentifier::NistP384,
28            EccCurve::NistP521 => EccCurveIdentifier::NistP521,
29            EccCurve::BnP256 => EccCurveIdentifier::BnP256,
30            EccCurve::BnP638 => EccCurveIdentifier::BnP638,
31            EccCurve::Sm2P256 => EccCurveIdentifier::Sm2P256,
32        }
33    }
34}
35
36impl From<EccCurveIdentifier> for EccCurve {
37    fn from(ecc_curve_identifier: EccCurveIdentifier) -> Self {
38        match ecc_curve_identifier {
39            EccCurveIdentifier::NistP192 => EccCurve::NistP192,
40            EccCurveIdentifier::NistP224 => EccCurve::NistP224,
41            EccCurveIdentifier::NistP256 => EccCurve::NistP256,
42            EccCurveIdentifier::NistP384 => EccCurve::NistP384,
43            EccCurveIdentifier::NistP521 => EccCurve::NistP521,
44            EccCurveIdentifier::BnP256 => EccCurve::BnP256,
45            EccCurveIdentifier::BnP638 => EccCurve::BnP638,
46            EccCurveIdentifier::Sm2P256 => EccCurve::Sm2P256,
47        }
48    }
49}
50
51impl From<EccCurve> for TPMI_ECC_CURVE {
52    fn from(curve: EccCurve) -> Self {
53        EccCurveIdentifier::from(curve).into()
54    }
55}
56
57impl TryFrom<TPMI_ECC_CURVE> for EccCurve {
58    type Error = Error;
59
60    fn try_from(tpmi_ecc_curve: TPMI_ECC_CURVE) -> Result<Self> {
61        Ok(EccCurve::from(EccCurveIdentifier::try_from(
62            tpmi_ecc_curve,
63        )?))
64    }
65}