mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-23 14:50:42 +01:00
Added hash types to scriptsignature generators (#1219)
This commit is contained in:
parent
381251b687
commit
a09e976d66
2 changed files with 19 additions and 5 deletions
|
@ -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)
|
||||
```
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue