Files
s390-tools/rust/pvebc/src/ebc_utils.rs
Marc Hartmayer 390e48869e pvebc: Fix cargo doc warning
$ cargo doc
...
warning: unclosed HTML tag `u8`
  --> pvebc/src/ebc_utils.rs:25:43
   |
25 | /// Read all data from a reader into a Vec<u8>
   |                                           ^^^^
   |
   = note: `#[warn(rustdoc::invalid_html_tags)]` on by default
help: try marking as source code
   |
25 | /// Read all data from a reader into a `Vec<u8>`
   |                                        +       +

Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com>
Signed-off-by: Marc Hartmayer <marc@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
2026-06-25 14:14:43 +02:00

57 lines
1.5 KiB
Rust

// SPDX-License-Identifier: MIT
//
// Copyright IBM Corp.
use std::io::Read;
use std::path::Path;
use anyhow::{bail, Context, Result};
use pv_core::misc::open_file;
/// Length of the MAC tag in bytes (last 16 bytes of AddSecretRequest files)
pub const MAC_TAG_LEN: usize = 16;
/// Opens a file and returns a boxed reader
pub fn get_reader_from_filepath<P: AsRef<Path>>(filepath: P) -> Result<Box<dyn Read>> {
Ok(Box::new(open_file(filepath)?))
}
/// Get reader from &Path with additional context on error
pub fn get_reader(filepath: &Path) -> Result<Box<dyn Read>> {
get_reader_from_filepath(filepath)
.with_context(|| format!("unable to get reader from {:?}", filepath))
}
/// Read all data from a reader into a `Vec<u8>`
pub fn get_data(rd_in: &mut Box<dyn Read>) -> Result<Vec<u8>> {
let mut data_in = Vec::new();
rd_in
.read_to_end(&mut data_in)
.context("Cannot read input file")?;
Ok(data_in)
}
/// Extract the MAC tag (last 16 bytes) from an AddSecretRequest file
///
/// # Errors
///
/// Returns an error if:
/// - The file cannot be read
/// - The file is smaller than MAC_TAG_LEN bytes
pub fn get_mac_tag(filepath: &Path) -> Result<Vec<u8>> {
let mut rd_in = get_reader(filepath)?;
let data_in = get_data(&mut rd_in)?;
if data_in.len() < MAC_TAG_LEN {
bail!(
"File {:?} too small to contain MAC tag (expected at least {} bytes, got {})",
filepath,
MAC_TAG_LEN,
data_in.len()
);
}
Ok(data_in[data_in.len() - MAC_TAG_LEN..].to_vec())
}