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 fn ensure_valid_buffer_size(buffer_size: usize, container_name: &str) -> Result<()> {
36 if buffer_size > Self::MAX_SIZE {
37 error!("Invalid {} size(> {})", container_name, Self::MAX_SIZE);
38 return Err(Error::local_error(WrapperErrorKind::WrongParamSize));
39 }
40 Ok(())
41 }
42}
43
44impl Deref for AttestBuffer {
45 type Target = Vec<u8>;
46
47 fn deref(&self) -> &Self::Target {
48 &self.0
49 }
50}
51
52impl TryFrom<Vec<u8>> for AttestBuffer {
53 type Error = Error;
54
55 fn try_from(bytes: Vec<u8>) -> Result<Self> {
56 Self::ensure_valid_buffer_size(bytes.len(), "Vec<u8>")?;
57 Ok(AttestBuffer(bytes.into()))
58 }
59}
60
61impl TryFrom<&[u8]> for AttestBuffer {
62 type Error = Error;
63
64 fn try_from(bytes: &[u8]) -> Result<Self> {
65 Self::ensure_valid_buffer_size(bytes.len(), "&[u8]")?;
66 Ok(AttestBuffer(bytes.to_vec().into()))
67 }
68}
69
70impl TryFrom<TPM2B_ATTEST> for AttestBuffer {
71 type Error = Error;
72
73 fn try_from(tss: TPM2B_ATTEST) -> Result<Self> {
74 let size = tss.size as usize;
75 Self::ensure_valid_buffer_size(size, "buffer")?;
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}