CommonCrypto 的封装,为 Linux 提供替代的 C 实现。
替代的 C 实现复制自 trezor-crypto 仓库。
UncommonCrypto.swift 可部署到 macOS、iOS、tvOS、watchOS 和 Linux。 然而,它只在最新的操作系统版本上进行了测试,因为该模块使用的平台提供的 API 非常少,早期版本应该很少有问题。
UncommonCrypto.swift 可以移植到更多平台。 如果操作系统有内置的加密 API,则可以使用它们来代替提供的 C 版本。 在 Apple 平台上,库使用 CommonCrypto 框架。 安全随机数生成器也应该被移植。
设置说明
Swift Package Manager: 将此添加到你的 Package.swift
清单的依赖部分
.package(url: "https://github.com/tesseract-one/UncommonCrypto.swift.git", from: "0.1.0")
CocoaPods: 将此放入你的 Podfile
pod 'UncommonCrypto', '~> 0.1'
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)
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)
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)
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)
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 许可证 进行使用、分发和修改。