Sr25519.swift
Shnorrkel 的 Swift 封装,基于 shnorrkel 和 C 库。
安装
Sr25519.swift 可以部署到 macOS、iOS、tvOS、watchOS 和 Linux。它只在最新操作系统版本上进行了测试,因为该模块使用的平台 API 非常少,所以应该与早期版本存在很少的问题。
设置说明
-
Swift 包管理器:将以下内容添加到您的
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 许可证下使用、分发和修改。