diff --git a/rust/pv/src/req.rs b/rust/pv/src/req.rs index af250e39..d8e9d7df 100644 --- a/rust/pv/src/req.rs +++ b/rust/pv/src/req.rs @@ -506,6 +506,11 @@ impl<'a> BinReqValues<'a> { { T::ref_from_prefix(self.req_dep_aad) } + + /// Returns a reference to the tag of this [`BinReqValues`]. + pub(crate) fn tag(&self) -> &[u8] { + self.tag + } } #[cfg(test)] diff --git a/rust/pv/src/uvsecret/asrcb.rs b/rust/pv/src/uvsecret/asrcb.rs index be9b41b0..5f46786a 100644 --- a/rust/pv/src/uvsecret/asrcb.rs +++ b/rust/pv/src/uvsecret/asrcb.rs @@ -7,7 +7,7 @@ use crate::{ assert_size, crypto::{hkdf_rfc_5869, AesGcmResult}, misc::Flags, - req::{Aad, Keyslot, ReqEncrCtx}, + req::{Aad, BinReqValues, Keyslot, ReqEncrCtx}, request::{BootHdrTags, Confidential, Request}, secret::{ExtSecret, GuestSecret}, uv::{ConfigUid, UvFlags}, @@ -17,7 +17,7 @@ use openssl::{ md::Md, pkey::{PKey, Private, Public}, }; -use pv_core::request::RequestVersion; +use pv_core::{request::RequestVersion, secret::AddSecretMagic}; use zerocopy::AsBytes; /// Authenticated data w/o user data @@ -282,6 +282,12 @@ impl AddSecretRequest { ctx.encrypt_aead(&buf[aad_range], &buf[encr_range]) .map(|res| res.data()) } + + /// Get a copy of the add secret request tag + pub fn bin_tag(asrcb: &[u8]) -> Result> { + AddSecretMagic::try_from_bytes(asrcb)?; + BinReqValues::get(asrcb).map(|v| v.tag().to_vec()) + } } impl Request for AddSecretRequest {