CryptoCodable
は、Appleのswift-crypto
を使用してJSONエンコード時にAES-GCMでプロパティを暗号化するためのSwiftライブラリです。このライブラリは、Sendable
対応であると同時に、Codable
、Hashable
にも準拠したプロパティを保護し、復号もシンプルに行えるように設計されています。
- macOS >= 13
- 6.0 > Swift >= 5.10
- AES-GCMでJSONプロパティを暗号化・復号
- 暗号化対象のプロパティは
Sendable
、Codable
、およびHashable
に準拠 - 暗号化対象プロパティは
Optional
型である必要がある
このライブラリはSwift Package Managerを使用してインストールできます。
let package = Package(
...
dependencies: [
...
.package(url: "https://github.com/lemo-nade-room/swift-crypto-codable.git", branch: "main"),
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "CryptoCodable", package: "crypto-codable"),
]
),
...
]
...
)
DocCによるAPIドキュメントがあります
まず、暗号化対象のプロパティを持つCodable
な型を定義します。
import CryptoCodable
import Foundation
struct Event: Hashable, Codable, Sendable {
var id: UUID
@CryptoField var 個人情報: Self.個人情報?
struct 個人情報: Hashable, Codable, Sendable {
var 氏名: String
var 誕生日: Date
var 年齢: Int
}
}
次に、暗号鍵を設定して暗号化を行います。暗号鍵が設定されていない場合、fatalError
が発生します。
import CryptoCodable
import Foundation
let jsonData: Data = try CryptoConfigContainer.$key.withValue(.init(size: .bits256)) {
try JSONEncoder().encode(event)
}
暗号化されたデータを復号します。復号時にも暗号鍵を設定します。
import CryptoCodable
import Foundation
let event: Event = try CryptoConfigContainer.$key.withValue(key) {
try JSONDecoder().decode(Event.self, from: encrypted)
}
- プロパティの型は
Sendable
、Codable
、Hashable
に準拠している必要があります。 - プロパティは
Optional
型である必要があります。
暗号鍵が設定されていない場合、プロパティにはnil
が設定されますが、デコード自体は成功します。
- 暗号鍵が異なる場合には、
DecryptFailure
エラーが発生します。
このライブラリはMITライセンスで提供されています。詳細はLICENSEファイルをご覧ください。
なお、このプロジェクトはapple/swift-crypto
に依存しています。apple/swift-crypto
はApache 2.0ライセンスに基づいて提供されています。詳しくはこちらをご確認ください。