tss_esapi/structures/buffers/
attest.rs1use crate::{
5 structures::Attest, traits::UnMarshall, tss2_esys::TPM2B_ATTEST, Error, Result,
6 WrapperErrorKind,
7};
8use log::error;
9use std::{convert::TryFrom, ops::Deref};
10use zeroize::Zeroizing;
11
12#[derive(Debug, Clone, PartialEq, Eq)]
19pub struct AttestBuffer(Zeroizing<Vec<u8>>);
20
21impl Default for AttestBuffer {
22 fn default() -> Self {
23 AttestBuffer(Vec::new().into())
24 }
25}
26
27impl AttestBuffer {
28 pub const MAX_SIZE: usize = 2304;
29
30 pub fn value(&self) -> &[u8] {
31 &self.0
32 }
33}
34
35impl Deref for AttestBuffer {
36 type Target = Vec<u8>;
37
38 fn deref(&self) -> &Self::Target {
39 &self.0
40 }
41}
42
43impl TryFrom<Vec<u8>> for AttestBuffer {
44 type Error = Error;
45
46 fn try_from(bytes: Vec<u8>) -> Result<Self> {
47 if bytes.len() > Self::MAX_SIZE {
48 error!("Invalid Vec<u8> size(> {})", Self::MAX_SIZE);
49 return Err(Error::local_error(WrapperErrorKind::WrongParamSize));
50 }
51 Ok(AttestBuffer(bytes.into()))
52 }
53}
54
55impl TryFrom<&[u8]> for AttestBuffer {
56 type Error = Error;
57
58 fn try_from(bytes: &[u8]) -> Result<Self> {
59 if bytes.len() > Self::MAX_SIZE {
60 error!("Invalid &[u8] size(> {})", Self::MAX_SIZE);
61 return Err(Error::local_error(WrapperErrorKind::WrongParamSize));
62 }
63 Ok(AttestBuffer(bytes.to_vec().into()))
64 }
65}
66
67impl TryFrom<TPM2B_ATTEST> for AttestBuffer {
68 type Error = Error;
69
70 fn try_from(tss: TPM2B_ATTEST) -> Result<Self> {
71 let size = tss.size as usize;
72 if size > Self::MAX_SIZE {
73 error!("Invalid buffer size(> {})", Self::MAX_SIZE);
74 return Err(Error::local_error(WrapperErrorKind::WrongParamSize));
75 }
76 Ok(AttestBuffer(tss.attestationData[..size].to_vec().into()))
77 }
78}
79
80impl From<AttestBuffer> for TPM2B_ATTEST {
81 fn from(native: AttestBuffer) -> Self {
82 let mut buffer = TPM2B_ATTEST {
83 size: native.0.len() as u16,
84 ..Default::default()
85 };
86 buffer.attestationData[..native.0.len()].copy_from_slice(&native.0);
87 buffer
88 }
89}
90
91impl TryFrom<AttestBuffer> for Attest {
92 type Error = Error;
93
94 fn try_from(buf: AttestBuffer) -> Result<Self> {
95 Attest::unmarshall(&buf.0)
96 }
97}