下载https://github.com/beyonderyue/ios-secp256k1项目代码或者使用Git下载

git clone https://github.com/beyonderyue/ios-secp256k1.git

打开终端执行 ./secp256k1.sh

完成之后会在项目目录的framework文件夹下生成secp256k1.framework,把secp256k1.framework导入项目

最后引入对应的头文件:

#import <secp256k1/secp256k1.h>

 

一、生成32字节(256位)的私钥

uint8_t seed[32];
randomUint8(seed, sizeof(seed));//随机生成私钥

二、创建secp256k1_context与验证私钥

secp256k1_context *context = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
secp256k1_context_randomize(context, seed);  //随机化
secp256k1_ec_seckey_verify(context, seed);   //验证私钥是否有效

三、创建根据私钥生成公钥

secp256k1_pubkey p_pubkey;
memset(&p_pubkey, 0, sizeof(p_pubkey));
secp256k1_ec_pubkey_create(context, &p_pubkey, seed);  

四、使用私钥签名

secp256k1_ecdsa_sign(context, &sig, hash, seed, secp256k1_nonce_function_rfc6979,  nullptr);
实际是对数据的sha256哈希值签名

五、使用公钥校验签名

secp256k1_ecdsa_verify(context, &sig, hash, &p_pubkey);

六、序列化公钥

unsigned char result[65] = {0};
size_t clen = sizeof(result);
secp256k1_ec_pubkey_serialize(context, result, &clen, &p_pubkey, SECP256K1_EC_COMPRESSED); 

七、反序列化公钥

secp256k1_pubkey p_a_pubkey;
secp256k1_ec_pubkey_parse(context, &p_a_pubkey, result, clen);

八、序列化签名摘要

unsigned char vchSig[72];
size_t nSigLen = sizeof(vchSig);
secp256k1_ecdsa_signature_serialize_der(context, vchSig, &nSigLen, &sig);
打赏
IOS使用比特币 secp256k1 库实现椭圆曲线算法
Tagged on:

发表评论