Bitcoin-Core

libsecp256k1中與G的基本點乘法

  • April 19, 2020

我正在嘗試使用比特幣核心 secp256k1 庫制定一個最小的範例,但由於可用的選項很多,我有點迷失了。具體來說,我只是想使用 libsecp256k1 將標准定義的生成點 G 與整數 k 相乘,即H = k*G.

到目前為止,我發現secp256k1_scalar_mul,它將兩個標量secp256k1_fe_mul相乘,並將兩個欄位元素相乘,而 close 兩者都不是我想要的。所以我想知道是否有人可以指出 libsecp256k1 中的合適函式?

謝謝!

請記住,正如 Pieter Wuille 所說,所有公開的功能(只有您需要使用的功能)都在include/secp256k1.h

你可以secp256k1_ec_pubkey_create這樣使用:

secp256k1_context *sign = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
secp256k1_pubkey pubkey;

// Here our private key is 1, little endian
const unsigned char seckey[32] = {1};

if (!secp256k1_ec_pubkey_create(sign, &pubkey, seckey)) {
   // Private key out of range
   // abort!
   secp256k1_context_destroy(sign);
   exit(1);
}

// Use 65 and SECP256K1_EC_UNCOMPRESSED for uncompressed public key
unsigned char outpubkey[33];
size_t written_bytes = 33;
secp256k1_ec_pubkey_serialize(sign, outpubkey, &written_bytes, &pubkey, SECP256K1_EC_COMPRESSED);

printf("Public key: ");

for (int i = 0; i < 33; i++) {
   printf("%.2x", (unsigned int) outpubkey[i]);
}

printf("\n");

secp256k1_context_destroy(sign);

可以使用ThePiachu 的工具和私鑰驗證誰的輸出0100000000000000000000000000000000000000000000000000000000000000

引用自:https://bitcoin.stackexchange.com/questions/95342