1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use crate::{
handles::AuthHandle,
tss2_esys::{ESYS_TR, ESYS_TR_RH_OWNER, ESYS_TR_RH_PLATFORM},
utils::Hierarchy,
Error, Result, WrapperErrorKind,
};
use log::error;
use std::convert::{From, TryFrom};
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum NvAuthorization {
Owner,
Platform,
}
impl From<NvAuthorization> for Hierarchy {
fn from(nv_auhtorization: NvAuthorization) -> Hierarchy {
match nv_auhtorization {
NvAuthorization::Owner => Hierarchy::Owner,
NvAuthorization::Platform => Hierarchy::Platform,
}
}
}
impl TryFrom<Hierarchy> for NvAuthorization {
type Error = Error;
fn try_from(hierarchy: Hierarchy) -> Result<NvAuthorization> {
match hierarchy {
Hierarchy::Owner => Ok(NvAuthorization::Owner),
Hierarchy::Platform => Ok(NvAuthorization::Platform),
_ => {
error!("Error: Found invalid value when trying to convert Hierarchy to NV Authroization.");
Err(Error::local_error(WrapperErrorKind::InvalidParam))
}
}
}
}
impl TryFrom<AuthHandle> for NvAuthorization {
type Error = Error;
fn try_from(auth_handle: AuthHandle) -> Result<NvAuthorization> {
match auth_handle.value() {
ESYS_TR_RH_OWNER => Ok(NvAuthorization::Owner),
ESYS_TR_RH_PLATFORM => Ok(NvAuthorization::Platform),
_ => {
error!("Error: Found invalid value when trying convert from auth handle");
Err(Error::local_error(WrapperErrorKind::InvalidParam))
}
}
}
}
impl From<NvAuthorization> for AuthHandle {
fn from(nv_auhtorization: NvAuthorization) -> AuthHandle {
match nv_auhtorization {
NvAuthorization::Owner => AuthHandle::from(ESYS_TR_RH_OWNER),
NvAuthorization::Platform => AuthHandle::from(ESYS_TR_RH_PLATFORM),
}
}
}
impl From<NvAuthorization> for ESYS_TR {
fn from(nv_auhtorization: NvAuthorization) -> ESYS_TR {
match nv_auhtorization {
NvAuthorization::Owner => ESYS_TR_RH_OWNER,
NvAuthorization::Platform => ESYS_TR_RH_PLATFORM,
}
}
}
impl TryFrom<ESYS_TR> for NvAuthorization {
type Error = Error;
fn try_from(esys_tr: ESYS_TR) -> Result<NvAuthorization> {
match esys_tr {
ESYS_TR_RH_OWNER => Ok(NvAuthorization::Owner),
ESYS_TR_RH_PLATFORM => Ok(NvAuthorization::Platform),
_ => {
error!("Error: Found invalid value when trying parse NV Authroization");
Err(Error::local_error(WrapperErrorKind::InvalidParam))
}
}
}
}