예제 #1
0
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;
}
예제 #2
0
파일: wallet.c 프로젝트: aido/picocoin
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);
	}