我正在 Swift 上为 iOS 制作 Hyperledger Sawtooth 客户端原型。
在此之前,我在 Java 上为 Android 做同样的事情。在 Java 实现中,使用 SpongyCastle 库可以轻松实现:生成密钥的函数如下所示:
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
密钥对并用它签署一个字节数组。
并使用它来签署字节数组:
Signature signature = Signature.getInstance("ECDSA", "SC");
signature.initSign(keyPair.getPrivate(), new SecureRandom());
signature.update(bytes);
byte[] signedBytes = signature.sign();
我搜索了“secp256k1 swift”并找到了这些库:
- https://github.com/Boilertalk/secp256k1.swift
- https://github.com/noxproject/ASKSecp256k1
- https://github.com/pebble8888/secp256k1swift
- https://github.com/skywinder/ios-secp256k1
它们都是 bitcoin-core 的 secp256k1 库与 Swift 的绑定。
我可以做类似let kp = KeyPair("secp256k1")
的东西let signedBytes = kp.sign(bytes)
吗?如果是,那么如何,如果不是,那么还有其他方法可以做到吗?