import CryptoKit import Foundation import LocalData nonisolated struct ExternalKeyMaterialProvider: KeyMaterialProviding { private enum Constants { static let keyLength = 32 } func keyMaterial(for keyName: String) async throws -> Data { let key = StorageKeys.ExternalKeyMaterialKey() if let existing = try await StorageRouter.shared.get(key) as Data? { return existing } let symmetricKey = SymmetricKey(size: .bits256) let material = symmetricKey.withUnsafeBytes { Data($0) } guard material.count == Constants.keyLength else { throw StorageError.securityApplicationFailed } try await StorageRouter.shared.set(material, for: key) return material } }