bool verify_checksum(data_slice data) { if (data.size() < checksum_size) return false; data_slice body(data.begin(), data.end() - checksum_size); auto checksum = from_little_endian_unsafe<uint32_t>(data.end() - checksum_size); return bitcoin_checksum(body) == checksum; }
data_chunk create_raw_message(const Message& packet) { data_chunk payload(satoshi_raw_size(packet)); satoshi_save(packet, payload.begin()); // Make the header packet and serialise it header_type head; head.magic = magic_value(); head.command = satoshi_command(packet); head.payload_length = static_cast<uint32_t>(payload.size()); head.checksum = bitcoin_checksum(payload); data_chunk raw_header(satoshi_raw_size(head)); satoshi_save(head, raw_header.begin()); // Construct completed packet with header + payload data_chunk whole_message = raw_header; extend_data(whole_message, payload); // Probably not the right place for this // Networking output in an exporter log_debug(LOG_NETWORK) << "s: " << head.command << " (" << payload.size() << " bytes)"; return whole_message; }
void append_checksum(data_chunk& data) { const auto checksum = bitcoin_checksum(data); extend_data(data, to_little_endian(checksum)); }
BC_API bool verify_checksum(const data_chunk& data) { data_chunk body(data.begin(), data.end() - 4); auto checksum = from_little_endian<uint32_t>(data.end() - 4); return bitcoin_checksum(body) == checksum; }
BC_API void append_checksum(data_chunk& data) { uint32_t checksum = bitcoin_checksum(data); extend_data(data, to_little_endian(checksum)); }