1use 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 algorithm.to_u16().unwrap()
84 }
85}