Merge remote-tracking branch 'origin/pr/25'

This commit is contained in:
Rusty Russell 2016-06-25 14:19:57 +09:30
commit 6bbd05c001
3 changed files with 11 additions and 2 deletions

View File

@ -809,7 +809,6 @@ Pkt *accept_pkt_revocation(struct peer *peer, const Pkt *pkt)
* SHA256 hash of `revocation_preimage` matches the previous commitment
* transaction, and MUST fail if it does not.
*/
/* FIXME: Save preimage in shachain too. */
if (!check_preimage(r->revocation_preimage, &ci->revocation_hash))
return pkt_err(peer, "complete preimage incorrect");
@ -819,6 +818,9 @@ Pkt *accept_pkt_revocation(struct peer *peer, const Pkt *pkt)
proto_to_sha256(r->revocation_preimage, ci->revocation_preimage);
// save revocation preimages in shachain
shachain_add_hash(&peer->their_preimages, 0xFFFFFFFFFFFFFFFFL - ci->commit_num, ci->revocation_preimage);
/* Save next revocation hash. */
proto_to_sha256(r->next_revocation_hash,
&peer->remote.next_revocation_hash);

View File

@ -11,6 +11,7 @@
#include "netaddr.h"
#include "state.h"
#include <ccan/crypto/sha256/sha256.h>
#include <ccan/crypto/shachain/shachain.h>
#include <ccan/list/list.h>
#include <ccan/time/time.h>
@ -214,6 +215,9 @@ struct peer {
/* Stuff we have in common. */
struct peer_visible_state local, remote;
/* this is where we will store their revocation preimages*/
struct shachain their_preimages;
};
void setup_listeners(struct lightningd_state *dstate, unsigned int portnum);

View File

@ -147,12 +147,15 @@ void peer_secrets_init(struct peer *peer)
if (RAND_bytes(peer->secrets->revocation_seed.u.u8,
sizeof(peer->secrets->revocation_seed.u.u8)) != 1)
fatal("Could not get random bytes for revocation seed");
shachain_init(&peer->their_preimages);
}
void peer_get_revocation_preimage(const struct peer *peer, u64 index,
struct sha256 *preimage)
{
shachain_from_seed(&peer->secrets->revocation_seed, index, preimage);
// generate hashes in reverse order, otherwise the first hash gives away everything
shachain_from_seed(&peer->secrets->revocation_seed, 0xFFFFFFFFFFFFFFFFL - index, preimage);
}
void peer_get_revocation_hash(const struct peer *peer, u64 index,