UncommonCrypto.swift
CommonCrypto 的封装,为 Linux 提供了替代的 C 实现。
替代的 C 实现来自 trezor-crypto 仓库。
安装
UncommonCrypto.swift 已部署到 macOS、iOS、tvOS、watchOS 和 Linux。它仅在最新的操作系统版本上进行了测试,但由于该模块使用的平台提供的 API 非常少,因此应该很少有与早期版本相关的问题。
UncommonCrypto.swift 可移植到更多平台。如果操作系统有内置的加密 API,则可以使用它们来替代提供的 C 版本。在 Apple 平台上,库使用 CommonCrypto 框架。还应移植安全的随机生成器。
配置说明
-
Swift 包管理器:将此内容添加到您的
Package.swift
示意图的依赖部分.package(url: "https://github.com/tesseract-one/UncommonCrypto.swift.git", from: "0.1.0")
-
CocoaPods:在您的
Podfile
中输入以下内容pod 'UncommonCrypto', '~> 0.1'
使用示例
SHA1
import UncommonCrypto
// Some data
let data = Data()
// Simple call API
let hash1 = SHA1.hash(data: data)
// Streaming api
var sha1 = SHA1()
sha1.update(data)
let hash2 = sha1.finalize()
assert(hash1 == hash2)
SHA2
import UncommonCrypto
// Some data
let data = Data()
// Simple call API. SHA256 and SHA512 are supported
let hash1 = SHA2.hash(type: .sha256, data: data)
// Streaming api
var sha2 = SHA2(type: .sha256)
sha2.update(data)
let hash2 = sha2.finalize()
assert(hash1 == hash2)
SHA3
import UncommonCrypto
// Some data
let data = Data()
// Simple call API. Different Keccak and SHA3 variants supported.
let hash1 = SHA3.hash(type: .sha256, data: data)
// Streaming api
var sha3 = SHA3(type: .sha256)
sha3.update(data)
let hash2 = sha3.finalize()
assert(hash1 == hash2)
HMAC
import UncommonCrypto
// Some data
let data = Data()
// Some key
let key = [UInt8]()
// Simple call API. SHA256 and SHA512 are supported
let sign1 = HMAC.authenticate(type: .sha256, key: key, data: data)
// Streaming api
var hmac = HMAC(type: .sha256, key: key)
hmac.update(data)
let sign2 = hmac.finalize()
assert(sign1 == sign2)
PBKDF2
import UncommonCrypto
let salt = [UInt8]()
let password = [UInt8]()
// SHA512 or SHA256 HMAC can be used
let derived = try! PBKDF2.derive(type: .sha512, password: password, salt: salt)
print("Derived: ", derived)
许可协议
UncommonCrypto.swift 可根据 Apache 2.0 许可协议 进行使用、分发和修改。