|
|
|
@ -28,6 +28,10 @@ var (
|
|
|
|
|
type Signature interface { |
|
|
|
|
// Serialize returns a DER-encoded ECDSA signature.
|
|
|
|
|
Serialize() []byte |
|
|
|
|
|
|
|
|
|
// Verify return true if the ECDSA signature is valid for the passed
|
|
|
|
|
// message digest under the provided public key.
|
|
|
|
|
Verify([]byte, *btcec.PublicKey) bool |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// WitnessScriptHash generates a pay-to-witness-script-hash public key script
|
|
|
|
@ -290,7 +294,7 @@ func SenderHtlcSpendRevokeWithKey(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// manner in order to encode the revocation contract into a sig+key
|
|
|
|
|
// pair.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = revokeKey.SerializeCompressed() |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -339,7 +343,7 @@ func SenderHtlcSpendRedeem(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// generated above under the receiver's public key, and the payment
|
|
|
|
|
// pre-image.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = paymentPreimage |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -367,7 +371,7 @@ func SenderHtlcSpendTimeout(receiverSig Signature,
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 5)) |
|
|
|
|
witnessStack[0] = nil |
|
|
|
|
witnessStack[1] = append(receiverSig.Serialize(), byte(receiverSigHash)) |
|
|
|
|
witnessStack[2] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[2] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[3] = nil |
|
|
|
|
witnessStack[4] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -535,7 +539,7 @@ func ReceiverHtlcSpendRedeem(senderSig Signature,
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 5)) |
|
|
|
|
witnessStack[0] = nil |
|
|
|
|
witnessStack[1] = append(senderSig.Serialize(), byte(senderSigHash)) |
|
|
|
|
witnessStack[2] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[2] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[3] = paymentPreimage |
|
|
|
|
witnessStack[4] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -562,7 +566,7 @@ func ReceiverHtlcSpendRevokeWithKey(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// witness stack in order to force script execution to the HTLC
|
|
|
|
|
// revocation clause.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = revokeKey.SerializeCompressed() |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -627,7 +631,7 @@ func ReceiverHtlcSpendTimeout(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = nil |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -732,7 +736,7 @@ func HtlcSpendSuccess(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// witness script), in order to force execution to the second portion
|
|
|
|
|
// of the if clause.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = nil |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -757,7 +761,7 @@ func HtlcSpendRevoke(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// witness script), in order to force execution to the revocation
|
|
|
|
|
// clause in the second level HTLC script.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = []byte{1} |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -788,7 +792,7 @@ func HtlcSecondLevelSpend(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// witness script), in order to force execution to the second portion
|
|
|
|
|
// of the if clause.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(txscript.SigHashAll)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(txscript.SigHashAll)) |
|
|
|
|
witnessStack[1] = nil |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -892,7 +896,7 @@ func CommitSpendTimeout(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// place an empty byte in order to ensure our script is still valid
|
|
|
|
|
// from the PoV of nodes that are enforcing minimal OP_IF/OP_NOTIF.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = nil |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -917,7 +921,7 @@ func CommitSpendRevoke(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// Place a 1 as the first item in the evaluated witness stack to
|
|
|
|
|
// force script execution to the revocation clause.
|
|
|
|
|
witnessStack := wire.TxWitness(make([][]byte, 3)) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = []byte{1} |
|
|
|
|
witnessStack[2] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
@ -951,7 +955,7 @@ func CommitSpendNoDelay(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// exact same as a regular p2wkh witness, depending on the value of the
|
|
|
|
|
// tweakless bool.
|
|
|
|
|
witness := make([][]byte, 2) |
|
|
|
|
witness[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witness[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
|
|
|
|
|
switch tweakless { |
|
|
|
|
// If we're tweaking the key, then we use the tweaked public key as the
|
|
|
|
@ -1028,7 +1032,7 @@ func CommitSpendToRemoteConfirmed(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
// Finally, we'll manually craft the witness. The witness here is the
|
|
|
|
|
// signature and the redeem script.
|
|
|
|
|
witnessStack := make([][]byte, 2) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
|
return witnessStack, nil |
|
|
|
@ -1084,7 +1088,7 @@ func CommitSpendAnchor(signer Signer, signDesc *SignDescriptor,
|
|
|
|
|
|
|
|
|
|
// The witness here is just a signature and the redeem script.
|
|
|
|
|
witnessStack := make([][]byte, 2) |
|
|
|
|
witnessStack[0] = append(sweepSig, byte(signDesc.HashType)) |
|
|
|
|
witnessStack[0] = append(sweepSig.Serialize(), byte(signDesc.HashType)) |
|
|
|
|
witnessStack[1] = signDesc.WitnessScript |
|
|
|
|
|
|
|
|
|
return witnessStack, nil |
|
|
|
|