Added hash types to scriptsignature generators (#1219)

This commit is contained in:
Nadav Kohen 2020-03-11 21:25:21 -06:00 committed by GitHub
parent 381251b687
commit a09e976d66
2 changed files with 19 additions and 5 deletions

View file

@ -35,6 +35,8 @@ import org.bitcoins.testkit.core.gen.ScriptGenerators._
import org.scalacheck.Gen
import scodec.bits.ByteVector
import scala.concurrent.{Future, ExecutionContext, Await}
import scala.util._
@ -779,7 +781,9 @@ We must also create a generator for our `ScriptSignature` type, even if we did n
for {
privKey <- CryptoGenerators.privateKey
hash <- CryptoGenerators.doubleSha256Digest
signature = privKey.sign(hash)
hashType <- CryptoGenerators.hashType
signature = ECDigitalSignature.fromBytes(
privKey.sign(hash).bytes ++ ByteVector.fromByte(hashType.byte))
beforeTimeout <- NumberGenerator.bool
} yield P2PKWithTimeoutScriptSignature(beforeTimeout, signature)
```

View file

@ -26,6 +26,7 @@ import org.bitcoins.core.wallet.utxo.{
P2PKWithTimeoutSpendingInfo
}
import org.scalacheck.Gen
import scodec.bits.ByteVector
import scala.annotation.tailrec
import scala.concurrent.Await
@ -49,21 +50,28 @@ sealed abstract class ScriptGenerators extends BitcoinSLogger {
def p2pkScriptSignature: Gen[P2PKScriptSignature] =
for {
digitalSignature <- CryptoGenerators.digitalSignature
sig <- CryptoGenerators.digitalSignature
hashType <- CryptoGenerators.hashType
digitalSignature = ECDigitalSignature(
sig.bytes ++ ByteVector.fromByte(hashType.byte))
} yield P2PKScriptSignature(digitalSignature)
def p2pkhScriptSignature: Gen[P2PKHScriptSignature] =
for {
privKey <- CryptoGenerators.privateKey
hash <- CryptoGenerators.doubleSha256Digest
signature = privKey.sign(hash)
hashType <- CryptoGenerators.hashType
signature = ECDigitalSignature.fromBytes(
privKey.sign(hash).bytes ++ ByteVector.fromByte(hashType.byte))
} yield P2PKHScriptSignature(signature, privKey.publicKey)
def p2pkWithTimeoutScriptSignature: Gen[ConditionalScriptSignature] =
for {
privKey <- CryptoGenerators.privateKey
hash <- CryptoGenerators.doubleSha256Digest
signature = privKey.sign(hash)
hashType <- CryptoGenerators.hashType
signature = ECDigitalSignature.fromBytes(
privKey.sign(hash).bytes ++ ByteVector.fromByte(hashType.byte))
beforeTimeout <- NumberGenerator.bool
} yield P2PKWithTimeoutScriptSignature(beforeTimeout, signature)
@ -71,10 +79,12 @@ sealed abstract class ScriptGenerators extends BitcoinSLogger {
val signatures: Gen[Seq[ECDigitalSignature]] = for {
numKeys <- Gen.choose(1, Consensus.maxPublicKeysPerMultiSig)
hash <- CryptoGenerators.doubleSha256Digest
hashType <- CryptoGenerators.hashType
} yield for {
_ <- 0 until numKeys
privKey = ECPrivateKey()
} yield privKey.sign(hash)
} yield ECDigitalSignature.fromBytes(
privKey.sign(hash).bytes ++ ByteVector.fromByte(hashType.byte))
signatures.map(sigs => MultiSignatureScriptSignature(sigs))
}