static int script_push_pubkey(struct wallet *wallet, const uint160 *keyHash, struct buff *scriptSig) { size_t pkeylen; uint8 *pkey; struct key *k; k = wallet_lookup_pubkey(wallet, keyHash); if (k == NULL) { return 1; } key_get_pubkey(k, &pkey, &pkeylen); Log(LGPFX " pkeylen=%zu\n", pkeylen); script_push_data(scriptSig, pkey, pkeylen); free(pkey); return 0; }
static void wallet_save_key_cb(const void *key, size_t klen, void *clientData, void *keyData) { struct wallet_key *wkey = (struct wallet_key *)keyData; struct config *wcfg = (struct config *)clientData; uint8 *privkey; uint8 *pubkey; size_t privlen; size_t publen; char *privStr; char pubStr[256]; key_get_privkey(wkey->key, &privkey, &privlen); key_get_pubkey(wkey->key, &pubkey, &publen); privStr = b58_bytes_to_privkey(privkey, privlen); str_snprintf_bytes(pubStr, sizeof pubStr, NULL, pubkey, publen); config_setint64(wcfg, wkey->birth, "key%u.birth", wkey->cfg_idx); config_setstring(wcfg, wkey->desc, "key%u.desc", wkey->cfg_idx); config_setstring(wcfg, pubStr, "key%u.pubkey", wkey->cfg_idx); config_setbool(wcfg, wkey->spendable, "key%u.spendable", wkey->cfg_idx); if (btc->wallet->pass) { char *enc = wallet_encrypt_string(btc->wallet, privStr, btc->wallet->ckey); free(privStr); privStr = enc; } config_setstring(wcfg, privStr, "key%u.privkey", wkey->cfg_idx); free(pubkey); free(privkey); free(privStr); }