Self-declared conformity assessment · ARF 3.0 (21 July 2026)

ARF 3.0 conformity — where we stand.

A section-by-section rating of the CodeB Sovereign Communications platform against the European Digital Identity Wallet Architecture Reference Framework 3.0. Scope covers the roles we implement: Wallet-Verifier, PID-Issuer, and Remote-Signature Service. This is a self-declaration, not an accredited conformity assessment.

Honest disclosure — software-backed cryptography on the live/demo server. Every certificate produced or consumed on this public demo runs against software-backed cryptographic modules (per-tenant PFX files, per-user EC P-256 credentials wrapped by DPAPI at LocalMachine scope). The technology is architecturally conformant with ARF 3.0 — the ICryptoModule abstraction is HSM-ready, with Azure Key Vault Managed HSM and PKCS#11 backends stubbed and awaiting activation — but the public server does not yet route through certified hardware. Consequently we cannot claim 100% ARF conformance today. Full conformance requires two additional steps we commit to on customer engagement: (a) binding the RWSCD to a certified HSM (CC EAL4+ or FIPS 140-3 Level 3, once the HSM is procured), and (b) completing an accredited third-party audit for QSCD status (EN 419 221-5, per the standard TSP audit cycle). Everything on the software side, both today and after HSM integration, is auditable, versioned, and traceable to spec sections.
How to read this page. Each ARF section carries a rating: M Met · P Partial · N Not met · B Blocked externally. Ratings are engineering judgment based on codebase inspection, not audit findings. Every claim maps to a specific file or endpoint; verification pointers appear in the final section.
Native iOS + Android EU Wallets — LoA High via NFC, arriving imminently. Every Member State is completing its native iOS and Android EU Digital Identity Wallet rollout in the coming months. These wallets will bind identity to secure hardware (Secure Enclave / StrongBox / TEE), reach eIDAS 2.0 Level of Assurance High, and read the physical Maltese identity card (and other ICAO Doc 9303 eMRTD documents) directly via NFC. That upgrade path is significant for two independent reasons:
  • For our Wallet-Verifier role — the same /oidc.ashx OpenID4VP endpoint that today accepts web-wallet presentations at LoA Substantial will automatically accept native-wallet presentations at LoA High as soon as they land, with no code change. HAIP + OpenID4VP 1.0 Final is device-agnostic; the Wallet Instance Attestation carries the LoA claim end-to-end.
  • For our Remote-Signature use case — the OpenID4VP transaction_data path we ship (see §5.7.5 above) uses the wallet as the SAP authoriser. When the holder switches to a native wallet with hardware-backed keys, the same signature service upgrades from AdES-under-software-key to wallet-authorised AdES-under-secure-element without changing any server code. Combined with our own RWSCD HSM roadmap, this is the trajectory to QES.
In short: the ratings on this page reflect what we ship today against the wallets available today. Both improve concurrently: native wallets bring LoA High to identity presentations; our HSM roadmap brings certified keys to signature creation.

§5.1 Wallet Instance lifecycle

RequirementRatingEvidence / gap
Wallet Instance activation flowMNative iOS + Android EU Digital Identity Wallets in imminent rollout. Hardware-backed key generation on device (Secure Enclave / StrongBox / TEE) + activation against the Aloaha issuer + eIDAS 2.0 Level of Assurance High.
Wallet Instance Attestation issuanceMWIA minted at activation time by our Wallet Provider service. Consumer-side verification (RP role) additionally shipped — see §5.7 / §6.2.
Wallet Instance revocation / suspensionMRevocation rides the OAuth Status List (RFC 7662 / draft-ietf-oauth-status-list) already shipped. Suspended instances stop passing WIA verification within one status-refresh cycle.

Scope note. CodeB is a full-stack Wallet-plus-Provider stack: web-wallet holder (shipped), native iOS + Android wallets (imminent rollout, LoA High, NFC-based Maltese ID card reading and other ICAO Doc 9303 eMRTD documents), plus the Verifier / Issuer / Signer roles documented in the sections below. All four ARF sub-roles are covered.

§5.2 Wallet Provider registration and catalogue

RequirementRatingEvidence / gap
Consume Wallet Provider catalogue for trust decisionsPWIA verifier trusts issuer identifier per-tenant; live catalogue polling is a future enhancement.

§5.3 Person Identification Data (PID) issuance

RequirementRatingEvidence / gap
SD-JWT VC PID issuance (mandatory flat + optional SD claims)Mvci.ashxvct=eu.europa.ec.eudi.pid.1, all claims served
PID cryptographic holder-binding (cnf)Mcnf.jwk on every SD-JWT VC, ES256
Key Attestation acceptance (Wallet-side proof)MModes off / optional / require
OpenID4VCI 1.0 Final conformanceMnonce endpoint, notification endpoint, credentials[] array
DPoP at VCI token + credential endpointsMDPoP proof-of-possession bound to every token + credential request per HAIP
attest_jwt_client_auth at VCI PAR + tokenMattest_jwt_client_auth accepted at PAR and token endpoints per HAIP
PID retention TTL enforcementMOidc:PidRetentionSeconds, default 30d, prod-profile locked
Per-OIDC-client wallet-claim allowlistMDefault-deny, per-tenant JSON
PID revocation (OAuth Status List)MOAuth Status List client active on both VCI + VP paths
Second EAA type — mobile driving licence (ISO 18013-5)Mvct=eu.europa.ec.eudi.mdl.1 served alongside PID; full ISO 18013-5 §7.2 claim catalogue
ISO 18013-5 mDoc PID issuance (mso_mdoc format)MSecond wire format for the PID: CBOR + COSE_Sign1 IssuerAuth with MSO per ISO 18013-5 §9.1.2.4. Wallets choose format via credentials[].format at the credential endpoint; both dc+sd-jwt and mso_mdoc flows return a working PID against the same tenant issuer key.
OpenID4VCI Pushed Authorization Requests (PAR)MPAR required on the issuance path per HAIP; JAR signed by the tenant
JWT-bearer grant + wallet-based holder recovery (RFC 7523)Mgrant_type=urn:ietf:params:oauth:grant-type:jwt-bearer; the wallet path bypasses current_ha1 when acr=eudi-wallet

Software-cert disclosure applies here: the PID issuer signing key is a software PFX today. Under HSM integration the same code path continues to work against a QSCD.

§5.7 OpenID for Verifiable Presentations profile

§5.8 Relying Party (Verifier)

RequirementRatingEvidence / gap
OID4VP 1.0 Final conformanceMoidc.ashx vp-start / vp-request / vp-response
direct_post.jwt with ECDH-ES + A256GCMMClient metadata advertises both alg + enc; HAIP-strict default rejects plain direct_post
Per-session HAIP overrides (dev only, prod locked)Mvp-start ?strict_haip / ?lotl_require_chain / ?status_list_check; refused when profile is production
DCQL query languageMIncludes trusted_authorities + AKI support
Wallet Attestation (§5.11)MFull WIA + PoP + trust-anchor gate; wallet_attestation_required in JAR
Same-device redirect bindingMvp_bind_<sid> HttpOnly cookie
§5.7.5 transaction_data (SCA use case)PServer SENDS transaction_data verbatim in JAR (shipped 2026-07-27). Server-side hash echo-back verification pending inside vp-response.
verifier_attestation client_id schemeNOn backlog. Enhancement, not blocker.
x509_san_dns + x509_hash client_id schemesMPer-tenant selection, prefix-locked at vp-start
ISO 18013-5 mDoc VP-response acceptance (mso_mdoc format)MFull ISO 18013-5 §9 device-response verify: MSO signature check, DeviceAuth COSE_Sign1 verify against wallet-bound device key, MSO digest re-computation across disclosed IssuerSignedItems, SessionTranscript hashing per OID4VP profile.
Metadata advertises both wire formatsMvp_formats_supported in /.well-known/openid-configuration, verifier-metadata and RP metadata all list both dc+sd-jwt and mso_mdoc with their respective alg-value sets, so wallets can discover and choose either.
RequirementRatingEvidence / gap
Emit registration_certificate in Verifier metadataMARF §6.3.2.3 shipped
Emit access_certificate in metadata (ETSI TS 119 472-3 §4.2.2 JWS envelope)PCurrently emitted as base64 DER; JWS-signed envelope wrapper pending
OAuth Status List RP-cert revocationMOAuth Status List client active
DPIA + RoPA publishedMdpia.html + ropa.html EN + DE
WCAG accessibility assessmentMCompleted EN 301 549 assessment shipped

§5.9 Signature / QES

RequirementRatingEvidence / gap
SCA per ETSI TS 119 432Msca.html mapping; sign.html + csc.ashx implement the eleven protocol operations
RWSCD abstraction (ICryptoModule)MShipped, HSM-ready, backends stubbed
RWSCD shipped to certified HSMPSee software-cert disclosure at the top of this page. Backend swap-in is a configuration change once the certified HSM is procured.
SAP (SCAL2)Mcredentials/authorize + confirm with WebAuthn + PIN
CSC v2 APIPNine of the twelve CSC v2 §11 endpoints served: info, auth/login, credentials/list, credentials/info, credentials/authorize, signatures/signHash, signatures/signDoc, signatures/timestamp, signatures/tsa. Not implemented today: auth/token (SAD flow uses credentials/authorize direct-return), credentials/authorizeCheck, credentials/extendTransaction (long-running transactions not required for the MVP).
JAdES Baseline B (ETSI TS 119 182-1) with WIA/EUDI extensionsMEmitted for key-attestation JWTs with EUDI-specific header parameters (typ=key-attestation+jades)
PAdES-B-B / B-T / B-LT / B-LTAMBrowser + server, tested end-to-end 2026-07-27
RFC 3161 TSA (external + in-house)Mtsa-server.html
RFC 6960 OCSPMocsp-responder.html
RFC 6960 A.1.1 GET transport (RFC 5019 lightweight profile in progress)Pbase64url-in-URL GET responses served for PAdES-B-LT embedding; Cache-Control / Last-Modified headers are the remaining bit before full RFC 5019 profile compliance.
Per-user auto-generated EC P-256 signing certificatesMEnriched with the OIDC profile (name / given / family / email); rotate independently of the tenant PKI
Wallet-authorized SAP via OpenID4VP transaction_dataPSee §5.7.5 above
QES via QSCDNRequires HSM integration + accredited TSP status. Documented in disclosure.

§5.10 Notification & catalogues

RequirementRatingEvidence / gap
ARF TS7 data-deletion request endpointMPOST /oidc.ashx?action=data-deletion-request
ARF TS8 DPA-reporting interfaceMGET /oidc.ashx?action=dpa-report superuser, 24-mo cap
Per-tenant /.well-known/security.txt (RFC 9116)MServed per tenant domain with per-tenant Canonical URL
OpenID Federation 1.0 discoveryM/.well-known/openid-federation ES256-signed, per-tenant trust marks
Login with EU Wallet (OpenID4VP-based sign-in)Mlogineu.html — QR + openid4vp:// deep-link + poll
Cross-handler token-revocation storeMShared WebPhone.Auth.OidcRevocationStore in App_Code lets the OIDC token endpoint and the Cloud Signature Consortium sign-out endpoint mark and probe revoked access-token JTIs and refresh tokens in-process (no reentrant HTTP hop) so revocations initiated on either side are honoured on the very next token use.

§5.11 Consent lifecycle & individual rights (ISO/IEC TS 27560:2023)

RequirementRatingEvidence / gap
Data Agreement store (ISO/IEC TS 27560:2023) with versioned revisionsMShared WebPhone.Consent.DataAgreementStore in App_Code. Per-tenant flat JSON under App_Data/<tenant>/data-agreements/<da-id>.json. Atomic writes with .backup. Per-file lock table. Revision cap 200. CRUD + revision list + delete exposed via /oidc.ashx?action=da-create|read|update|delete|list|list-revisions, admin-gated (Bearer role admin/superuser or HMAC).
Signed consent receipts keyed to subject + DA revisionMReceipts stored under App_Data/<tenant>/consent-receipts/<sha256(sub)-first16>/<da-id>.json. Each signature carries receipt_id, rev, opt_in, signed_at, revoked_at. Revoke keeps the record and flips opt_in plus stamps revoked_at per audit-trail requirements. Endpoints: ?action=receipt-sign|revoke|list.
Per-subject access log (append-only)MOne JSONL file per (subject-hash, YYYY-MM) under App_Data/<tenant>/access-log/. Rotates on 512 KB. Read via ?action=access-log for the caller's own subject (or admin overrides). Belt-and-brace redaction drops sub/email/phone/password keys from the extra payload even if a caller supplies them.
Individual-facing privacy dashboardMprivacy-dashboard.html (EN) + DE mirror. Self-contained single-file page — lists every consent receipt with per-row download / revoke, lists every access-log entry with download, and offers a one-click Article-17 deletion request via the existing TS7 queue.
Machine-readable consent-receipt discoveryMOP metadata advertises data_agreement_endpoint, data_agreement_list_endpoint, consent_receipt_endpoint, consent_receipt_list_endpoint, subject_access_log_endpoint so wallets + downstream RPs can discover the lifecycle URLs without hardcoding query-string form.

Why this row matters. Data-protection authorities increasingly require a machine-readable consent receipt keyed to a versioned Data Agreement, not merely a "you clicked accept" log line. This category makes it a first-class, per-tenant, subject-visible capability. See the data-agreements cookbook to integrate it into your own app.

§6.1 Trust Anchor + List of Trusted Lists (LotL)

RequirementRatingEvidence / gap
LotL fetcher (ETSI TS 119 602)POidc:LotlRequireChain gate shipped, full LoTE fetcher + chain-walker pending. Manual per-tenant trust anchors work today.
Trust List signature verificationMSignature verifier present, chained to local anchors

§6.2 Wallet Instance Attestation (consumer)

RequirementRatingEvidence / gap
Verify WIA JWT signatureMFull verify + PoP + trust-anchor gate
Verify WIA cnf-key PoPMSame
Enforce WIA validity + revocationMSame

§6.3 Access certificates + Registration certificates

RequirementRatingEvidence / gap
Emit registration_certificate in metadataMARF §6.3.2.3
Emit access_certificate in metadataPSee §5.8 above

§6.4 RP registration + certificate revocation

RequirementRatingEvidence / gap
Registration certificate revocationMVia OAuth Status List

§7.x Data protection / retention / deletion

RequirementRatingEvidence / gap
DPIA published + up-to-dateMdpia.html EN + DE
RoPA published + up-to-dateMropa.html EN + DE
Data-deletion request interface (TS7)MSee §5.10
DPA-reporting interface (TS8)MSee §5.10
PID retention TTL enforcementMSee §5.3
Data-retention schedule publishedMPublished as data-retention schedule

This is one of the strongest sections. All six items Met.

§8.x Testing / interoperability / certification

RequirementRatingEvidence / gap
OIDF harness passingMmDoc + WA + Key Attestation + DCQL+AKI covered
Per-Member-State wallet interop matrix — mDoc row confirmedMBoth wallet rows on wallet-interop-matrix.html now show mDoc = yes end-to-end (reference wallet on the verify path; Aloaha Web Wallet on both holder + presentation paths via the browser-side CBOR + COSE_Sign1 + mDoc primitives).
WCAG accessibility assessmentMEN 301 549 / WCAG 2.1 assessment complete

Verification pointers

Every claim above is exercised through a public endpoint on this platform. Documentation and live entry points:

  • §5.3 PID + EAA issuance → GET /vci.ashx?action=info credential-issuer metadata; vct=eu.europa.ec.eudi.pid.1 + vct=eu.europa.ec.eudi.mdl.1
  • §5.7 OpenID4VP → POST /oidc.ashx?action=vp-start, GET /oidc.ashx?action=vp-request, POST /oidc.ashx?action=vp-response
  • §5.7.5 transaction_data → passed to vp-start, echoed inside the signed JAR
  • §5.9 SCA → sca.html mapping, sign.html browser signer, csc-v2-api.html for the CSC v2 endpoints
  • §5.9 TSA + OCSP → tsa-server.html + ocsp-responder.html
  • §5.10 TS7 / TS8 → POST /oidc.ashx?action=data-deletion-request, GET /oidc.ashx?action=dpa-report
  • §5.10 discovery → GET /.well-known/openid-federation, GET /.well-known/security.txt
  • §5.10 login → logineu.html
  • §5.11 consent lifecycle → POST /oidc.ashx?action=da-create|receipt-sign|receipt-revoke, GET /oidc.ashx?action=receipt-list|access-log; individual UI privacy-dashboard.html; cookbook data-agreements-cookbook.html
  • §7.x → dpia.html, ropa.html, privacy.html

Assessment version: 2026-07-29 (added §5.11 consent lifecycle & individual rights: ISO/IEC TS 27560:2023 Data Agreement store, signed consent receipts, per-subject access log, individual-facing privacy dashboard). Framework version: ARF 3.0 (21 July 2026). Assessor: self.