[英]SECP256K1 using SawTooth Swift
我正在嘗試使用 Sawtooth SDK 中的Sawtooth SDK簽署簽名並進行驗證。 查看文檔,我遵循了但它沒有工作。
import SawtoothSigning
public class Secp256k1 {
private var signer: Signer
private var privateKey: PrivateKey
private var context = Secp256k1Context() //Here it crashed with error Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeeda61ff8)
public func sign(message: [UInt8]) -> String {
var result = ""
do {
result = try signer.sign(data: message)
} catch {
print("Error signing")
}
return result
}
public func getPrivateKey() -> PrivateKey {
if let privateKey = UserDefaults.standard.string(forKey: "privateKey") {
return Secp256k1PrivateKey.fromHex(hexPrivKey: privateKey)
} else {
let privateKey = context.newRandomPrivateKey()
UserDefaults.standard.set(privateKey.hex(), forKey: "privateKey" )
do {
let pubKey = try context.getPublicKey(privateKey: privateKey)
UserDefaults.standard.set(pubKey.hex(), forKey: "publicKey" )
} catch {
if #available(iOS 10.0, *) {
print("Error creating public key")
}
}
return privateKey
}
}
public init() {
self.privateKey = Secp256k1().getPrivateKey()
self.signer = Signer(context: context, privateKey: self.privateKey)
}
}
有沒有人使用過這個 SDK 並且知道它為什么會崩潰? 或者有沒有更簡單的SDK?
您已經循環Secp256k1
構造函數(即在自己的init
中調用Secp256k1()
),這會導致崩潰。
這是解決方案的可能變體(經過測試並與 Xcode 11.4 一起使用):
public class Secp256k1 {
private var signer: Signer
private var privateKey: PrivateKey
private static var context = Secp256k1Context() // << shared !!
public func sign(message: [UInt8]) -> String {
var result = ""
do {
result = try signer.sign(data: message)
} catch {
print("Error signing")
}
return result
}
public static func getPrivateKey() -> PrivateKey { // << shared !!
if let privateKey = UserDefaults.standard.string(forKey: "privateKey") {
return Secp256k1PrivateKey.fromHex(hexPrivKey: privateKey)
} else {
let privateKey = context.newRandomPrivateKey()
UserDefaults.standard.set(privateKey.hex(), forKey: "privateKey" )
do {
let pubKey = try context.getPublicKey(privateKey: privateKey)
UserDefaults.standard.set(pubKey.hex(), forKey: "publicKey" )
} catch {
if #available(iOS 10.0, *) {
print("Error creating public key")
}
}
return privateKey
}
}
public init() {
self.privateKey = Secp256k1.getPrivateKey() // no cycle now !!
self.signer = Signer(context: Secp256k1.context, privateKey: self.privateKey)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.