DEENESPTFRRUARHIKOZHNL

module ara::crypto — Cryptography

Spezifikation: AUTOSAR_AP_SWS_Cryptography.pdf (R25-11) · 387 API-Records

Module guideAI-GENERATED

Provides isolated cryptographic operations, key management, and X.509 certificate services for applications.
AI-GENERATED unreviewed Model: gemini-3.8-flash-medium · Effort: medium · Temperature: not controllable · Prompt: b84ff51de547 Provenance Open questions (1)
Causal anchor: R25-11 Valid from R25-11 Synthesized for this specification release.
translated from the German guidegemini-3.8-flash-low · 2026-10-13 · German original

Provides isolated cryptographic operations, key management, and X.509 certificate services for applications.

The functional cluster Cryptography provides standardized security services for symmetric and asymmetric encryption, signature verification, and secure key and certificate management (PlatformDesign p. 71). Access to cryptographic operations and persistent key slots is strictly isolated via platform-specific providers and instance specifiers defined declaratively in the manifest (SWS Cryptography p. 39). In doing so, enforcing usage restrictions prevents compromise of the sensitive key material ([SWS_CRYPT_50092]).

The functional cluster Cryptography (ara::crypto) provides a comprehensive security architecture for the AUTOSAR Adaptive Platform (PlatformDesign p. 71). To safeguard against compromised user applications, key storage and cryptographic execution are typically encapsulated in an isolated platform daemon or Hardware Security Module (HSM) (AUTOSAR AP EXP SWArchitecture p. 97, SWS Cryptography p. 87). The overall functionality is divided into specialized CryptoProvider for computation primitives, the key storage area for persistent key slots (KeySlots), and a machine-wide X509Provider for PKI certificate management (SWS Cryptography p. 39).

diag_crypto_arch App Adaptive Application Daemon Cryptography Daemon (ara::crypto) App->Daemon IPC / C++ API CryptoProvider CryptoProvider (HSM / Driver / Software) Daemon->CryptoProvider Primitive Execution KeyStorage Key Storage Provider (KeySlots) Daemon->KeyStorage Key Lifecycle X509Prov X.509 Provider (Certificates / CRL) Daemon->X509Prov PKI Services KeyStorage->CryptoProvider Key Deployment

Context diagram: Architecture and component relationships of the functional cluster Cryptography between application, daemon, and providers. Sources: SWS Cryptography p. 39, PlatformDesign p. 71, AUTOSAR AP EXP SWArchitecture p. 97.

Applications create cryptographic contexts such as symmetric ciphers ([SWS_CRYPT_20742]), authenticated ciphers ([SWS_CRYPT_20745]), hash functions ([SWS_CRYPT_20747]), or signer and verifier instances ([SWS_CRYPT_20756], [SWS_CRYPT_20757]) via their provider (AUTOSAR AP EXP SWArchitecture p. 99). Processing follows a deterministic lifecycle: following key binding (SetKey), the transformation is initiated via Start(), streamed via Update(), and completed with Finish() (AUTOSAR AP TR SystemTests p. 206, EXP SWArchitecture p. 104). Immutable AllowedUsageFlags effectively prevent unauthorized key usage ([SWS_CRYPT_50092], AUTOSAR AP TR SystemTests p. 177).

diag_context_state Uninit Uninitialized Ready Ready (Key Deployed) Uninit->Ready SetKey() Ready->Uninit Reset() Streaming Processing (Started / Update) Ready->Streaming Start() Streaming->Uninit Cancel() / Reset() Streaming->Streaming Update() / UpdateConfidentialData() Finished Finished / Digest Available Streaming->Finished Finish() / FinishEncrypt() Finished->Uninit Reset() Finished->Ready Start() (Re-use)

State diagram: Lifecycle of cryptographic transformation contexts from allocation to reset. Sources: [SWS_CRYPT_20742], [SWS_CRYPT_23911], [SWS_CRYPT_23625], [SWS_CRYPT_50046], [SWS_CRYPT_50212].

Certificates and CSRs are managed via the X509Provider ([SWS_CRYPT_40099], [SWS_CRYPT_40640]), while validation contexts verify certificate chains taking into account CRL revocation lists ([SWS_CRYPT_50183]) and OCSP responses ([SWS_CRYPT_50124]) (AUTOSAR AP TR SystemTests p. 194). The assignment of KeySlots and certificates to applications is performed model-based in the manifest via InstanceSpecifier (AUTOSAR AP TPS ManifestSpecification p. 245, AUTOSAR AP TPS ManifestSpecification p. 649). All interfaces operate with exceptionless ara::core::Result returns and signal errors via the CryptoErrorDomain ([SWS_CRYPT_19902], SWS Cryptography p. 208).

Architecture, Security Domains, and Daemon Isolation

The functional cluster Cryptography (ara::crypto) forms the central security foundation of the AUTOSAR Adaptive Platform and provides cryptographic base mechanisms, key management, and certificate services (PlatformDesign p. 71). According to the trust model of the platform, functional platform clusters belong to the trusted foundation, whereas Adaptive Applications are executed in unprivileged user space (SWS Cryptography p. 37). In order to effectively protect key material and cryptographic operations even in the event of a potential compromise of an application, the architecture is typically daemon-based; the actual execution and key storage remain in an isolated platform process or in a secure execution environment (AUTOSAR AP EXP SWArchitecture p. 97, SWS Cryptography p. 87).

The architecture divides the cryptographic functionality into three primary domains: the CryptoProvider for computation primitives and key transformations, the key storage area (ara::crypto::keys) for persistent object storage, and the X509Provider (ara::crypto::x509) for certificate management (SWS Cryptography p. 39, SWS Cryptography p. 87). On an ECU, multiple specialized instances of CryptoProvider can exist concurrently, for example to connect different Hardware Security Modules (HSM, TPM) or software-based drivers (SWS Cryptography p. 39). However, there is deliberately no interoperability between different providers: a cryptographic object or key belongs strictly to one provider and cannot be processed by another provider (SWS Cryptography p. 39). This strict encapsulation is likely primarily attributable to hardware security domains physically enforcing their key boundaries and key handles not being valid across domains. Question Q-63efe107cf111983 (open)

diag_crypto_arch App Adaptive Application Daemon Cryptography Daemon (ara::crypto) App->Daemon IPC / C++ API CryptoProvider CryptoProvider (HSM / Driver / Software) Daemon->CryptoProvider Primitive Execution KeyStorage Key Storage Provider (KeySlots) Daemon->KeyStorage Key Lifecycle X509Prov X.509 Provider (Certificates / CRL) Daemon->X509Prov PKI Services KeyStorage->CryptoProvider Key Deployment

Context diagram: Architecture and component relationships of the functional cluster Cryptography between application, daemon, and providers. Sources: SWS Cryptography p. 39, PlatformDesign p. 71, AUTOSAR AP EXP SWArchitecture p. 97.

Entry Points and Initialization of Cryptographic Providers

Entry into the module occurs via global entry-point functions that serve as factories for the central abstraction interfaces (SWArchitecture p. 71). Applications create or load an instance of a CryptoProvider via the function [SWS_CRYPT_20099], specifying a modeled ara::core::InstanceSpecifier. For certificate management, exactly one global certificate provider exists in the overall system, which is loaded via [SWS_CRYPT_40099] (SWS Cryptography p. 39). In addition, global helper services are available, including direct generation of random data via [SWS_CRYPT_30098] and querying a hardware-backed security counter via [SWS_CRYPT_20098] (SWArchitecture p. 71).

Persistent key resources are not instantiated directly, but are loaded via logical key slots (KeySlots). For this purpose, the runtime environment provides the functions [SWS_CRYPT_50004] for read-only access and [SWS_CRYPT_50005] for writable key slots, which validate the passed instance identifier against the permission configuration (SWS Cryptography p. 87, AUTOSAR AP TPS ManifestSpecification p. 649). Via an obtained KeySlot instance, the assigned provider instance can be queried using [SWS_CRYPT_30403], thereby ensuring the tight binding between storage location and execution environment is maintained (SWS Cryptography p. 39).

As soon as a CryptoProvider instance is available, it functions as a central factory for instantiating specific cryptographic working contexts (AUTOSAR AP EXP SWArchitecture p. 99). The contexts that can be created include, among others, contexts for random number generators ([SWS_CRYPT_20741]), symmetric block and stream ciphers ([SWS_CRYPT_20742]), authenticated encryption ([SWS_CRYPT_20745]), message authentication codes ([SWS_CRYPT_20746]), cryptographic hash functions ([SWS_CRYPT_20747]), asymmetric encryption and decryption ([SWS_CRYPT_20750], [SWS_CRYPT_20751]), as well as signature and verification contexts ([SWS_CRYPT_20756], [SWS_CRYPT_20757]) (EXP SWArchitecture p. 99).

Cryptographic Transformation Contexts and Data Processing

The processing of cryptographic data in ara::crypto follows a strictly state-based lifecycle that ensures the decoupling of algorithm configuration, key binding, and streaming processing (AUTOSAR AP TR SystemTests p. 211). After allocation of the context via the provider, it is initially in the uninitialized state. Only by passing a compatible key via the type-specific overloads of SetKey()—such as for symmetric keys ([SWS_CRYPT_23911]), private keys ([SWS_CRYPT_23515]), or directly from a KeySlot ([SWS_CRYPT_50043])—does the context transition into the ready state (AUTOSAR AP TR SystemTests p. 206).

For streaming operations, the transformation is initiated by Start(), optionally passing an initialization vector or context ([SWS_CRYPT_22110], [SWS_CRYPT_23625], [SWS_CRYPT_50020]). Subsequently, data blocks can be fed in incrementally via Update() ([SWS_CRYPT_21113], [SWS_CRYPT_22113], [SWS_CRYPT_50139]). For authenticated encryption (AEAD), the interface strictly separates associated data, which is processed via [SWS_CRYPT_20313], from confidential payload data via [SWS_CRYPT_50074] (EXP SWArchitecture p. 104). A transformation is concluded via Finish() or FinishEncrypt() ([SWS_CRYPT_21115], [SWS_CRYPT_23618], [SWS_CRYPT_50075]), whereupon authentication tags or checksums can be retrieved via GetDigest() ([SWS_CRYPT_21116], [SWS_CRYPT_22116]).

In addition to the streaming mode, context classes such as symmetric ciphers and authenticated ciphers support compact one-shot invocations via [SWS_CRYPT_50047] or [SWS_CRYPT_50078], allowing short payloads to be efficiently encrypted or decrypted without a multi-stage protocol call (SWS Cryptography p. 58). If an ongoing operation is to be aborted, a call to Cancel() ([SWS_CRYPT_50023], [SWS_CRYPT_50046]) or Reset() ([SWS_CRYPT_50212]) deterministically transitions the context back into the cleared initial state (EXP SWArchitecture p. 100).

diag_context_state Uninit Uninitialized Ready Ready (Key Deployed) Uninit->Ready SetKey() Ready->Uninit Reset() Streaming Processing (Started / Update) Ready->Streaming Start() Streaming->Uninit Cancel() / Reset() Streaming->Streaming Update() / UpdateConfidentialData() Finished Finished / Digest Available Streaming->Finished Finish() / FinishEncrypt() Finished->Uninit Reset() Finished->Ready Start() (Re-use)

State diagram: Lifecycle of cryptographic transformation contexts from allocation to reset. Sources: [SWS_CRYPT_20742], [SWS_CRYPT_23911], [SWS_CRYPT_23625], [SWS_CRYPT_50046], [SWS_CRYPT_50212].

Key Management, Encapsulation, and Permission Enforcement

Cryptographic keys are typed in the object model as CryptoObject or RestrictedUseObject (AUTOSAR AP EXP SWArchitecture p. 111, EXP SWArchitecture p. 111). The platform standard distinguishes between symmetric keys (SymmetricKey), private asymmetric keys (PrivateKey), and public keys (PublicKey) (SWS Cryptography p. 291). Key material can be generated directly via the CryptoProvider ([SWS_CRYPT_20721], [SWS_CRYPT_20722]) or derived from existing key material by parameterizing a KeyDerivationFunctionCtx ([SWS_CRYPT_20748]) with a base key and executing it via [SWS_CRYPT_21515] (EXP SWArchitecture p. 108).

To enforce the principle of least privilege, each key object carries immutable usage restrictions (AllowedUsageFlags) that can be queried via [SWS_CRYPT_50092] (AUTOSAR AP TR SystemTests p. 177). On every binding attempt (SetKey), the crypto stack validates whether the operation of the target context (e.g., encrypting, signing, deriving, or exporting) is authorized by the flags of the key, and strictly rejects unauthorized uses (AUTOSAR AP TR SystemTests p. 177, SWArchitecture p. 95). The default setting for an algorithm can be determined via [SWS_CRYPT_20955].

For secure key exchange, the module implements several standardized methods: In asymmetric key agreement (Diffie-Hellman / ECDH), a KeyAgreementPrivateCtx is created via [SWS_CRYPT_20758], to which the private key is bound ([SWS_CRYPT_21313]); the method [SWS_CRYPT_21312] then computes the shared symmetric target key, incorporating the public key of the counterparty (AUTOSAR AP TR SystemTests p. 179). In the Key Encapsulation Mechanism (KEM), an KeyEncapsulatorPublicCtx ([SWS_CRYPT_20752]) encapsulates a symmetric key using [SWS_CRYPT_21813], while the counterparty performs the decapsulation via an KeyDecapsulatorPrivateCtx ([SWS_CRYPT_20753]) via [SWS_CRYPT_21412] (AUTOSAR AP TR SystemTests p. 173, AUTOSAR TR AdaptivePlatformSystemTests p. 188). For protected key transport, key wrapping ([SWS_CRYPT_24014], [SWS_CRYPT_24016]) and secured export ([SWS_CRYPT_20728]) are available (AUTOSAR AP TR SystemTests p. 174, AUTOSAR AP TR SystemTests p. 182).

Asymmetric key agreement (ECDH) and symmetric derivationApp (CRYPTOApp01)CryptoProviderKeyAgreementPrivateCtxSymmetricKeyCreateKeyAgreementPrivateCtx(algId)Result<KeyAgreementPrivateCtx::Sptr>SetKey(privKey)Result<void>AgreeKey(otherSidePublicKey, targetAlgId, allowedUsage)Create symmetric key objectResult<SymmetricKey::Sptr>

Sequence diagram: Asymmetric key agreement via Diffie-Hellman and derivation of symmetric payload keys. Sources: [SWS_CRYPT_20758], [SWS_CRYPT_21313], [SWS_CRYPT_21312], AUTOSAR AP TR SystemTests p. 179.

Asymmetric signatures are handled via separate contexts: Signing is performed via a SignerPrivateCtx ([SWS_CRYPT_20756]) and the [SWS_CRYPT_23512] method, while verification is carried out via a VerifierPublicCtx ([SWS_CRYPT_20757]) and the [SWS_CRYPT_24112] method (AUTOSAR AP TR SystemTests p. 164, SWArchitecture p. 84). If a KeySlot is updated in the background by privileged management services (e.g., OTA key rollover), consuming libraries can be notified via an update observer using [SWS_CRYPT_30404] in order to reload their key material synchronously (AUTOSAR AP SWS Cryptography p. 36).

Signature generation and verification via SignerPrivateCtx and VerifierPublicCtxApplikationCryptoProviderSignerPrivateCtxVerifierPublicCtxCreateSignerPrivateCtx(algId)Result<SignerPrivateCtx::Sptr>SetKey(privKey)Result<void>Sign(message, signatureBuffer, format)Result<std::size_t> (signature size)Use Case: Verification of signatureCreateVerifierPublicCtx(algId)Result<VerifierPublicCtx::Sptr>SetKey(pubKey)Result<void>Verify(message, signature, format)Result<bool> (valid / invalid)

Sequence diagram: Sequence of signature generation and verification utilizing separate private and public contexts. Sources: [SWS_CRYPT_20756], [SWS_CRYPT_23515], [SWS_CRYPT_23512], [SWS_CRYPT_20757], [SWS_CRYPT_24115], [SWS_CRYPT_24112], AUTOSAR AP TR SystemTests p. 164.

X.509 Certificate Management, Validation, and Groups

The subsystem ara::crypto::x509 provides standardized functions for Public Key Infrastructures (PKI) (EXP SWArchitecture p. 116). The central X509Provider ([SWS_CRYPT_40099]) supports both volatile session storage and persistent repositories (SWS Cryptography p. 39). Certificates and chains are parsed from byte buffers via [SWS_CRYPT_40614] and [SWS_CRYPT_40616], respectively. To request new identity certificates, applications can generate cryptographically signed Certificate Signing Requests (CSR) via [SWS_CRYPT_40640], where the signer context and the Distinguished Name (DN) are passed via [SWS_CRYPT_50186] (AUTOSAR AP TR SystemTests p. 189).

For conformance and validity verification, the application instantiates a CertificateValidationCtx via [SWS_CRYPT_50125]. Trust anchors are added to this context via [SWS_CRYPT_50117], validation options are defined via [SWS_CRYPT_50120], and reference timestamps are deposited via [SWS_CRYPT_50121]. Hierarchical chain validation against the trust chain is performed via [SWS_CRYPT_50122] or [SWS_CRYPT_50123] (AUTOSAR AP TR SystemTests p. 194). To capture certificate revocations, Certificate Revocation Lists (CRL) can be imported ([SWS_CRYPT_50183]) or online certificate status queries (OCSP according to RFC 6960) can be incorporated into the validation status via [SWS_CRYPT_40626], [SWS_CRYPT_50185], and [SWS_CRYPT_50124] (AUTOSAR AP TR SystemTests p. 194).

To decouple certificate consumers from individual certificate instances during key rollovers, the manifest supports the concept of CryptoCertificateGroup (AUTOSAR AP TPS ManifestSpecification p. 657). Consuming applications load the entire group of logically linked certificates via [SWS_CRYPT_50126], while privileged administration services can dynamically replace or clean up certificates via [SWS_CRYPT_50127] and [SWS_CRYPT_50128] (AUTOSAR AP TPS ManifestSpecification p. 657).

X.509 certificate validation with certificate chain, CRL, and OCSPApplikationX509ProviderValidationCtxCreateCertificateValidationCtx()Result<CertificateValidationCtx::Sptr>AddTrustedCertificate(rootCert)Result<void>ImportCrl(instanceSpecifier, crlBytes, format)Result<CertificateValidationStatus>AddOcspResponse(ocspResponse, issuerCert)Result<CertificateValidationStatus>ValidateCertificate(targetCert)Result<CertificateValidationResult::Sptrc>

Sequence diagram: X.509 certificate validation with certificate chain, CRL import, and online OCSP status verification. Sources: [SWS_CRYPT_40099], [SWS_CRYPT_50125], [SWS_CRYPT_50122], [SWS_CRYPT_50183], [SWS_CRYPT_50124], AUTOSAR AP TR SystemTests p. 194.

Manifest Modeling, Port Interfaces, and Deployment

The integration of cryptographic resources into an overall vehicle architecture takes place declaratively via the AUTOSAR metamodel in the ARXML manifest (AUTOSAR AP TPS ManifestSpecification p. 244). Software components model their security requirements at the design level via ports (RPortPrototype) that are typed by specializations of CryptoInterface: CryptoKeySlotInterface for key slots, CryptoCertificateInterface for certificate resources, and CryptoProviderInterface for access to execution providers (TPS ManifestSpecification p. 167, AUTOSAR AP TPS ManifestSpecification p. 245). The attributes of the interfaces immutably specify whether read or write permissions are granted (writeAccess) and which object types are permitted (TPS ManifestSpecification p. 168, TPS ManifestSpecification p. 438).

In the deployment manifest, the target configuration connects the abstract port prototypes with concrete physical platform resources (AUTOSAR AP TPS ManifestSpecification p. 649). The metamodel element CryptoKeySlotToPortPrototypeMapping maps the port of a process to a CryptoKeySlot declared in the CryptoModuleInstantiation of the machine (TPS ManifestSpecification p. 614, TPS ManifestSpecification p. 646). In an analogous manner, CryptoCertificateToPortPrototypeMapping assigns certificates (TPS ManifestSpecification p. 655). At runtime, the path of the port in the manifest represents the ara::core::InstanceSpecifier that the application code passes to loader functions such as [SWS_CRYPT_50004] (ManifestSpecification p. 154).

For platform interactions between functional clusters—such as between Communication Management (SecOC, IPsec, TLS) and the crypto stack—no classical port prototypes exist (TPS ManifestSpecification p. 861). Here, the InstanceSpecifier is instead formed by elements derived from FunctionalClusterInteractsWithFunctionalClusterMapping, for example ComKeyToCryptoKeySlotMapping or SecOcJobMapping (TPS ManifestSpecification p. 861, TPS ManifestSpecification p. 864, ManifestSpecification p. 411). Persistency protection (Persistency Deployment) and software cluster checksums also bind their keys and providers via these standardized manifest mappings (TPS ManifestSpecification p. 867, TPS ManifestSpecification p. 896).

Behavior in the event of an error

The error handling concept of the crypto module follows the strict requirements of the Adaptive Platform for fail-safe and exception-free code (noexcept) (SWS Cryptography p. 145). All synchronous operations return error situations via the generic result type ara::core::Result<T, ara::core::ErrorCode> (SWS Cryptography p. 208). The error codes are rooted in a dedicated error domain represented by [SWS_CRYPT_19902]; its name can be queried via [SWS_CRYPT_19950] and the textual error description via [SWS_CRYPT_19953]. For applications that explicitly use exception handling, the stack provides the exception type CryptoException ([SWS_CRYPT_19906]) and the helper function [SWS_CRYPT_19954].

Typical functional error codes include context violations such as CryptoErrc::kUninitializedContext if cryptographic operations are triggered before calling SetKey(), or CryptoErrc::kInvalidInputSize if the passed input data buffers do not match the required block raster (SWS Cryptography p. 208). During serialization and conversion operations, CryptoErrc::kUnknownIdentifier signals unsupported argument values and CryptoErrc::kIncompatibleArguments incompatible parameter combinations (SWS Cryptography p. 145). When accessing key resources, the stack prevents unauthorized access by returning kAccessViolation (SWS Cryptography p. 87). When parsing malformed custom X.509 certificate extensions, the parser aborts with CryptoErrc::kRuntimeFault (SWS Cryptography p. 280, SWS Cryptography p. 356).

To restore a defined state in the context after an error occurs and to avoid memory leaks or hanging streaming buffers in the daemon, the caller must clean up the context. This is done either specifically by calling Cancel() ([SWS_CRYPT_50046], [SWS_CRYPT_50089]), which discards unfinished transformations, or by Reset() ([SWS_CRYPT_50212]), which completely resets the context to the state prior to key binding (EXP SWArchitecture p. 100).

Further detailed evidence

The specification of the Cryptography module relies on a series of central requirements and architectural documents, which are categorized below:

This module guide was generated by an AI curation assistant based on the AUTOSAR Adaptive specification R25-11.

function: 261 type alias: 43 variable: 43 class: 34 enumeration: 5 struct: 1

Topic map

Detail view

Select an entry in the outline.

ara::crypto

Crypto Error Domain class that provides interfaces as defined by ara::core::ErrorDomain such as a name of the Crypto Error Domain or message

inherits from ara::core::ErrorDomain

Exception type thrown for CRYPTO errors.

inherits from ara::core::Exception

Formatter class

Formatter object interface.

128 bit secure counter made up of two uint64_t’s representing the most significant and least significant bits

Serializable object interface.

Return a reference to the global CryptoErrorDomain.

constexpr const ara::core::ErrorDomain & GetCryptoErrorDomain () noexcept;

This factory method shall create or return the existing instance of a specific Crypto Provider.

ara::core::Result< cryp::CryptoProvider::Sptr > LoadCryptoProvider (const ara::core::InstanceSpecifier &iSpecify) noexcept;
LoadFormatter function

Factory that creates a Formatter.

ara::core::Result< Formatter::Sptr > LoadFormatter () noexcept;
LoadKeySlot function

Load a read-only key slot. This factory method shall load the information associated with the specified KeySlot into a KeySlot object.

ara::core::Result< cryp::KeySlot::Sptr > LoadKeySlot (const ara::core::InstanceSpecifier &iSpecify) noexcept;

Load a writeable key slot. This factory method shall load the information associated with the specified KeySlot into a WriteableKeySlot object.

ara::core::Result< cryp::WriteableKeySlot::Sptr > LoadWriteableKeySlot (const ara::core::InstanceSpecifier &iSpecify) noexcept;

This factory method shall create or return the existing instance of the singleton X.509 Provider.

ara::core::Result< x509::X509Provider::Sptr > LoadX509Provider () noexcept;
MakeErrorCode function

Makes Error Code instances from the Crypto Error Domain. The returned ErrorCode instance always references to CryptoErrorDomain.

constexpr ara::core::ErrorCode MakeErrorCode (CryptoErrorDomain::Errc code, ara::core::ErrorDomain::SupportDataType data) noexcept;
CryptoErrc enumeration

Defines the error codes for the ara::crypto::CryptoErrorDomain

enum class CryptoErrc : ara::core::ErrorDomain::CodeType {...};
CryptoObjectType enumeration

Enumeration of all types of crypto objects, i.e. types of content that can be stored to a key slot.

enum class CryptoObjectType : std::uint8_t {...};
CryptoTransform enumeration

Enumeration of cryptographic transformation directions.

enum class CryptoTransform : std::uint8_t {...};
AlgId type alias

Type for holding StringView of algorithm according to standardized format described in the chapter ’Naming Convention’.

using AlgId = ara::core::StringView;
AlgIdString type alias

Type for holding String of algorithm according to standardized format described in the chapter ’Naming Convention’.

using AlgIdString = ara::core::String;

Type for holding bit-flags of allowed usages of a key.

using AllowedUsageFlags = std::uint32_t;
FormatId type alias

A container type for the encoding format identifiers.

using FormatId = std::uint32_t;

Type for holding StringView of algorithm according to standardized format described in the chapter ’Naming Convention’.

Read-Only Memory Region (intended for [in] arguments)

using ReadOnlyMemRegion = ara::core::Span<const std::uint8_t>;

Read-Write Memory Region (intended for [out] or [in/out] arguments)

using ReadWriteMemRegion = ara::core::Span<std::uint8_t>;
Timestamp type alias

The key can be used for data decryption.

constexpr AllowedUsageFlags kAllowDataDecryption {0x0002};

The following constants define 1-bit values representing allowed usages. The key can be used for data encryption

constexpr AllowedUsageFlags kAllowDataEncryption {0x0001};

The derived key can be exported in plaintext.

constexpr AllowedUsageFlags kAllowDerivedPlaintextExport {0x4000};

The key can be used as input to a HashFunctionCtx.

constexpr AllowedUsageFlags kAllowHashCalculation {0x1000};

The key can be used as private or public input to key agreement.

constexpr AllowedUsageFlags kAllowKeyAgreement {0x0020};

The key can be used for key derivation.

constexpr AllowedUsageFlags kAllowKeyDerivation {0x0040};

The key can be used as a key encryption key for key unwrapping or key decapsulation.

constexpr AllowedUsageFlags kAllowKeyUnwrapping {0x0100};

The key can be used as a key encryption key for key wrapping or key encapsulation.

constexpr AllowedUsageFlags kAllowKeyWrapping {0x0080};
kAllowMac variable

The key can be used for MAC generation and verification.

constexpr AllowedUsageFlags kAllowMac {0x0004};
kAllowPersist variable

The key can persisted.

constexpr AllowedUsageFlags kAllowPersist {0x0200};

The key can be exported in plaintext.

constexpr AllowedUsageFlags kAllowPlaintextExport {0x2000};
kAllowRngInit variable

The symmetric key can be used for seeding of a RandomGeneratorCtx.

constexpr AllowedUsageFlags kAllowRngInit {0x0800};

The key can be securely exported (protected export)

constexpr AllowedUsageFlags kAllowSecuredExport {0x0400};

The key can be used for signature generation.

constexpr AllowedUsageFlags kAllowSigGeneration {0x0008};

The key can be used for signature verification.

constexpr AllowedUsageFlags kAllowSigVerification {0x0010};

Export DER-encoded value of an object.

constexpr FormatId kFormatDerEncoded {2};

Export PEM-encoded value of an object.

constexpr FormatId kFormatPemEncoded {3};

Export only raw value of an object, i.e., a plain byte array for symmetric keys and ISO/IEC 7816-8 / IEEE P1363 encoding for combined values.

constexpr FormatId kFormatRawValueOnly {1};

Proprietary format that is only valid in the context of a CryptoProvider.

constexpr FormatId kProprietaryFormat {0};

ara::crypto::cryp

Authenticated Cipher Context interface.

inherits from CryptoContext

A common interface for all cryptographic objects recognizable by the Crypto Provider.

inherits from ara::crypto::Serializable

base of PrivateKey, PublicKey, SymmetricKey

CryptoProviderInterface representing one implementation of a set of cryptographic primitives with a key storage.

Interface for asymmetric decryption.

inherits from CryptoContext

Interface for asymmetric encryption.

inherits from CryptoContext

Hash function interface.

inherits from CryptoContext

Key Agreement Private key Context interface.

inherits from CryptoContext

Asymmetric Key Encapsulation Mechanism (KEM) Private key Context interface.

inherits from CryptoContext

Key Derivation Function interface.

inherits from CryptoContext

Asymmetric Key Encapsulation Mechanism (KEM) Public key Context interface.

inherits from CryptoContext

KeySlot class

KeySlot interface representing a storage location for a key in a CryptoProvider.

base of WriteableKeySlot

Keyed Message Authentication Code Context interface definition.

inherits from CryptoContext

Generalized Asymmetric Private Key interface.

inherits from CryptoObject

A contexts for importing secured data such as secret key-material.

inherits from CryptoContext

PublicKey class

General Asymmetric Public Key interface.

inherits from CryptoObject

Interface of Random Number Generator Context.

inherits from CryptoContext

Signature Private key Context interface.

inherits from CryptoContext

Interface for Symmetric Cipher Operations.

inherits from CryptoContext

Symmetric Key interface.

inherits from CryptoObject

Context of a symmetric key wrap algorithm.

inherits from CryptoContext

Signature Verification Public key Context interface.

inherits from CryptoContext

WriteableKeySlot interface representing a writeable storage location for a key in a Crypto Provider.

inherits from KeySlot

ara::crypto::x509

X.509 Certificate interface.

inherits from ara::crypto::Serializable

Certificate Validation Context.

X.509 Certificate Validation Result.

Certificate Signing Request (CSR) object interface.

inherits from ara::crypto::Serializable

Interface of OcspResponse.

X509DN class

Interface of X.509 Distinguished Name (DN).

inherits from ara::crypto::Serializable

X.509 Provider interface.

Certificate Validation Status.

enum class CertificateValidationStatus : std::uint8_t {...};
OcspResponseStatus enumeration

On-line Certificate Status Protocol (OCSP) Response Status.

enum class OcspResponseStatus : std::uint8_t {...};

Type for holding bit-flags of certificate validation options.

using CertificateValidationOptions = std::uint32_t;

X.509 v3 Extended Key Usage type definition.

using X509ExtendedKeyUsage = std::uint32_t;
X509KeyUsage type alias

X.509 v3 Key Usage type definition.

using X509KeyUsage = std::uint32_t;
kClientAuth variable

TLS WWW client authentication.

constexpr X509ExtendedKeyUsage kClientAuth {0x4000};
kCodeSigning variable

Signing of downloadable executable code.

constexpr X509ExtendedKeyUsage kCodeSigning {0x2000};

The key can be used for Certificates Revokation Lists (CRL) signing.

constexpr X509KeyUsage kConstrCrlSign {0x0200};

The key can be used for data encipherment.

constexpr X509KeyUsage kConstrDataEncipherment {0x1000};

The enciphermet key can be used for deciphering only.

constexpr X509KeyUsage kConstrDecipherOnly {0x0080};

The key can be used for digital signature production.

constexpr X509KeyUsage kConstrDigitalSignature {0x8000};

The enciphermet key can be used for enciphering only.

constexpr X509KeyUsage kConstrEncipherOnly {0x0100};

The key can be used for a key agreement protocol execution.

constexpr X509KeyUsage kConstrKeyAgreement {0x0800};

The key can be used for certificates signing.

constexpr X509KeyUsage kConstrKeyCertSign {0x0400};

The key can be used for key encipherment.

constexpr X509KeyUsage kConstrKeyEncipherment {0x2000};

The key can be used in cases requiring the "non-repudiation" guarantee.

constexpr X509KeyUsage kConstrNonRepudiation {0x4000};

Email protection.

constexpr X509ExtendedKeyUsage kEmailProtection {0x1000};
kIgnoreCrl variable

ignore previously imported CRLs

constexpr CertificateValidationOptions kIgnoreCrl {0x0008};

ignore the NotAfter field

constexpr CertificateValidationOptions kIgnoreNotAfter {0x0002};

ignore the NotBefore field

constexpr CertificateValidationOptions kIgnoreNotBefore {0x0001};

ignore all unknown critical extensions

constexpr CertificateValidationOptions kIgnoreUnknownCritical Extensions {0x0004};
kOcspOff variable

do not require OCSP response during certificate validation. This is the default behavior.

constexpr CertificateValidationOptions kOcspOff {0x0040};

require OCSP response for all certificates of chain

constexpr CertificateValidationOptions kOcspResponseCompleteChain {0x0010};

require OCSP response only for target certificate

constexpr CertificateValidationOptions kOcspResponseTargetOnly {0x0020};
kOCSPSigning variable

Signing OCSP responses.

constexpr X509ExtendedKeyUsage kOCSPSigning {0x0400};
kServerAuth variable

TLS WWW server authentication.

constexpr X509ExtendedKeyUsage kServerAuth {0x8000};
kTimeStamping variable

Binding the hash of an object to a time.

constexpr X509ExtendedKeyUsage kTimeStamping {0x0800};

Namespaces

UML class diagram of the module

Abgerundete Rahmen = Namespaces; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = modulfremde bzw. externe Basisklassen. Klicken öffnet die Klassenseite.

G cluster_1 ara::crypto cluster_2 ara::crypto::cryp cluster_3 ara::crypto::x509 nara__crypto__Serializable855 Serializable nara__crypto__CryptoErrorDomain690 CryptoErrorDomain nara__core__ErrorDomain335 ara::core::ErrorDomain nara__crypto__CryptoErrorDomain690->nara__core__ErrorDomain335 nara__crypto__CryptoException764 CryptoException nara__core__Exception792 ara::core::Exception nara__crypto__CryptoException764->nara__core__Exception792 nara__crypto__Formatter631 Formatter nara__crypto__SecureCounter126 «struct» SecureCounter nara__crypto__cryp__AuthCipherCtx142 AuthCipherCtx nara__crypto__cryp__CryptoContext85 CryptoContext nara__crypto__cryp__AuthCipherCtx142->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__CryptoObject679 CryptoObject nara__crypto__cryp__CryptoObject679->nara__crypto__Serializable855 nara__crypto__cryp__DecryptorPrivateCtx616 DecryptorPrivateCtx nara__crypto__cryp__DecryptorPrivateCtx616->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__EncryptorPublicCtx829 EncryptorPublicCtx nara__crypto__cryp__EncryptorPublicCtx829->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__HashFunctionCtx412 HashFunctionCtx nara__crypto__cryp__HashFunctionCtx412->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyAgreementPrivateCtx203 KeyAgreementPrivateCtx nara__crypto__cryp__KeyAgreementPrivateCtx203->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyDecapsulatorPrivateCtx748 KeyDecapsulatorPrivateCtx nara__crypto__cryp__KeyDecapsulatorPrivateCtx748->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyDerivationFunctionCtx485 KeyDerivationFunctionCtx nara__crypto__cryp__KeyDerivationFunctionCtx485->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeyEncapsulatorPublicCtx699 KeyEncapsulatorPublicCtx nara__crypto__cryp__KeyEncapsulatorPublicCtx699->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__KeySlot637 KeySlot nara__crypto__cryp__MessageAuthnCodeCtx845 MessageAuthnCodeCtx nara__crypto__cryp__MessageAuthnCodeCtx845->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__PrivateKey762 PrivateKey nara__crypto__cryp__PrivateKey762->nara__crypto__cryp__CryptoObject679 nara__crypto__cryp__ProtectedKeyImportCtx279 ProtectedKeyImportCtx nara__crypto__cryp__ProtectedKeyImportCtx279->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__PublicKey940 PublicKey nara__crypto__cryp__PublicKey940->nara__crypto__cryp__CryptoObject679 nara__crypto__cryp__RandomGeneratorCtx512 RandomGeneratorCtx nara__crypto__cryp__RandomGeneratorCtx512->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__SignerPrivateCtx943 SignerPrivateCtx nara__crypto__cryp__SignerPrivateCtx943->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__SymmetricCipherCtx167 SymmetricCipherCtx nara__crypto__cryp__SymmetricCipherCtx167->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__SymmetricKey111 SymmetricKey nara__crypto__cryp__SymmetricKey111->nara__crypto__cryp__CryptoObject679 nara__crypto__cryp__SymmetricKeyWrapperCtx465 SymmetricKeyWrapperCtx nara__crypto__cryp__SymmetricKeyWrapperCtx465->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__VerifierPublicCtx35 VerifierPublicCtx nara__crypto__cryp__VerifierPublicCtx35->nara__crypto__cryp__CryptoContext85 nara__crypto__cryp__WriteableKeySlot529 WriteableKeySlot nara__crypto__cryp__WriteableKeySlot529->nara__crypto__cryp__KeySlot637 nara__crypto__cryp__CryptoProvider844 CryptoProvider nara__crypto__x509__Certificate240 Certificate nara__crypto__x509__Certificate240->nara__crypto__Serializable855 nara__crypto__x509__CertSignRequest934 CertSignRequest nara__crypto__x509__CertSignRequest934->nara__crypto__Serializable855 nara__crypto__x509__X509DN930 X509DN nara__crypto__x509__X509DN930->nara__crypto__Serializable855 nara__crypto__x509__CertificateValidationCtx565 CertificateValidationCtx nara__crypto__x509__CertificateValidationResult372 CertificateValidationResult nara__crypto__x509__OcspResponse358 OcspResponse nara__crypto__x509__X509Provider937 X509Provider