mod encrypted_frame;
mod frame_buffer;
mod frame_counter;
mod media_frame;
mod validation;
pub use encrypted_frame::{EncryptedFrame, EncryptedFrameView};
pub use frame_buffer::{FrameBuffer, Truncate};
pub use frame_counter::*;
pub use media_frame::{MediaFrame, MediaFrameView};
pub use validation::*;
#[cfg(all(test, crypto_backend))]
mod test {
use super::media_frame::MediaFrameView;
use crate::{
CipherSuite,
frame::{MonotonicCounter, encrypted_frame::EncryptedFrameView, media_frame::MediaFrame},
key::{DecryptionKey, EncryptionKey},
util::test::assert_bytes_eq,
};
use pretty_assertions::assert_eq;
const PAYLOAD: &[u8] = b"TIME TO PAY";
const META_DATA: &[u8] = b"META";
const KEY_ID: u64 = 666u64;
fn expand_keys() -> (EncryptionKey, DecryptionKey) {
(
EncryptionKey::derive_from(CipherSuite::AesGcm256Sha512, KEY_ID, "SECRET").unwrap(),
DecryptionKey::derive_from(CipherSuite::AesGcm256Sha512, KEY_ID, "SECRET").unwrap(),
)
}
#[test]
fn encrypt_decrypt_frame_view() {
let (enc_key, dec_key) = expand_keys();
let mut encrypt_buffer = Vec::new();
let mut decrypt_buffer = Vec::new();
let mut counter = MonotonicCounter::default();
let media_frame = MediaFrameView::new(&mut counter, PAYLOAD);
media_frame
.encrypt_into(&enc_key, &mut encrypt_buffer)
.unwrap();
let encrypted_frame = EncryptedFrameView::try_new(&encrypt_buffer).unwrap();
let decrypted_media_frame = encrypted_frame
.decrypt_into(&dec_key, &mut decrypt_buffer)
.unwrap();
assert_eq!(decrypted_media_frame, media_frame);
}
#[test]
fn encrypt_decrypt_frame_view_with_meta_data() {
let (enc_key, dec_key) = expand_keys();
let mut encrypt_buffer = Vec::new();
let mut decrypt_buffer = Vec::new();
let mut counter = MonotonicCounter::default();
let media_frame = MediaFrameView::with_meta_data(&mut counter, PAYLOAD, META_DATA);
media_frame
.encrypt_into(&enc_key, &mut encrypt_buffer)
.unwrap();
let (meta_data, encrypted) = encrypt_buffer.split_at(META_DATA.len());
assert_bytes_eq(meta_data, META_DATA);
let encrypted_frame = EncryptedFrameView::try_with_meta_data(encrypted, META_DATA).unwrap();
let decrypted_media_frame = encrypted_frame
.decrypt_into(&dec_key, &mut decrypt_buffer)
.unwrap();
assert_eq!(decrypted_media_frame, media_frame);
}
#[test]
fn encrypt_decrypt_frame_with_meta_data() {
let (enc_key, dec_key) = expand_keys();
let mut counter = MonotonicCounter::default();
let media_frame = MediaFrame::with_meta_data(&mut counter, PAYLOAD, META_DATA);
let encrypted = media_frame.encrypt(&enc_key).unwrap();
assert_bytes_eq(encrypted.meta_data(), META_DATA);
let decrypted_media_frame = encrypted.decrypt(&dec_key).unwrap();
assert_eq!(decrypted_media_frame, media_frame);
}
}