security-rs
Safe Rust bindings for Apple's Security framework on macOS.
Status: v0.2.0 adopts a Swift bridge for the safe API and expands coverage across keychain, identities, certificates, policies, trust, authorization, code signing, random bytes, transforms, SecureTransport, CMS, key derivation, and key agreement.
Highlights
- Swift bridge over
Security.frameworkwith retained opaque handles and ergonomic Rust wrappers. - Raw C FFI preserved behind the
raw-ffiCargo feature. - Safe modules for all primary logical areas:
keychainidentitycertificatepolicytrustauthorizationcoderandom_bytestransformsecure_transportcmskey_derivationkey_agreement
- Headless examples and smoke tests for every area.
Quick start
use *;
Area overview
Keychain: generic-password CRUD and service account listing.Identity: PKCS#12 import, certificate access, and private-key attribute inspection.Certificate: DER/PEM loading, summaries, names, emails, serials, validity dates, and public keys.Policy/Trust: basic X.509, SSL, revocation, custom anchors, and evaluated trust results.Authorization: authorization creation and external-form round trips.Code: current-process code objects, static-code inspection, designated requirements, and task entitlements.RandomBytes:SecRandomCopyByteswrappers.Transform: base64 encode/decode using deprecated but still functionalSecTransformAPIs.SecureTransport: minimal context creation, protocol bounds, and state inspection.CMS: certificate-bag encode/decode.KeyDerivation: PBKDF2-style symmetric-key derivation throughSecKeyDeriveFromPassword.KeyAgreement: ephemeral P-256 key generation and ECDH shared-secret derivation.
Examples
Run every numbered example:
for; do ; done
Key examples:
01_keychain_password05_trust_evaluate07_code_signing_info11_cms_cert_bag13_key_agreement_shared_secret
Raw FFI
Enable the legacy raw C declarations when you need direct Security.framework symbols:
The default API path stays on the Swift bridge so Rust code does not call the C-only framework surface directly.
Coverage notes
See COVERAGE.md for the header audit and per-area implementation / partial / skipped status.
License
Licensed under either of Apache-2.0 or MIT at your option.