zerodds_security_rtps/lib.rs
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 ZeroDDS Contributors
3
4//! Crate `zerodds-security-rtps`. Safety classification: **SAFE** (reiner Wire-Format-Adapter; die eigentliche Crypto delegiert an ein [`CryptographicPlugin`]).
5//!
6//! Secure-Submessage-Wrapper (OMG DDS-Security 1.1 §7.3.6) +
7//! RTPS-Header-AAD-Codec (§9.5).
8//!
9//! ## Schichten-Position
10//!
11//! Layer 4 — Core Services. Konsumiert `zerodds-security` (SPI) +
12//! `zerodds-rtps` (RTPS-Submessage-Layout). Wird vom DCPS-Runtime via
13//! `Box<dyn CryptographicPlugin>` und dem Inbound/Outbound-Datapath
14//! genutzt.
15//!
16//! ## Public API (Stand 1.0.0-rc.1)
17//!
18//! Nimmt eine oder mehrere plain-RTPS-Submessages (als opaque Bytes)
19//! und wrapped sie in:
20//!
21//! ```text
22//! SEC_PREFIX | SEC_BODY (ciphertext) | SEC_POSTFIX
23//! ```
24//!
25//! Auf Empfaenger-Seite macht `decode_secured_submessage` den Schritt
26//! rueckwaerts: SEC_BODY extrahieren, durch den Crypto-Plugin schicken,
27//! plaintext zurueckgeben.
28//!
29//! - Submessage-IDs + -Flags gemaess Spec §7.3.6.
30//! - `encode_secured_submessage` + `decode_secured_submessage` mit
31//! `&mut dyn CryptographicPlugin`-Callback — damit AES-GCM, HMAC,
32//! oder zukuenftige Backends austauschbar sind.
33//! - SRTPS-Wrap (§9.5 RTPS-Message-Protection): `SRTPS_PREFIX` + `SRTPS_POSTFIX`-Codec.
34//! - Receiver-Specific-MAC-Liste im POSTFIX (`MAX_RECEIVER_MACS`): pro
35//! Remote-Reader ein 16-byte MAC; Single-Receiver-Pfade lassen die
36//! Liste leer (Spec §7.3.6.3 erlaubt das).
37//! - Little-Endian-Submessage-Header (`0x01` flag).
38//!
39//! ## Nicht-Ziele
40//!
41//! - Big-Endian-Submessage-Header — Spec erlaubt beide; alle Vendoren
42//! nutzen LE per Default. Re-Add additiv bei Major-2.0.
43
44#![cfg_attr(not(feature = "std"), no_std)]
45#![forbid(unsafe_code)]
46#![warn(missing_docs)]
47
48extern crate alloc;
49
50mod codec;
51pub mod header_aad;
52mod srtps;
53
54pub use codec::{
55 MAX_RECEIVER_MACS, SEC_BODY, SEC_POSTFIX, SEC_PREFIX, SRTPS_POSTFIX, SRTPS_PREFIX,
56 SecurityRtpsError, decode_secured_submessage, decode_secured_submessage_multi,
57 encode_secured_submessage, encode_secured_submessage_multi,
58};
59pub use header_aad::{build_rtps_header_aad, build_submessage_aad};
60pub use srtps::{
61 PRE_SHARED_KEY_FLAG, RTPS_HEADER_LEN, decode_secured_rtps_message, encode_secured_rtps_message,
62 encode_secured_rtps_message_psk, srtps_psk_flag,
63};