Skip to Content
ArchitectureTechnology Stack

Technology Stack

Architecture Layers


Native iOS Frameworks

FrameworkPurpose
SwiftUIDeclarative UI
SwiftDataLocal data persistence (@Model macro)
MultipeerConnectivityFace-to-face P2P proximity networking
AVFoundationCamera, QR scanning
CoreImageQR Code generation
CryptoKitAES-GCM encryption, ECIES
PassKitApple Wallet integration
LocalAuthenticationFace ID / Touch ID
CloudKitOptional iCloud sync
CoreNFCPassport NFC chip reading
VisionMRZ OCR recognition

Minimum iOS: 17.0 (required for SwiftData @Model macro, @Observable macro, NFC session bug fixes)


Third-Party SDKs

PurposeSDKNotes
Passport NFC readingNFCPassportReader (Swift)APDU, BAC/PACE protocol
ZK CircuitOpenPassport (Noir)ICAO 9303 signature verification + age range proof
ZK Provermopro (zkmopro)Noir → iOS native library
Secret SharingSwift Shamir SSSSocial Recovery
VC/DIDNative Swift implementationdid:key, SD-JWT, OID4VP

Data Persistence

Data TypeStorageEncryption
DID Master Key + per-RP KeysiOS Keychain (iCloud Keychain sync)Hardware + Apple E2EE
Credentials (VC)SwiftData (App sandbox)iOS Data Protection
ContactsSwiftData (App sandbox)iOS Data Protection
ZK ProofsSwiftData (App sandbox)iOS Data Protection
SettingsUserDefaultsNone (non-sensitive)
Recovery BundleiCloud Drive (non-Keychain)AES-GCM + ECIES

MVVM Pattern

// Model: solidarity/Models/Contact.swift @Model class Contact { var name: String var isVerified: Bool = false var verifiedAt: Date? var didPublicKey: String? var exchangeSignature: Data? // ... } // ViewModel (using @Observable macro) @Observable class PeopleViewModel { var contacts: [Contact] = [] var isLoading = false // Changes automatically trigger SwiftUI view updates } // View: solidarity/Views/PeopleViews/PeopleListView.swift struct PeopleListView: View { @State private var viewModel = PeopleViewModel() // ... }

Backup Strategy

LayerMechanismUser Action
KeysiCloud Keychain (auto-sync)None required
Keys (disaster recovery)Social Recovery (Shamir + guardian)One-time setup
App DataiCloud App Backup (v1)Toggle on/off
ExportVCF + VC bundle JSON + Graph ExportManual, requires Face ID

Service Module Structure

solidarity/Services/ ├── Identity/ (31 files) — DID, VC, VP, OIDC, Passport pipeline ├── Sharing/ (25 files) — Proximity, PassKit, QR, payload encryption ├── ZK/ (8 files) — mopro, Semaphore, proof generation/verification ├── Card/ (9 files) — QR generation/scanning, card formats ├── Vault/ (12 files) — Encrypted storage, time-lock ├── SocialGraph/ (2 files) — Common friends hash exchange ├── Recovery/ (1 file) — Social Recovery execution ├── CloudKit/ (6 files) — Optional iCloud sync └── Utils/ (18 files) — Encryption, Keychain, Logger

Feature Scope

v1 MVP (Current)

FeaturePriority
DID key creation (Keychain)P0
Passport OCR + NFC + ZKPP0
Age / humanhood proof (OID4VP)P0
Face-to-face P2P exchange + common friendsP0
Ephemeral messageP0
Self-hosted Web Verifier (zero-install verification)P0
Social Graph CredentialP0
Social Recovery (Shamir)P1
Onboarding full flowP1
iCloud BackupP1

v2 (Future)

FeatureNotes
SIOPv2 passwordless loginRequires RP cooperation
E2EE BackupEncrypted backup blob
MyData integrationPull data from government platforms

Deferred (Removed from Scope)

FeatureReason
Group (Semaphore)Too complex, practical use unvalidated
DIDCommReduce complexity
TLSNotary student proofProject no longer actively maintained
Last updated on