首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECDSA secp256k1密钥生成及Swift签名

ECDSA secp256k1密钥生成及Swift签名
EN

Stack Overflow用户
提问于 2018-05-18 12:03:15
回答 2查看 4.4K关注 0票数 3

我正在为Swift上的iOS制作Hyperledger锯齿客户端原型。

在此之前,我在Java上对Android做了同样的工作。在Java实现中,使用SpongyCastle库:函数生成键很容易,如下所示:

代码语言:javascript
复制
public static KeyPair getKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECDSA", "SC");
        ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp256k1");
        keyPairGenerator.initialize(ecGenParameterSpec, new SecureRandom());
        return keyPairGenerator.generateKeyPair();
    }

我需要在Swift做同样的事情:

secp256k1 生成键区,并使用对字节数组进行签名。

并使用它对字节数组进行签名:

代码语言:javascript
复制
        Signature signature = Signature.getInstance("ECDSA", "SC");
        signature.initSign(keyPair.getPrivate(), new SecureRandom());
        signature.update(bytes);
        byte[] signedBytes = signature.sign();

我在googled上搜索了"secp256k1斯威夫特“,并找到了以下库:

所有这些都是比特币核心的secp256k1库与Swift的绑定。

我能做一些像let kp = KeyPair("secp256k1")let signedBytes = kp.sign(bytes)这样的东西吗?如果是,那怎么做,如果没有,还有其他方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 11:03:55

我找到了解决办法。是BitcoinKit框架。我在安装Carthage时遇到了一些问题,但是Cocoapods +安装错误消息中缺少的一些工具效果很好。

票数 5
EN

Stack Overflow用户

发布于 2019-03-09 23:02:56

您可以始终使用C绑定,但随后必须使用UnsafePointers和Bytes,我假设您正在寻找合适的包装器。因此,我找到了这个锯齿-快速-sdk,它似乎通过boilertalk使用secp256k1库,而boilertalk又导入了广泛使用的比特币-核心/libsecp256k1。它允许类似于您要求的内容(根据文档):

代码语言:javascript
复制
import SawtoothSigning

let context = Secp256k1Context()
let privateKey = context.newRandomPrivateKey()
let signer = Signer(context: context, privateKey: privateKey)

let signature = signer.sign(data: message_bytes)

我想它很快就会被列为官方认可的sdk,正如这个锯齿RFC所指出的那样。唯一缺少的东西就是提供生成的protobuf类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50410946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档