void btc_pubkey_get_hash160(const btc_pubkey* pubkey, uint160 hash160) { uint256 hashout; btc_hash_sngl_sha256(pubkey->pubkey, pubkey->compressed ? BTC_ECKEY_COMPRESSED_LENGTH : BTC_ECKEY_UNCOMPRESSED_LENGTH, hashout); ripemd160(hashout, sizeof(hashout), hash160); }
bool DBBComServer::generateNewKey() { // generate new private key btc_key key; btc_privkey_init(&key); btc_privkey_gen(&key); assert(btc_privkey_is_valid(&key) == 1); // derive pubkey btc_pubkey pubkey; btc_pubkey_init(&pubkey); btc_pubkey_from_key(&key, &pubkey); assert(btc_pubkey_is_valid(&pubkey) == 1); // remove the current enc key encryptionKey.clear(); // copy over the privatekey and clean libbtc privkey std::copy(key.privkey,key.privkey+BTC_ECKEY_PKEY_LENGTH,std::back_inserter(encryptionKey)); btc_privkey_cleanse(&key); // generate hash160(hash(pubkey)) // create base58c string with 0x91 as base58 identifier size_t len = 67; uint8_t hashout[32]; uint8_t hash160[21]; hash160[0] = CHANNEL_ID_BASE58_PREFIX; btc_hash_sngl_sha256(pubkey.pubkey, BTC_ECKEY_COMPRESSED_LENGTH, hashout); ripemd160(hashout, 32, hash160+1); // make enought space for the base58c channel ID channelID.resize(100); int sizeOut = btc_base58_encode_check(hash160, 21, &channelID[0], channelID.size()); channelID.resize(sizeOut-1); return true; }