Summary: - Sources: Models, Protocols, Services - Tests: EncryptionHelperTests.swift, LocalDataTests.swift - Docs: README - Config: Package - Added symbols: extension StorageKey, func deriveKeyMaterial, func encryptWithKey, func encryptWithAESGCM, func decryptWithKey, func decryptWithAESGCM (+6 more) - Removed symbols: func extractDerivationParams, func encryptWithKey, func decryptWithKey, class LocalDataTests, func testUserDefaultsRoundTrip, func testFileSystemRoundTrip Stats: - 8 files changed, 210 insertions(+), 64 deletions(-)
58 lines
1.6 KiB
Swift
58 lines
1.6 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import LocalData
|
|
|
|
struct EncryptionHelperTests {
|
|
private let masterKeyService = "LocalData.MasterKey"
|
|
private let keyName = "LocalDataTests.encryption"
|
|
private let payload = Data("payload".utf8)
|
|
|
|
@Test func aesGCMWithPBKDF2RoundTrip() async throws {
|
|
await clearMasterKey()
|
|
|
|
let policy: SecurityPolicy.EncryptionPolicy = .aes256(
|
|
keyDerivation: .pbkdf2(iterations: 1_000)
|
|
)
|
|
|
|
let encrypted = try await EncryptionHelper.shared.encrypt(
|
|
payload,
|
|
keyName: keyName,
|
|
policy: policy
|
|
)
|
|
let decrypted = try await EncryptionHelper.shared.decrypt(
|
|
encrypted,
|
|
keyName: keyName,
|
|
policy: policy
|
|
)
|
|
|
|
#expect(decrypted == payload)
|
|
await clearMasterKey()
|
|
}
|
|
|
|
@Test func chaChaPolyWithHKDFRoundTrip() async throws {
|
|
await clearMasterKey()
|
|
|
|
let policy: SecurityPolicy.EncryptionPolicy = .chacha20Poly1305(
|
|
keyDerivation: .hkdf()
|
|
)
|
|
|
|
let encrypted = try await EncryptionHelper.shared.encrypt(
|
|
payload,
|
|
keyName: keyName,
|
|
policy: policy
|
|
)
|
|
let decrypted = try await EncryptionHelper.shared.decrypt(
|
|
encrypted,
|
|
keyName: keyName,
|
|
policy: policy
|
|
)
|
|
|
|
#expect(decrypted == payload)
|
|
await clearMasterKey()
|
|
}
|
|
|
|
private func clearMasterKey() async {
|
|
try? await KeychainHelper.shared.deleteAll(service: masterKeyService)
|
|
}
|
|
}
|