239 {
240 std::string addr_data;
241 bool r =
decode(addr, addr_data);
242 if (!r) return false;
243 if (addr_data.size() <= addr_checksum_size) return false;
244
245 std::string checksum(addr_checksum_size, '\0');
246 checksum = addr_data.substr(addr_data.size() - addr_checksum_size);
247
248 addr_data.resize(addr_data.size() - addr_checksum_size);
250 std::string expected_checksum(reinterpret_cast<const char*>(&hash), addr_checksum_size);
251 if (expected_checksum != checksum) return false;
252
254 if (read <= 0) return false;
255
256 data = addr_data.substr(read);
257 return true;
258 }
void cn_fast_hash(const void *data, size_t length, char *hash)