CryptomatorCryptoLib 0.11.4

CryptomatorCryptoLib 0.11.4

Sebastian StenzelTobias HagemannPhilipp SchmidCryptobot 维护。



  • Philipp Schmid,Sebastian Stenzel 和 Tobias Hagemann 编写

Swift Compatibility Platform Compatibility Version Codacy Code Quality Codacy Coverage

CryptoLib Swift

这个库包含了 Cryptomator 在 iOS 中使用到的所有加密函数。本项目的目的是提供一个独立的轻量级库,拥有自己的发布周期,也可以用于其他项目。

有关 Cryptomator 加密方案的更多信息,请访问 docs.cryptomator.org 上的安全架构页面。

要求

  • iOS 9.0 或更高版本
  • macOS 10.12 或更高版本

安装

Swift 包管理器

您可以使用 Swift 包管理器

.package(url: "https://github.com/cryptomator/cryptolib-swift.git", .upToNextMinor(from: "1.0.0"))

CocoaPods

您可以使用CocoaPods

pod 'CryptomatorCryptoLib', '~> 1.0.0'

使用方法

主密钥

Masterkey 是一个只包含AES加密/解密和MAC身份验证密钥材料的类。

工厂

这将会创建一个新的主密钥,并带有安全的随机字节。

let masterkey = try Masterkey.createNew()

另一种创建主密钥的方式是从原始字节创建。

let aesMasterKey = ...
let macMasterKey = ...
let masterkey = Masterkey.createFromRaw(aesMasterKey: aesMasterKey, macMasterKey: macMasterKey)

主密钥文件

MasterkeyFile 表示主密钥文件。使用它,您可以解锁主密钥文件(并获得一个 Masterkey),锁定主密钥文件(并以JSON序列化),或更改密码短语。

工厂

创建一个具有从URL提供的或从JSON数据提供的内容的主密钥文件。

let url = ...
let masterkeyFile = try MasterkeyFile.withContentFromURL(url: url)

或者从JSON数据

let data = ...
let masterkeyFile = try MasterkeyFile.withContentFromData(data: data)

解锁

当您拥有主密钥文件时,您可以尝试解锁。如果成功,它将解密存储的加密密钥和MAC密钥到主密钥中,这可以用于加密器。

let masterkeyFile = ...
let passphrase = ...
let pepper = ... // optional
let masterkey = try masterkeyFile.unlock(passphrase: passphrase, pepper: pepper)

锁定

为了持久化主密钥,请使用此方法导出其加密/包装的主密钥和其他元数据为JSON数据。

let masterkey = ...
let vaultVersion = ...
let passphrase = ...
let pepper = ... // optional
let scryptCostParam = ... // optional
let data = try MasterkeyFile.lock(masterkey: masterkey, vaultVersion: vaultVersion, passphrase: passphrase, pepper: pepper, scryptCostParam: scryptCostParam)

更改密语

可以使用新的密语重新加密主密钥。

let masterkeyFileData = ...
let oldPassphrase = ...
let newPassphrase = ...
let pepper = ... // optional
let scryptCostParam = ... // optional
try MasterkeyFile.changePassphrase(masterkeyFileData: masterkeyFileData, oldPassphrase: oldPassphrase, newPassphrase: newPassphrase, pepper: pepper, scryptCostParam: scryptCostParam)

加密器

加密器是加密操作Cryptomator金库的核心类。

构造函数

通过提供主密钥来创建加密器。

let masterkey = ...
let cryptor = Cryptor(masterkey: masterkey)

路径加密和解密

通过加密目录ID来确定加密后的目录URL。

let cryptor = ...
let dirId = ...
let encryptedDirId = try cryptor.encryptDirId(dirId)

通过提供一个目录ID来加密和解密文件名。

let cryptor = ...
let filename = ...
let dirId = ...
let ciphertextName = try cryptor.encryptFileName(filename, dirId: dirId)
let cleartextName = try cryptor.decryptFileName(ciphertextName, dirId: dirId)

文件内容的加密和解密

通过URL对文件内容进行加密和解密。这些方法支持隐式进度合成

let cryptor = ...
let fileURL = ...
let ciphertextURL = ...
let cleartextURL = ...
try cryptor.encryptContent(from: fileURL, to: ciphertextURL)
try cryptor.decryptContent(from: ciphertextURL, to: cleartextURL)

文件大小计算

以O(1)的时间复杂度确定明文和密文的大小。

let cryptor = ...
let size = ...
let ciphertextSize = cryptor.calculateCiphertextSize(size)
let cleartextSize = try cryptor.calculateCleartextSize(ciphertextSize)

为CryptoLib Swift项目做贡献

如果您想报告一个错误、提出一个问题或帮助我们进行编码,请阅读我们的
贡献指南

通常,以下偏好被用于选择加密原语的实现

  1. Apple Swift Crypto (HMAC)
  2. Apple CommonCrypto (AES-CTR, RFC 3394 密钥派生)

行为准则

帮助我们维护Cryptomator的开放性和包容性。请阅读并遵守我们的
行为准则

许可

根据AGPLv3分发。有关更多信息,请参阅LICENSE文件。