use crate::ast::IpsecSpec;
use alloc::vec::Vec;
#[doc(inline)]
pub use super::ah::build_ipsec_ah_payload;
pub fn build_ipsec_esp_payload(spec: &IpsecSpec, payload: &[u8]) -> (Vec<u8>, u8) {
let spi = spec.spi.unwrap_or(0x1000);
let seq = spec.seq.unwrap_or(1);
let next_hdr = spec.next_header.unwrap_or(59);
let mut esp = Vec::with_capacity(32 + payload.len());
esp.extend_from_slice(&spi.to_be_bytes());
esp.extend_from_slice(&seq.to_be_bytes());
if let Some(iv) = &spec.iv {
esp.extend_from_slice(iv);
} else {
esp.extend_from_slice(&[0u8; 8]); }
if payload.is_empty() {
esp.extend_from_slice(&[0xAA; 16]); } else {
esp.extend_from_slice(payload);
}
esp.push(0);
esp.push(next_hdr);
if let Some(icv) = &spec.icv {
esp.extend_from_slice(icv);
} else {
esp.extend_from_slice(&[0u8; 12]); }
(esp, 50)
}