tss_esapi/constants/
algorithm.rs

1// Copyright 2020 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::{
5    constants::tss::{
6        TPM2_ALG_AES, TPM2_ALG_CAMELLIA, TPM2_ALG_CBC, TPM2_ALG_CFB, TPM2_ALG_CMAC, TPM2_ALG_CTR,
7        TPM2_ALG_ECB, TPM2_ALG_ECC, TPM2_ALG_ECDAA, TPM2_ALG_ECDH, TPM2_ALG_ECDSA, TPM2_ALG_ECMQV,
8        TPM2_ALG_ECSCHNORR, TPM2_ALG_ERROR, TPM2_ALG_HMAC, TPM2_ALG_KDF1_SP800_108,
9        TPM2_ALG_KDF1_SP800_56A, TPM2_ALG_KDF2, TPM2_ALG_KEYEDHASH, TPM2_ALG_MGF1, TPM2_ALG_NULL,
10        TPM2_ALG_OAEP, TPM2_ALG_OFB, TPM2_ALG_RSA, TPM2_ALG_RSAES, TPM2_ALG_RSAPSS,
11        TPM2_ALG_RSASSA, TPM2_ALG_SHA1, TPM2_ALG_SHA256, TPM2_ALG_SHA384, TPM2_ALG_SHA3_256,
12        TPM2_ALG_SHA3_384, TPM2_ALG_SHA3_512, TPM2_ALG_SHA512, TPM2_ALG_SM2, TPM2_ALG_SM3_256,
13        TPM2_ALG_SM4, TPM2_ALG_SYMCIPHER, TPM2_ALG_TDES, TPM2_ALG_XOR,
14    },
15    tss2_esys::TPM2_ALG_ID,
16    Error, Result, WrapperErrorKind,
17};
18use log::error;
19use num_derive::{FromPrimitive, ToPrimitive};
20use num_traits::{FromPrimitive, ToPrimitive};
21use std::convert::TryFrom;
22#[derive(FromPrimitive, ToPrimitive, Copy, Clone, Debug, PartialEq, Eq, Hash)]
23#[repr(u16)]
24pub enum AlgorithmIdentifier {
25    Aes = TPM2_ALG_AES,
26    Camellia = TPM2_ALG_CAMELLIA,
27    Cbc = TPM2_ALG_CBC,
28    Cfb = TPM2_ALG_CFB,
29    Ctr = TPM2_ALG_CTR,
30    Ecb = TPM2_ALG_ECB,
31    Ecc = TPM2_ALG_ECC,
32    EcDaa = TPM2_ALG_ECDAA,
33    EcDh = TPM2_ALG_ECDH,
34    EcDsa = TPM2_ALG_ECDSA,
35    EcMqv = TPM2_ALG_ECMQV,
36    EcSchnorr = TPM2_ALG_ECSCHNORR,
37    Error = TPM2_ALG_ERROR,
38    Hmac = TPM2_ALG_HMAC,
39    Kdf1Sp800_108 = TPM2_ALG_KDF1_SP800_108,
40    Kdf1Sp800_56a = TPM2_ALG_KDF1_SP800_56A,
41    Kdf2 = TPM2_ALG_KDF2,
42    KeyedHash = TPM2_ALG_KEYEDHASH,
43    Mgf1 = TPM2_ALG_MGF1,
44    Null = TPM2_ALG_NULL,
45    Oaep = TPM2_ALG_OAEP,
46    Ofb = TPM2_ALG_OFB,
47    Rsa = TPM2_ALG_RSA,
48    RsaEs = TPM2_ALG_RSAES,
49    RsaPss = TPM2_ALG_RSAPSS,
50    RsaSsa = TPM2_ALG_RSASSA,
51    Sha1 = TPM2_ALG_SHA1,
52    Sha256 = TPM2_ALG_SHA256,
53    Sha384 = TPM2_ALG_SHA384,
54    Sha3_256 = TPM2_ALG_SHA3_256,
55    Sha3_384 = TPM2_ALG_SHA3_384,
56    Sha3_512 = TPM2_ALG_SHA3_512,
57    Sha512 = TPM2_ALG_SHA512,
58    Sm2 = TPM2_ALG_SM2,
59    Sm3_256 = TPM2_ALG_SM3_256,
60    Sm4 = TPM2_ALG_SM4,
61    SymCipher = TPM2_ALG_SYMCIPHER,
62    Tdes = TPM2_ALG_TDES,
63    Xor = TPM2_ALG_XOR,
64    Cmac = TPM2_ALG_CMAC,
65}
66
67impl TryFrom<TPM2_ALG_ID> for AlgorithmIdentifier {
68    type Error = Error;
69    fn try_from(tpm_alg_id: TPM2_ALG_ID) -> Result<AlgorithmIdentifier> {
70        AlgorithmIdentifier::from_u16(tpm_alg_id).ok_or_else(|| {
71            error!(
72                "Value = {} did not match any algorithm identifier",
73                tpm_alg_id
74            );
75            Error::local_error(WrapperErrorKind::InvalidParam)
76        })
77    }
78}
79
80impl From<AlgorithmIdentifier> for TPM2_ALG_ID {
81    fn from(algorithm: AlgorithmIdentifier) -> TPM2_ALG_ID {
82        // The values are well defined so this cannot fail.
83        algorithm.to_u16().unwrap()
84    }
85}