static bool key_eq(const struct bp_key *key1, const struct bp_key *key2) { void *data1, *data2; size_t len1, len2; int ret; if (!bp_privkey_get(key1, &data1, &len1)) return false; if (!bp_privkey_get(key2, &data2, &len2)){ free(data1); return false; } if (len1 != len2) { free(data2); free(data1); return false; } ret = memcmp(data1, data2, len1); free(data1); free(data2); return ret == 0; }
cstring *ser_wallet(const struct wallet *wlt) { struct bp_key *key; cstring *rs = cstr_new_sz(20 * 1024); /* * ser "root" record */ { cstring *s_root = ser_wallet_root(wlt); cstring *recdata = message_str(wlt->chain->netmagic, "root", s_root->str, s_root->len); cstr_append_buf(rs, recdata->str, recdata->len); cstr_free(recdata, true); cstr_free(s_root, true); } /* ser "privkey" records */ wallet_for_each_key(wlt, key) { void *privkey = NULL; size_t pk_len = 0; bp_privkey_get(key, &privkey, &pk_len); cstring *recdata = message_str(wlt->chain->netmagic, "privkey", privkey, pk_len); free(privkey); cstr_append_buf(rs, recdata->str, recdata->len); cstr_free(recdata, true); }