Skip to main content

Crate zerodds_security_pki

Crate zerodds_security_pki 

Source
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)

  • PkiAuthenticationPluginAuthenticationPlugin-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 — DelegationLink Sign/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::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;
pub use psk::derive_psk_shared_secret;

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 — HandshakeMessageToken Codec.
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§

BinaryProperty
Spec §7.2.6 Tab.6 — Wire-BinaryProperty_t (name + value als sequence<octet>).
DataHolder
Spec §7.2.7 Tab.7 — generische DataHolder_t Wire-Struktur. Alle Security-Tokens sind Type-Aliases von DataHolder mit fixem class_id-Wert.
HandshakeHandle
Opaker Handle fuer einen laufenden Handshake.
IdentityConfig
Ein-Input fuer crate::PkiAuthenticationPlugin::validate_with_config: Identity-Zertifikat + zugehoerige CA (beide PEM).
IdentityHandle
Opaker Handle fuer eine validierte Identity. Der Plugin-Interne Zustand (X.509-Cert, Keys) wird nicht ueber diesen Handle nach aussen exponiert.
PkiAuthenticationPlugin
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.
SharedSecretHandle
Opaker Handle fuer ein geteiltes Geheimnis (Ausgabe eines abgeschlossenen Handshakes). Wird an CryptographicPlugin weitergereicht.
WireProperty
Spec §7.2.6 Tab.5 — Wire-Property_t (name + value, beide CDR-Strings). Im Gegensatz zu crate::Property kein propagate- Feld; Token-Properties werden grundsaetzlich propagiert.

Enums§

CertKeyAlgo
Detektierter Algorithmus aus dem Identity-Cert. Entscheidet, welche c.dsign_algo-Werte und Sign-Routinen genutzt werden.
HandshakeStepOutcome
Ergebnis eines Handshake-Steps.
OcspStatus
Cert-Status aus einer OCSP-Response.
PkiError
Interne Fehler des PKI-Backends. Werden in zerodds_security::SecurityError gehuellt.

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 Response Good ist. Jeder andere Status → Err mit SecurityErrorKind::AuthenticationFailed.