Files
netrunner-proxy/core/src/crypto/aead.rs
T
2026-06-30 18:51:09 +07:00

25 lines
1.9 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! Абстракция AEAD-шифрования над конкретным алгоритмом.
//!
//! Кодек ([`nrxp`](crate::nrxp)) работает не с ChaCha20-Poly1305 напрямую, а через
//! трейт [`AeadPacker`]. Это развязывает горячий путь от выбора шифра: сегодня за
//! трейтом стоит [`ChaChaStream`](super::chacha::ChaChaStream), завтра можно
//! подставить другой AEAD без правок кодека, а в тестах — фейковую реализацию.
use bytes::BytesMut;
/// Шифрование «на месте» (in-place) для одного направления потока.
///
/// Обе операции мутируют переданный [`BytesMut`] прямо в его буфере — никаких
/// промежуточных аллокаций и копий (zero-copy на горячем пути):
/// - [`encrypt`](AeadPacker::encrypt) дописывает 16-байтовый тег аутентификации в
/// конец буфера (вызывающий код заранее резервирует под него место);
/// - [`decrypt`](AeadPacker::decrypt) проверяет тег и усекает буфер до открытого
/// текста; при провале проверки возвращает ошибку и данные считаются
/// скомпрометированными (tampering).
pub(crate) trait AeadPacker {
/// Шифрует `data` на месте и дописывает тег аутентификации.
fn encrypt(&mut self, data: &mut BytesMut) -> Result<(), chacha20poly1305::aead::Error>;
/// Расшифровывает `data` на месте и проверяет тег; `Err` ⇒ tampering.
fn decrypt(&mut self, data: &mut BytesMut) -> Result<(), chacha20poly1305::aead::Error>;
}