Я делаю прототип клиента Hyperledger Sawtooth для iOS на Swift.
До этого я делал то же самое для Android на Java. В 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
Все они являются привязками библиотеки secp256k1 bitcoin-core к Swift.
Могу ли я сделать что-то вроде let kp = KeyPair("secp256k1")
, let signedBytes = kp.sign(bytes)
? Если да, то как, а если нет, то есть ли другие способы сделать это?