Multipaz Developer Documentation
website·Indexed 33 days ago
https://developer.multipaz.orgTechnical documentation for Multipaz, featuring the org.multipaz.crypto library with HPKE cipher suites (including DHKEM, HKDF, and AES-GCM), the org.multipaz.presentment model, and legacy Android identity components for credential data requests, access control profiles, and device request parsing.
What's inside Multipaz
- The Identity Credential project by OpenWallet Foundation Labs enables decentralized identity issuance and verification. It supports standards including OpenID for Verifiable Credential Issuance (OpenID4VCI) and OpenID for Verifiable Presentations (OpenID4VP). The project provides a Kotlin Multiplatform (KMP) library for mobile wallets to issue and present credentials, as well as server components for issuing and verifying those credentials.
Overview of the Crypto object
TheCryptoobject provides cryptographic support routines and primitives by wrapping platform-specific crypto libraries. It is available across common, iOS, Java, Shared, and Web platforms.Overview of DocumentUtil
TheDocumentUtilobject in theorg.multipaz.documentpackage provides a set of utilities and helper functions designed for working with documents within the Multipaz framework.Overview of CredentAgent consent layer
CredentAgent provides a human-in-the-loop credential check for AI agents. It ensures that before an agent completes a consequential action (like checking out a cart or unlocking restricted content), the user must prove a verifiable credential from their phone wallet. The system treats identity, age verification, loyalty memberships, and payment as credentials within the same policy framework. Currently, it enforces credential disclosure and binding (WebAuthn/OpenID4VP), but does not yet enforce issuer trust.Overview of Holder app responsibilities and components
A Holder app is responsible for the provisioning and storage of digital identities, specifically focusing on the creation, secure storage, and presentation of mDocs (mobile Documents). The implementation of a Holder app involves several key functional areas: initializing secure storage and cryptographic infrastructure, setting up document repositories, provisioning mDoc credentials, managing and fetching documents, presenting credentials to verifiers, and managing trust relationships with verifier apps.Overview of SoftwareSecureArea
The
SoftwareSecureAreaclass is an implementation ofSecureAreathat creates and manages software-based cryptographic keys. It supports all curves and algorithms defined bySecureArea, including passphrase-protected keys.Key technical details:
- Storage: Key material is managed via the
Storageabstraction. - Encryption: Passphrase-protected keys are encrypted using AES-GCM with 256-bit keys. The encryption key is derived from the passphrase using HKDF.
- Platform Implementation: On JVM and Android, it utilizes the
Cryptolibrary and its implemented algorithms and curves. - Instantiation: Use the
SoftwareSecureArea.createcompanion method to create an instance.
- Storage: Key material is managed via the
Overview of TrustManager implementations
Multipaz uses the
TrustManagerinterface to manage and validate trust relationships. There are three primary implementations available:- LocalTrustManager: Manages trust using local files.
- VicalTrustManager: Implements trust based on VICAL, following the
ISO/IEC 18013-5standard. - CompositeTrustManager: Allows the stacking of multiple trust managers to combine different trust sources.
Overview of the CredentAgent SDK
CredentAgent is a consent layer for AI agents designed to prevent agents from performing consequential actions (such as payments, age-gating, or access grants) without first proving a verifiable credential from the user's wallet. It ensures that identity and authorization are cryptographically backed and enforced server-side, rather than relying on LLM assertions. The SDK is compatible with Claude, ChatGPT, and Goose and is distributed via two npm packages: a host-agnostic 'Gate' and a ready-made 'Storefront'.Overview of VerticalCardListModel
TheVerticalCardListModelis a UI-agnostic state model and interaction coordinator for a vertical card list (wallet card stack/pass deck). It manages the display order of cards, drag-and-drop state machines, cooldown timers, and tap action resolution. It works in tandem withCardListLayoutCalculator, which handles the mathematical calculations for card dimensions, offsets, and visual states (scale, elevation, alpha, zIndex).Overview of OpenID4VCIBackendUtil
OpenID4VCIBackendUtil is a utility object used to implement an OpenID4VCI backend. Because these utilities often require private keys for signing, they should typically be executed on a secure server in production environments to prevent private keys from being embedded in client applications. In test environments, they may be invoked directly within a client app for simplicity.Overview of IdentityCredentialStore
IdentityCredentialStore is an abstract interface providing a secure store for user identity documents. It is designed to be general, leaving the specific message formats and communication semantics for credential verification devices and issuing authorities (IAs) to be implemented by credential-specific applications. It adheres to the ISO/IEC 18013-5:2021 standard.
Each credential in the store consists of:
- A document type (string).
- Namespaces (recommended as reverse domain names) to disambiguate value names.
- Name/value pairs for each namespace (values are CBOR-typed) with associated access control profile IDs.
- Access control profiles defining conditions for data release.
- A CredentialKey (asymmetric key pair) for authentication to the Issuing Authority.
- Reader authentication public keys to authenticate authorized readers.
- Signing keys for collections of values and session transcripts.
Overview of DocumentStore
TheDocumentStoreclass is used to store real-world identity documents (e.g., ISO/IEC 18013-5:2021 Mobile Driving Licenses). It is format-agnostic and supports various presentation and issuance protocols. It relies on aSecureAreafor managing authentication keys, which is abstracted via theSecureAreaRepositoryinterface. A key guarantee of the store is that once a document is created viacreateDocument, subsequent calls tolookupDocumentwill return the sameDocumentinstance.