ios - SECP256K1 使用 SawTooth Swift

标签 ios swift sdk

我正在尝试使用来自 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构造函数(即在自己的 Secp256k1() 中调用 init ),导致崩溃。

这是解决方案的可能变体(经过测试并与 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)
    }
}

关于ios - SECP256K1 使用 SawTooth Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60809750/

相关文章:

iphone - UITextView 只是水平滚动帮助

ios - 如何使用 AVFoundation 框架捕获图像?

iphone - 我的导航栏没有被隐藏,为什么?

ios - 如何按对象的多个属性对自定义对象列表进行排序

android - 使用 1.7 需要使用 Android Build Tools 版本 19 或更高版本

android - 添加 oneSignal 插件 cordova - Ionic 2

ios - NSURLRequest:如何处理重定向的帖子?

php - 如何在 Swift 中处理 PHP 错误

ios - 如何根据我的以下示例从 URL 字符串中获取子字符串?

iphone - GameCenter - 登出玩家