From d6e1399c35d343ef07421c13b6148985d4216d0f Mon Sep 17 00:00:00 2001 From: "Nelson R. Perez" Date: Sun, 22 Apr 2018 21:38:05 -0500 Subject: [PATCH] Adding a diagram to better illustrate what the different bit flag combinations imply --- ch06.asciidoc | 6 ++++++ images/sighash_combinations.png | Bin 0 -> 21932 bytes 2 files changed, 6 insertions(+) create mode 100644 images/sighash_combinations.png diff --git a/ch06.asciidoc b/ch06.asciidoc index 34e6b4a1..dc1ecbe9 100644 --- a/ch06.asciidoc +++ b/ch06.asciidoc @@ -615,6 +615,12 @@ In addition, there is a modifier flag +SIGHASH_ANYONECANPAY+, which can be combi | SINGLE\|ANYONECANPAY | 0x83 | Signature applies to one input and the output with the same index number |======================= +These flag combinations are summarized in <> + +[[sighash_combinations]] +.Summary of different sighash combinations +image::images/sighash_combinations.png["Summary of different SIGHASH flag combinations"] + The way +SIGHASH+ flags are applied during signing and verification is that a copy of the transaction is made and certain fields within are truncated (set to zero length and emptied). The resulting transaction is serialized. The +SIGHASH+ flag is added to the end of the serialized transaction and the result is hashed. The hash itself is the "message" that is signed. Depending on which +SIGHASH+ flag is used, different parts of the transaction are truncated. The resulting hash depends on different subsets of the data in the transaction. By including the +SIGHASH+ as the last step before hashing, the signature commits the +SIGHASH+ type as well, so it can't be changed (e.g., by a miner). [NOTE] diff --git a/images/sighash_combinations.png b/images/sighash_combinations.png new file mode 100644 index 0000000000000000000000000000000000000000..9974e61f0931b80c79a2c78e9924852c0b1d5c2f GIT binary patch literal 21932 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