此库是 Rapidsnark 的 Swift 封装。它允许在 iOS 环境中生成交证的特定电路。
iOS:与任何 64 位架构的 iOS 设备兼容。
模拟器版本未经汇编优化构建,性能较慢。
macOS:尚未支持。
- iOS 12.0+
rapidsnark 通过 CocoaPods 和 SPM 可用。要安装它,只需将以下行添加到您的 Podfile
pod 'rapidsnark'
或将其添加到 XCode 中项目的 SPM 依赖项。
该函数接收 .zkey 文件路径和见证文件(作为 base64 编码的字符串)的路径,并返回证明和公共信号。
直接从文件系统中读取 .zkey 文件。
import rapidsnark
// ...
let zkeyPath = "path/to/zkey";
let wtns = PackageManager.default.contents(atPath: "path/to/wtns")?.base64EncodedString(options: .endLineWithLineFeed);
let (proof, publicSignals) = groth16ProveWithZKeyFilePath(zkeyPath, wtns);
验证证明和公共信号是否与验证密钥匹配。
import rapidsnark
// ...
let zkey = PackageManager.default.contents(atPath: "path/to/zkey")?.base64EncodedString(options: .endLineWithLineFeed);
let wtns = PackageManager.default.contents(atPath: "path/to/wtns")?.base64EncodedString(options: .endLineWithLineFeed);
let verificationKey = PackageManager.default.contents(atPath: "path/to/verification_key")?.base64EncodedString(options: .endLineWithLineFeed);
let (proof, publicSignals) = await groth16Prove(zkey, wtns);
let proofValid = groth16Verify(proof, publicSignals, verificationKey);
接收 zkey 和 witness 文件编码为 base64。
proof
和 publicSignals
是 base64 编码的字符串。
大型电路可能导致 OOM。请谨慎使用。
import rapidsnark
// ...
let zkey = PackageManager.default.contents(atPath: "path/to/zkey")?.base64EncodedString(options: .endLineWithLineFeed);
let wtns = PackageManager.default.contents(atPath: "path/to/wtns")?.base64EncodedString(options: .endLineWithLineFeed);
let (proof, publicSignals) = await groth16Prove(zkey, wtns);
为指定的 zkey 计算公共缓冲区大小。
import rapidsnark
// ...
let publicBufferSize = await groth16PublicSizeForZkeyFile("path/to/zkey");
groth16Prove
和 groth16ProveWithZKeyFilePath
都有可选的 proofBufferSize
、publicBufferSize
和 errorBufferSize
参数。如果 publicBufferSize
太小,则库将自动计算。
这些参数用于设置用于存储证明、公共信号和错误的缓冲区的大小。
如果有嵌入式电路在应用中,建议一次计算公共缓冲区大小并重复使用。要计算公共缓冲区的大小,请调用 groth16PublicSizeForZkeyFile
。
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
。然后,在 XCode 中打开 rapidsnark.xcworkspace
文件,并在 iOS 设备或模拟器上运行它。
react-native-rapidsnark 是 iden3 项目 0KIMS 协会的部分。请参阅 COPYING 文件以获取更多详细信息。