Expand description
Crate zerodds-security-pki. Safety classification: SAFE (reiner Wrapper um rustls-webpki; kein Raw-Crypto-Code in dieser Crate).
PKI/X.509-Backend fuer das DDS-Security 1.1 §8.3
AuthenticationPlugin-SPI: Identity-Validation, Handshake-Token-
Sign/Verify, OCSP-Stapling-Liveness, CRL-Validation, Delegation-Chains.
§Schichten-Position
Layer 4 — Core Services. Konsumiert zerodds-security (SPI).
§Public API (Stand 1.0.0-rc.1)
PkiAuthenticationPlugin—AuthenticationPlugin-Impl (X.509 + RSA-PSS + ECDSA-P256/P384 + Ed25519).IdentityConfig/IdentityHandle— Identity-Loading.- [
HandshakeToken] / [HandshakeError] — Handshake-State-Machine (Challenge/Response). - [
AuthRequestMessage] —auth_request-Token-Codec (Spec §9.3.2.4). IdentityStatusToken— Identity-Status-Subscription (Spec §8.3.2.13).ocsp-Modul — OCSP-Stapling-Validation (RFC 6960).crl-Modul — CRL-Online-Checks + Cache.delegation-Modul —DelegationLinkSign/Verify +DelegationChain.PskAuthenticationPlugin— PSK-Variante (Spec §10.7).
§Architektur-Gedanke
Alle echten Crypto-Checks delegieren an rustls-webpki (der gleiche
Code, der rustls fuer TLS nutzt). Wir adaptieren nur die Eingabe
(PEM → DER) und die Ausgabe (OK/Err) auf den AuthenticationPlugin-
Trait. Damit vermeiden wir eigene Crypto-Implementation und profitieren
von rustls’ Audit-Historie.
§Beispiel (Pseudo — echte PEMs fehlen im Doctest)
ⓘ
use zerodds_security::AuthenticationPlugin;
use zerodds_security_pki::{PkiAuthenticationPlugin, IdentityConfig};
let mut plugin = PkiAuthenticationPlugin::new();
let cfg = IdentityConfig {
identity_cert_pem: ALICE_CERT_PEM.into(),
identity_ca_pem: CA_PEM.into(),
};
let local = plugin.validate_with_config(cfg, [0xAA; 16])?;Re-exports§
pub use auth_request::AUTH_REQUEST_CLASS_ID;pub use auth_request::AuthRequestToken;pub use auth_request::FUTURE_CHALLENGE_KEY;pub use auth_request::auth_request_properties;pub use crl::CrlParseError;pub use crl::parse_crl_serials;pub use crl::validate_crl;pub use delegation::DELEGATION_MAGIC;pub use delegation::DELEGATION_VERSION;pub use delegation::DelegationChain;pub use delegation::DelegationError;pub use delegation::DelegationLink;pub use delegation::DelegationResult;pub use delegation::MAX_CHAIN_DEPTH_HARD_CAP;pub use delegation::MAX_PARTITION_PATTERNS;pub use delegation::MAX_PATTERN_LEN;pub use delegation::MAX_TOPIC_PATTERNS;pub use delegation::SignatureAlgorithm;pub use handshake_token::FinalBuildInput;pub use handshake_token::FinalTokenView;pub use handshake_token::ReplyBuildInput;pub use handshake_token::ReplyTokenView;pub use handshake_token::RequestBuildInput;pub use handshake_token::RequestTokenView;pub use handshake_token::algo;pub use handshake_token::build_final_token;pub use handshake_token::build_reply_token;pub use handshake_token::build_request_token;pub use handshake_token::class_id;pub use handshake_token::compute_hash_c;pub use handshake_token::parse_final_token;pub use handshake_token::parse_reply_token;pub use handshake_token::parse_request_token;pub use handshake_token::prop;pub use handshake_token::signing_bytes;pub use identity_status::IDENTITY_STATUS_CLASS_ID;pub use identity_status::IdentityStatusKind;pub use identity_status::IdentityStatusToken;pub use identity_status::KEY_EXPIRY_TIME;pub use identity_status::KEY_OCSP_RESPONSE;pub use identity_status::KEY_OCSP_STATUS;pub use identity_status::identity_status_properties;pub use identity_token::IDENTITY_TOKEN_CLASS_ID;pub use identity_token::IdentityToken;pub use identity_token::KEY_CA_ALGO;pub use identity_token::KEY_CA_SN;pub use identity_token::KEY_CERT_ALGO;pub use identity_token::KEY_CERT_SN;pub use identity_token::build_identity_token_from_pem;pub use identity_token::subject_match;pub use psk::HKDF_INFO_SHARED_SECRET;pub use psk::PROP_PSK_ID;pub use psk::PROP_PSK_KEY_HEX;pub use psk::PskAuthenticationPlugin;
Modules§
- auth_
request AuthRequestMessageToken— DDS-Security 1.2 §9.3.2.5.1.1.- crl
- CRL-Validation (Certificate-Revocation-List, RFC 5280 §5).
- delegation
- Delegation-Link / Delegation-Chain.
- handshake_
token - DDS-Security 1.2 §10.3.2.6-8 —
HandshakeMessageTokenCodec. - identity_
status IdentityStatusToken— DDS-Security 1.2 §9.3.2.5.1.2.- identity_
token IdentityToken(PKI-DH) — DDS-Security 1.2 §10.3.2.1.- psk
- Builtin Pre-Shared-Key Authentication-Plugin (Spec §10.7).
Structs§
- Binary
Property - Spec §7.2.6 Tab.6 — Wire-
BinaryProperty_t(name+valuealssequence<octet>). - Data
Holder - Spec §7.2.7 Tab.7 — generische
DataHolder_tWire-Struktur. Alle Security-Tokens sind Type-Aliases vonDataHoldermit fixemclass_id-Wert. - Handshake
Handle - Opaker Handle fuer einen laufenden Handshake.
- Identity
Config - Ein-Input fuer
crate::PkiAuthenticationPlugin::validate_with_config: Identity-Zertifikat + zugehoerige CA (beide PEM). - Identity
Handle - Opaker Handle fuer eine validierte Identity. Der Plugin-Interne Zustand (X.509-Cert, Keys) wird nicht ueber diesen Handle nach aussen exponiert.
- PkiAuthentication
Plugin - PKI/X.509-basierter
AuthenticationPlugin. Verifiziert Identity- Certs gegen einen vorgegebenen Trust-Anchor und fuehrt einen 3-Round PKI-DH-Handshake (Spec §10.3.2.6-8 Tab.56/57/58) zum Peer. - Shared
Secret Handle - Opaker Handle fuer ein geteiltes Geheimnis (Ausgabe eines
abgeschlossenen Handshakes). Wird an
CryptographicPluginweitergereicht. - Wire
Property - Spec §7.2.6 Tab.5 — Wire-
Property_t(name+value, beide CDR-Strings). Im Gegensatz zucrate::Propertykeinpropagate- Feld; Token-Properties werden grundsaetzlich propagiert.
Enums§
- Cert
KeyAlgo - Detektierter Algorithmus aus dem Identity-Cert. Entscheidet, welche
c.dsign_algo-Werte und Sign-Routinen genutzt werden. - Handshake
Step Outcome - Ergebnis eines Handshake-Steps.
- Ocsp
Status - Cert-Status aus einer OCSP-Response.
- PkiError
- Interne Fehler des PKI-Backends. Werden in
zerodds_security::SecurityErrorgehuellt.
Functions§
- parse_
ocsp_ status - Scannt eine DER-OCSP-Response und liefert den Cert-Status fuer den
(einzigen) enthaltenen
SingleResponse. - require_
good_ status - Hoher Level: liefert
Ok(())nur wenn die ResponseGoodist. Jeder andere Status →ErrmitSecurityErrorKind::AuthenticationFailed.