Sr25519.swift
shnorrkel 的 Swift 包装器 shnorrkel C 库。
安装
Sr25519.swift 部署到 macOS、iOS、tvOS、watchOS 和 Linux。它只测试了最新操作系统版本,但由于该模块使用的平台提供的 API 非常少,因此在较旧版本中应该很少有问题。
设置说明
-
Swift Package Manager:将其添加到
Package.swift
清单的依赖部分.package(url: "https://github.com/tesseract-one/Sr25519.swift.git", from: "0.2.0")
-
CocoaPods:将其放入您
Podfile
中pod 'Sr25519', '~> 0.2'
-
CocoaPods 与 Ed25519
如果要从源构建 Ed25519 部分,请在您的
Podfile
中添加此内容pod 'Sr25519/Sr25519', '~> 0.2' pod 'Sr25519/Ed25519', '~> 0.2'
使用示例
以下是一些展示库使用的示例。
使用密钥对签名和验证
import Sr25519
// Creating new KeyPair from random seed
let keypair = Sr25519KeyPair(seed: Sr25519Seed())
// Our message Data
let message = "Hello, World!".data(using: .utf8)!
// Signing
let signature = keypair.sign(message: message)
print("Signature:" signature)
// Validating signature
let valid = keypair.validate(message: message, signature: signature)
print("Is valid:", valid)
使用公钥验证
import Sr25519
// Creating PublicKey from Data
let pkey = try! Sr25519PublicKey(data: Data(repeating: 0, count: Sr25519PublicKey.size))
// Our message Data
let message = "Hello, World!".data(using: .utf8)!
// Signature
let signature = try! Sr25519Signature(data: Data(repeating: 0, count: Sr25519Signature.size))
// Validating
let valid = pkey.verify(message: message, signature: signature)
print("Is valid:", valid)
密钥派生
import Sr25519
// Creating new KeyPair from random seed
let keypair = Sr25519KeyPair(seed: Sr25519Seed())
// It's PublicKey
let pkey = keypair.publicKey
// Creating ChainCode for derivation from Data
let chaincode = try! Sr25519ChainCode(code: Data(repeating: 0, count: Sr25519ChainCode.size))
// Derive
let derived = keypair.derive(chainCode: chaincode, hard: true)
print("Hard derived PublicKey", derived.publicKey)
// Also soft derivation can be performed on PrivateKey directly
let pderived = pkey.derive(chainCode: chaincode)
print("Soft derived PublicKey", pderived)
可验证随机函数
import Sr25519
// Creating new KeyPair from random seed
let keypair = Sr25519KeyPair(seed: Sr25519Seed())
// Our message Data
let message = "Hello, World!".data(using: .utf8)!
// Default 0xFF filled threshold
let limit = Sr25519VrfThreshold()
// Signing
let (signature, isLess) = try! keypair.vrfSign(message: message, ifLessThan: limit)
print("Signature:", signature, "is less:", isLess)
// Verification
let valid = keypair.vrfVerify(message: message, signature: signature, threshold: limit)
print("Is valid:", valid)
许可证
Sr25519.swift 可在 Apache 2.0 许可协议 下使用、分发和修改。