UncommonCrypto.swift

🐧 linux: ready GitHub license Build Status GitHub release SPM compatible CocoaPods version Platform macOS | iOS | tvOS | watchOS | Linux

CommonCrypto 的封装,为 Linux 提供替代的 C 实现。

替代的 C 实现复制自 trezor-crypto 仓库

安装

UncommonCrypto.swift 可部署到 macOS、iOS、tvOS、watchOS 和 Linux。 然而,它只在最新的操作系统版本上进行了测试,因为该模块使用的平台提供的 API 非常少,早期版本应该很少有问题。

UncommonCrypto.swift 可以移植到更多平台。 如果操作系统有内置的加密 API,则可以使用它们来代替提供的 C 版本。 在 Apple 平台上,库使用 CommonCrypto 框架。 安全随机数生成器也应该被移植。

设置说明

用法示例

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 许可证 进行使用、分发和修改。