Esempio n. 1
0
BCW_API bool hd_private_key::set_serialized(std::string encoded)
{
    if (!is_base58(encoded))
        return false;
    const data_chunk decoded = decode_base58(encoded);
    if (decoded.size() != serialized_length)
        return false;
    if (!verify_checksum(decoded))
        return false;

    auto ds = make_deserializer(decoded.begin(), decoded.end());
    auto prefix = ds.read_big_endian<uint32_t>();
    if (prefix != mainnet_private_prefix && prefix != testnet_private_prefix)
        return false;

    valid_ = true;
    lineage_.testnet = prefix == testnet_private_prefix;
    lineage_.depth = ds.read_byte();
    lineage_.parent_fingerprint = ds.read_little_endian<uint32_t>();
    lineage_.child_number = ds.read_big_endian<uint32_t>();
    c_ = ds.read_bytes<chain_code_size>();
    ds.read_byte();
    k_ = ds.read_bytes<ec_secret_size>();
    K_ = secret_to_public_key(k_);
    return true;
}
Esempio n. 2
0
bool is_base58(const std::string& text)
{
    const auto test = [](const char ch)
    {
        return is_base58(ch);
    };

    return std::all_of(text.begin(), text.end(), test);
}
Esempio n. 3
0
		bool payment_address::set_encoded(const std::string& encoded_address)
		{
			if (!is_base58(encoded_address))
				return false;
			const data_chunk decoded_address = decode_base58(encoded_address);
			// version + 20 bytes short hash + 4 bytes checksum
			if (decoded_address.size() != 25)
				return false;
			if (!verify_checksum(decoded_address))
				return false;

			version_ = decoded_address[0];
			std::copy_n(decoded_address.begin() + 1, hash_.size(), hash_.begin());
			return true;
		}
Esempio n. 4
0
		bool is_base58(const std::string& text)
		{
			return std::all_of(text.begin(), text.end(),
				[](const char c){ return is_base58(c); });
		}