introduce and expose BorrowedPayload

Co-authored-by: Jorge Aparicio <jorge.aparicio@ferrous-systems.com>
This commit is contained in:
Christian Poveda 2023-12-07 12:23:19 -05:00 committed by Daniel McCarney
parent ef41a6dbd6
commit e6dede5f5f
2 changed files with 28 additions and 0 deletions

View File

@ -5,6 +5,7 @@ use std::error::Error as StdError;
use crate::enums::{ContentType, ProtocolVersion};
use crate::error::Error;
pub use crate::msgs::base::BorrowedPayload;
use crate::msgs::codec;
pub use crate::msgs::message::{BorrowedPlainMessage, OpaqueMessage, PlainMessage};
use crate::suites::ConnectionTrafficSecrets;

View File

@ -4,10 +4,13 @@ use crate::msgs::codec::{Codec, Reader};
use alloc::vec::Vec;
use core::fmt;
use core::ops::{Deref, DerefMut};
use pki_types::CertificateDer;
use zeroize::Zeroize;
use super::codec::ReaderMut;
/// An externally length'd payload
#[derive(Clone, Eq, PartialEq)]
pub struct Payload(pub Vec<u8>);
@ -36,6 +39,30 @@ impl Payload {
}
}
/// Non-owning version of [`Payload`]
pub struct BorrowedPayload<'a>(&'a mut [u8]);
impl Deref for BorrowedPayload<'_> {
type Target = [u8];
fn deref(&self) -> &Self::Target {
self.0
}
}
impl<'a> DerefMut for BorrowedPayload<'a> {
fn deref_mut(&mut self) -> &mut Self::Target {
self.0
}
}
impl<'a> BorrowedPayload<'a> {
#[allow(dead_code)] // TODO(@cpu): remove in "introduce and expose BorrowedOpaqueMessage"
pub(crate) fn read(r: &mut ReaderMut<'a>) -> Self {
Self(r.rest())
}
}
impl<'a> Codec for CertificateDer<'a> {
fn encode(&self, bytes: &mut Vec<u8>) {
codec::u24(self.as_ref().len() as u32).encode(bytes);