mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-26 18:34:39 +01:00
channeld: fix make_revocation_msg() to take index of revoke.
It currently takes index + 1 (ie. current commit), which is confusing in this context. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
1679f2da06
commit
d411b07ba2
@@ -633,23 +633,23 @@ static void start_commit_timer(struct peer *peer)
|
||||
send_commit, peer);
|
||||
}
|
||||
|
||||
static u8 *make_revocation_msg(const struct peer *peer, u64 commit_index)
|
||||
static u8 *make_revocation_msg(const struct peer *peer, u64 revoke_index)
|
||||
{
|
||||
struct pubkey oldpoint, point;
|
||||
struct sha256 old_commit_secret;
|
||||
|
||||
/* Get N-1th secret. */
|
||||
per_commit_secret(&peer->shaseed, &old_commit_secret, commit_index-1);
|
||||
/* Get secret. */
|
||||
per_commit_secret(&peer->shaseed, &old_commit_secret, revoke_index);
|
||||
|
||||
/* Sanity check that it corresponds to the point we sent. */
|
||||
pubkey_from_privkey((struct privkey *)&old_commit_secret, &point);
|
||||
if (!per_commit_point(&peer->shaseed, &oldpoint, commit_index-1))
|
||||
if (!per_commit_point(&peer->shaseed, &oldpoint, revoke_index))
|
||||
status_failed(WIRE_CHANNEL_CRYPTO_FAILED,
|
||||
"Invalid point %"PRIu64" for commit_point",
|
||||
commit_index-1);
|
||||
revoke_index);
|
||||
|
||||
status_trace("Sending revocation #%"PRIu64" for %s",
|
||||
commit_index-1,
|
||||
revoke_index,
|
||||
type_to_string(trc, struct pubkey, &oldpoint));
|
||||
|
||||
if (!pubkey_eq(&point, &oldpoint))
|
||||
@@ -658,8 +658,8 @@ static u8 *make_revocation_msg(const struct peer *peer, u64 commit_index)
|
||||
tal_hexstr(trc, &old_commit_secret,
|
||||
sizeof(old_commit_secret)));
|
||||
|
||||
/* Send N+1th point. */
|
||||
if (!per_commit_point(&peer->shaseed, &point, commit_index+1))
|
||||
/* We're revoking N-1th commit, sending N+1th point. */
|
||||
if (!per_commit_point(&peer->shaseed, &point, revoke_index+2))
|
||||
status_failed(WIRE_CHANNEL_CRYPTO_FAILED,
|
||||
"Deriving next commit_point");
|
||||
|
||||
@@ -670,9 +670,10 @@ static u8 *make_revocation_msg(const struct peer *peer, u64 commit_index)
|
||||
/* We come back here once master has acked the commit_sig we received */
|
||||
static struct io_plan *send_revocation(struct io_conn *conn, struct peer *peer)
|
||||
{
|
||||
u8 *msg = make_revocation_msg(peer, peer->commit_index[LOCAL]);
|
||||
/* Revoke previous commit. */
|
||||
u8 *msg = make_revocation_msg(peer, peer->commit_index[LOCAL]-1);
|
||||
|
||||
/* From now on we apply to the next commitment */
|
||||
/* From now on we apply changes to the next commitment */
|
||||
peer->commit_index[LOCAL]++;
|
||||
|
||||
/* If this queues more changes on the other end, send commit. */
|
||||
@@ -1343,7 +1344,8 @@ static void peer_conn_broken(struct io_conn *conn, struct peer *peer)
|
||||
|
||||
static void resend_revoke(struct peer *peer)
|
||||
{
|
||||
u8 *msg = make_revocation_msg(peer, peer->commit_index[LOCAL]-1);
|
||||
/* Current commit is peer->commit_index[LOCAL]-1, revoke prior */
|
||||
u8 *msg = make_revocation_msg(peer, peer->commit_index[LOCAL]-2);
|
||||
msg_enqueue(&peer->peer_out, take(msg));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user