From 31a85b3b22a6a4570dc8a6bd90c35b63e9288ddc Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 14 Jan 2026 11:20:35 -0600 Subject: [PATCH] Update SecureStorgageSample --- .../Services/AppStorageCatalog.swift | 34 ++++++++----------- .../ExternalKeyMaterialProvider.swift | 2 +- .../ExternalSessionLogsKey.swift | 1 + .../EncryptedFileSystem/PrivateNotesKey.swift | 1 + .../EncryptedFileSystem/SessionLogsKey.swift | 1 + .../FileSystem/CachedDataKey.swift | 1 + .../FileSystem/CustomEncodedKey.swift | 1 + .../FileSystem/SettingsPlistKey.swift | 1 + .../FileSystem/UserProfileFileKey.swift | 1 + .../StorageKeys/Keychain/APITokenKey.swift | 1 + .../StorageKeys/Keychain/CredentialsKey.swift | 1 + .../Keychain/ExternalKeyMaterialKey.swift | 9 ++--- .../Keychain/LastLocationKey.swift | 1 + .../Platform/SyncableSettingKey.swift | 1 + .../Platform/WatchVibrationKey.swift | 1 + .../UserDefaults/AppVersionKey.swift | 1 + .../UserDefaults/UserPreferencesKey.swift | 1 + 17 files changed, 32 insertions(+), 27 deletions(-) diff --git a/SecureStorgageSample/Services/AppStorageCatalog.swift b/SecureStorgageSample/Services/AppStorageCatalog.swift index c3d96f8..70a460a 100644 --- a/SecureStorgageSample/Services/AppStorageCatalog.swift +++ b/SecureStorgageSample/Services/AppStorageCatalog.swift @@ -3,26 +3,22 @@ import LocalData import SharedKit struct AppStorageCatalog: StorageKeyCatalog { - static var allKeys: [StorageKeyEntry] { + static var allKeys: [AnyStorageKey] { [ - StorageKeyEntry(StorageKeys.AppVersionKey()), - StorageKeyEntry(StorageKeys.UserPreferencesKey()), - StorageKeyEntry(StorageKeys.CredentialsKey()), - StorageKeyEntry(StorageKeys.LastLocationKey()), - StorageKeyEntry(StorageKeys.APITokenKey()), - StorageKeyEntry(StorageKeys.UserProfileFileKey()), - StorageKeyEntry(StorageKeys.CachedDataKey()), - StorageKeyEntry(StorageKeys.SettingsPlistKey()), - StorageKeyEntry(StorageKeys.SessionLogsKey()), - StorageKeyEntry(StorageKeys.PrivateNotesKey()), - StorageKeyEntry(StorageKeys.ExternalSessionLogsKey()), - StorageKeyEntry(StorageKeys.WatchVibrationKey()), - StorageKeyEntry(StorageKeys.SyncableSettingKey()), - StorageKeyEntry( - StorageKeys.ExternalKeyMaterialKey(keyName: ""), - nameRule: .prefix(StorageKeys.ExternalKeyMaterialKey.namePrefix), - notes: "Key name is dynamic per external source (prefix matched)." - ) + .key(StorageKeys.AppVersionKey()), + .key(StorageKeys.UserPreferencesKey()), + .key(StorageKeys.CredentialsKey()), + .key(StorageKeys.LastLocationKey()), + .key(StorageKeys.APITokenKey()), + .key(StorageKeys.UserProfileFileKey()), + .key(StorageKeys.CachedDataKey()), + .key(StorageKeys.SettingsPlistKey()), + .key(StorageKeys.SessionLogsKey()), + .key(StorageKeys.PrivateNotesKey()), + .key(StorageKeys.ExternalSessionLogsKey()), + .key(StorageKeys.WatchVibrationKey()), + .key(StorageKeys.SyncableSettingKey()), + .key(StorageKeys.ExternalKeyMaterialKey()) ] } } diff --git a/SecureStorgageSample/Services/ExternalKeyMaterialProvider.swift b/SecureStorgageSample/Services/ExternalKeyMaterialProvider.swift index c9f9844..965bf21 100644 --- a/SecureStorgageSample/Services/ExternalKeyMaterialProvider.swift +++ b/SecureStorgageSample/Services/ExternalKeyMaterialProvider.swift @@ -9,7 +9,7 @@ struct ExternalKeyMaterialProvider: KeyMaterialProviding { } func keyMaterial(for keyName: String) async throws -> Data { - let key = StorageKeys.ExternalKeyMaterialKey(keyName: keyName) + let key = StorageKeys.ExternalKeyMaterialKey() if let existing = try await StorageRouter.shared.get(key) as Data? { return existing } diff --git a/SecureStorgageSample/StorageKeys/EncryptedFileSystem/ExternalSessionLogsKey.swift b/SecureStorgageSample/StorageKeys/EncryptedFileSystem/ExternalSessionLogsKey.swift index 48c88ac..b9cbf72 100644 --- a/SecureStorgageSample/StorageKeys/EncryptedFileSystem/ExternalSessionLogsKey.swift +++ b/SecureStorgageSample/StorageKeys/EncryptedFileSystem/ExternalSessionLogsKey.swift @@ -13,6 +13,7 @@ extension StorageKeys { ) let serializer: Serializer<[String]> = .json let owner = "SampleApp" + let description = "Stores session logs encrypted with external key material." let availability: PlatformAvailability = .phoneOnly let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/EncryptedFileSystem/PrivateNotesKey.swift b/SecureStorgageSample/StorageKeys/EncryptedFileSystem/PrivateNotesKey.swift index 8ea5c8d..8d1772e 100644 --- a/SecureStorgageSample/StorageKeys/EncryptedFileSystem/PrivateNotesKey.swift +++ b/SecureStorgageSample/StorageKeys/EncryptedFileSystem/PrivateNotesKey.swift @@ -13,6 +13,7 @@ extension StorageKeys { ) let serializer: Serializer = .json let owner = "SampleApp" + let description = "Stores private notes encrypted at rest." let availability: PlatformAvailability = .phoneOnly let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/EncryptedFileSystem/SessionLogsKey.swift b/SecureStorgageSample/StorageKeys/EncryptedFileSystem/SessionLogsKey.swift index 39cc1db..e59cd63 100644 --- a/SecureStorgageSample/StorageKeys/EncryptedFileSystem/SessionLogsKey.swift +++ b/SecureStorgageSample/StorageKeys/EncryptedFileSystem/SessionLogsKey.swift @@ -12,6 +12,7 @@ extension StorageKeys { let security: SecurityPolicy let serializer: Serializer<[String]> = .json let owner = "SampleApp" + let description = "Stores session logs encrypted with PBKDF2-derived keys." let availability: PlatformAvailability = .phoneOnly let syncPolicy: SyncPolicy = .never diff --git a/SecureStorgageSample/StorageKeys/FileSystem/CachedDataKey.swift b/SecureStorgageSample/StorageKeys/FileSystem/CachedDataKey.swift index 459d621..235c99b 100644 --- a/SecureStorgageSample/StorageKeys/FileSystem/CachedDataKey.swift +++ b/SecureStorgageSample/StorageKeys/FileSystem/CachedDataKey.swift @@ -11,6 +11,7 @@ extension StorageKeys { let security: SecurityPolicy = .none let serializer: Serializer = .data let owner = "SampleApp" + let description = "Stores cached binary data that can be regenerated." let availability: PlatformAvailability = .all let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/FileSystem/CustomEncodedKey.swift b/SecureStorgageSample/StorageKeys/FileSystem/CustomEncodedKey.swift index dcebdb7..3accbb6 100644 --- a/SecureStorgageSample/StorageKeys/FileSystem/CustomEncodedKey.swift +++ b/SecureStorgageSample/StorageKeys/FileSystem/CustomEncodedKey.swift @@ -22,6 +22,7 @@ extension StorageKeys { } ) let owner = "SampleApp" + let description = "Stores custom-encoded string data (Base64 example)." let availability: PlatformAvailability = .all let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/FileSystem/SettingsPlistKey.swift b/SecureStorgageSample/StorageKeys/FileSystem/SettingsPlistKey.swift index 9dae0ee..986c601 100644 --- a/SecureStorgageSample/StorageKeys/FileSystem/SettingsPlistKey.swift +++ b/SecureStorgageSample/StorageKeys/FileSystem/SettingsPlistKey.swift @@ -11,6 +11,7 @@ extension StorageKeys { let security: SecurityPolicy = .none let serializer: Serializer<[String: AnyCodable]> = .plist let owner = "SampleApp" + let description = "Stores app settings exported as a property list." let availability: PlatformAvailability = .all let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/FileSystem/UserProfileFileKey.swift b/SecureStorgageSample/StorageKeys/FileSystem/UserProfileFileKey.swift index a48881d..02a3ea8 100644 --- a/SecureStorgageSample/StorageKeys/FileSystem/UserProfileFileKey.swift +++ b/SecureStorgageSample/StorageKeys/FileSystem/UserProfileFileKey.swift @@ -12,6 +12,7 @@ extension StorageKeys { let security: SecurityPolicy = .none let serializer: Serializer = .json let owner = "SampleApp" + let description = "Stores a lightweight user profile for file storage and watch sync." let availability: PlatformAvailability = .phoneWithWatchSync let syncPolicy: SyncPolicy = .automaticSmall diff --git a/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift b/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift index db192e1..33d5f47 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/APITokenKey.swift @@ -14,6 +14,7 @@ extension StorageKeys { ) let serializer: Serializer = .json let owner = "SampleApp" + let description = "Stores API auth token for network requests." let availability: PlatformAvailability = .phoneOnly let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift b/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift index a2a280d..77b716b 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/CredentialsKey.swift @@ -12,6 +12,7 @@ extension StorageKeys { let security: SecurityPolicy let serializer: Serializer = .json let owner = "SampleApp" + let description = "Stores user credentials for sign-in flows." let availability: PlatformAvailability = .phoneOnly let syncPolicy: SyncPolicy = .never diff --git a/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift b/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift index c0737ef..c434a41 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/ExternalKeyMaterialKey.swift @@ -6,7 +6,7 @@ extension StorageKeys { struct ExternalKeyMaterialKey: StorageKey { typealias Value = Data - let name: String + let name = "external_key_material" let domain: StorageDomain = .keychain(service: "com.example.securestorage.externalkey") let security: SecurityPolicy = .keychain( accessibility: .afterFirstUnlock, @@ -14,13 +14,8 @@ extension StorageKeys { ) let serializer: Serializer = .data let owner = "SampleApp" + let description = "Stores external key material used by encryption policies." let availability: PlatformAvailability = .phoneOnly let syncPolicy: SyncPolicy = .never - - static let namePrefix = "externalkey." - - init(keyName: String) { - self.name = Self.namePrefix + keyName - } } } diff --git a/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift b/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift index 26f5360..da10674 100644 --- a/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift +++ b/SecureStorgageSample/StorageKeys/Keychain/LastLocationKey.swift @@ -14,6 +14,7 @@ extension StorageKeys { ) let serializer: Serializer = .json let owner = "SampleApp" + let description = "Stores last known location for location-aware features." let availability: PlatformAvailability = .phoneOnly let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/Platform/SyncableSettingKey.swift b/SecureStorgageSample/StorageKeys/Platform/SyncableSettingKey.swift index 5feef01..785dca0 100644 --- a/SecureStorgageSample/StorageKeys/Platform/SyncableSettingKey.swift +++ b/SecureStorgageSample/StorageKeys/Platform/SyncableSettingKey.swift @@ -12,6 +12,7 @@ extension StorageKeys { let security: SecurityPolicy = .none let serializer: Serializer = .json let owner = "SampleApp" + let description = "Stores a setting that can be synced to watch." let availability: PlatformAvailability let syncPolicy: SyncPolicy diff --git a/SecureStorgageSample/StorageKeys/Platform/WatchVibrationKey.swift b/SecureStorgageSample/StorageKeys/Platform/WatchVibrationKey.swift index 2eff968..17a547f 100644 --- a/SecureStorgageSample/StorageKeys/Platform/WatchVibrationKey.swift +++ b/SecureStorgageSample/StorageKeys/Platform/WatchVibrationKey.swift @@ -12,6 +12,7 @@ extension StorageKeys { let security: SecurityPolicy = .none let serializer: Serializer = .json let owner = "SampleApp" + let description = "Controls haptic feedback on watch-only experiences." let availability: PlatformAvailability = .watchOnly let syncPolicy: SyncPolicy = .never } diff --git a/SecureStorgageSample/StorageKeys/UserDefaults/AppVersionKey.swift b/SecureStorgageSample/StorageKeys/UserDefaults/AppVersionKey.swift index 3e9ed82..ffaa5f2 100644 --- a/SecureStorgageSample/StorageKeys/UserDefaults/AppVersionKey.swift +++ b/SecureStorgageSample/StorageKeys/UserDefaults/AppVersionKey.swift @@ -14,6 +14,7 @@ extension StorageKeys { let security: SecurityPolicy = .none let serializer: Serializer = .json let owner = "SampleApp" + let description = "Tracks the last app version for migration and UI messaging." let availability: PlatformAvailability = .all let syncPolicy: SyncPolicy = .automaticSmall } diff --git a/SecureStorgageSample/StorageKeys/UserDefaults/UserPreferencesKey.swift b/SecureStorgageSample/StorageKeys/UserDefaults/UserPreferencesKey.swift index c530563..35c33c5 100644 --- a/SecureStorgageSample/StorageKeys/UserDefaults/UserPreferencesKey.swift +++ b/SecureStorgageSample/StorageKeys/UserDefaults/UserPreferencesKey.swift @@ -14,6 +14,7 @@ extension StorageKeys { let security: SecurityPolicy = .none let serializer: Serializer<[String: AnyCodable]> = .json let owner = "SampleApp" + let description = "Stores user preferences for app configuration screens." let availability: PlatformAvailability = .all let syncPolicy: SyncPolicy = .never }