Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}