mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-17 19:03:42 +01:00
common/shutdown_scriptpubkey: extract shutdown scriptpubkey test.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
ebb1b19c65
commit
66dda32da2
@ -71,6 +71,7 @@ COMMON_SRC_NOGEN := \
|
||||
common/read_peer_msg.c \
|
||||
common/route.c \
|
||||
common/setup.c \
|
||||
common/shutdown_scriptpubkey.c \
|
||||
common/socket_close.c \
|
||||
common/sphinx.c \
|
||||
common/status.c \
|
||||
|
10
common/shutdown_scriptpubkey.c
Normal file
10
common/shutdown_scriptpubkey.c
Normal file
@ -0,0 +1,10 @@
|
||||
#include <bitcoin/script.h>
|
||||
#include <common/shutdown_scriptpubkey.h>
|
||||
|
||||
bool valid_shutdown_scriptpubkey(const u8 *scriptpubkey)
|
||||
{
|
||||
return is_p2pkh(scriptpubkey, NULL)
|
||||
|| is_p2sh(scriptpubkey, NULL)
|
||||
|| is_p2wpkh(scriptpubkey, NULL)
|
||||
|| is_p2wsh(scriptpubkey, NULL);
|
||||
}
|
21
common/shutdown_scriptpubkey.h
Normal file
21
common/shutdown_scriptpubkey.h
Normal file
@ -0,0 +1,21 @@
|
||||
#ifndef LIGHTNING_COMMON_SHUTDOWN_SCRIPTPUBKEY_H
|
||||
#define LIGHTNING_COMMON_SHUTDOWN_SCRIPTPUBKEY_H
|
||||
#include "config.h"
|
||||
#include <ccan/short_types/short_types.h>
|
||||
|
||||
/* BOLT #2:
|
||||
*
|
||||
* 1. `OP_DUP` `OP_HASH160` `20` 20-bytes `OP_EQUALVERIFY` `OP_CHECKSIG`
|
||||
* (pay to pubkey hash), OR
|
||||
* 2. `OP_HASH160` `20` 20-bytes `OP_EQUAL` (pay to script hash), OR
|
||||
* 3. `OP_0` `20` 20-bytes (version 0 pay to witness pubkey), OR
|
||||
* 4. `OP_0` `32` 32-bytes (version 0 pay to witness script hash)
|
||||
*
|
||||
* A receiving node:
|
||||
*...
|
||||
* - if the `scriptpubkey` is not in one of the above forms:
|
||||
* - SHOULD fail the connection.
|
||||
*/
|
||||
bool valid_shutdown_scriptpubkey(const u8 *scriptpubkey);
|
||||
|
||||
#endif /* LIGHTNING_COMMON_SHUTDOWN_SCRIPTPUBKEY_H */
|
@ -120,6 +120,7 @@ LIGHTNINGD_COMMON_OBJS := \
|
||||
common/pseudorand.o \
|
||||
common/random_select.o \
|
||||
common/setup.o \
|
||||
common/shutdown_scriptpubkey.o \
|
||||
common/sphinx.o \
|
||||
common/status_wire.o \
|
||||
common/timeout.o \
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <common/memleak.h>
|
||||
#include <common/per_peer_state.h>
|
||||
#include <common/psbt_open.h>
|
||||
#include <common/shutdown_scriptpubkey.h>
|
||||
#include <common/timeout.h>
|
||||
#include <common/tx_roles.h>
|
||||
#include <common/utils.h>
|
||||
@ -237,21 +238,7 @@ static void peer_got_shutdown(struct channel *channel, const u8 *msg)
|
||||
tal_free(channel->shutdown_scriptpubkey[REMOTE]);
|
||||
channel->shutdown_scriptpubkey[REMOTE] = scriptpubkey;
|
||||
|
||||
/* BOLT #2:
|
||||
*
|
||||
* 1. `OP_DUP` `OP_HASH160` `20` 20-bytes `OP_EQUALVERIFY` `OP_CHECKSIG`
|
||||
* (pay to pubkey hash), OR
|
||||
* 2. `OP_HASH160` `20` 20-bytes `OP_EQUAL` (pay to script hash), OR
|
||||
* 3. `OP_0` `20` 20-bytes (version 0 pay to witness pubkey), OR
|
||||
* 4. `OP_0` `32` 32-bytes (version 0 pay to witness script hash)
|
||||
*
|
||||
* A receiving node:
|
||||
*...
|
||||
* - if the `scriptpubkey` is not in one of the above forms:
|
||||
* - SHOULD fail the connection.
|
||||
*/
|
||||
if (!is_p2pkh(scriptpubkey, NULL) && !is_p2sh(scriptpubkey, NULL)
|
||||
&& !is_p2wpkh(scriptpubkey, NULL) && !is_p2wsh(scriptpubkey, NULL)) {
|
||||
if (!valid_shutdown_scriptpubkey(scriptpubkey)) {
|
||||
channel_fail_permanent(channel,
|
||||
REASON_PROTOCOL,
|
||||
"Bad shutdown scriptpubkey %s",
|
||||
|
Loading…
Reference in New Issue
Block a user