Пример #1
0
 /**
  * @param \BitWasp\Bitcoin\Crypto\EcAdapter\Signature\SignatureInterface[] $signatures
  * @param \BitWasp\Bitcoin\Crypto\EcAdapter\Key\PublicKeyInterface[] $publicKeys
  * @param BufferInterface $messageHash
  * @return \SplObjectStorage
  */
 public function link(array $signatures, array $publicKeys, BufferInterface $messageHash)
 {
     $sigCount = count($signatures);
     $storage = new \SplObjectStorage();
     foreach ($signatures as $signature) {
         foreach ($publicKeys as $key) {
             if ($this->ecAdapter->verify($messageHash, $key, $signature)) {
                 $storage->attach($key, $signature);
                 if (count($storage) === $sigCount) {
                     break 2;
                 }
                 break;
             }
         }
     }
     return $storage;
 }
Пример #2
0
 /**
  * @param ScriptInterface $script
  * @param Buffer $sigBuf
  * @param Buffer $keyBuf
  * @return bool
  * @throws ScriptRuntimeException
  * @throws \Exception
  */
 private function checkSig(ScriptInterface $script, Buffer $sigBuf, Buffer $keyBuf)
 {
     $this->checkSignatureEncoding($sigBuf)->checkPublicKeyEncoding($keyBuf);
     try {
         $txSignature = TransactionSignatureFactory::fromHex($sigBuf->getHex());
         $publicKey = PublicKeyFactory::fromHex($keyBuf->getHex());
         return $this->ecAdapter->verify($this->transaction->getSignatureHash()->calculate($script, $this->inputToSign, $txSignature->getHashType()), $publicKey, $txSignature->getSignature());
     } catch (\Exception $e) {
         return false;
     }
 }
Пример #3
0
 /**
  * @param ScriptInterface $script
  * @param BufferInterface $sigBuf
  * @param BufferInterface $keyBuf
  * @param int $sigVersion
  * @param int $flags
  * @return bool
  * @throws ScriptRuntimeException
  */
 public function checkSig(ScriptInterface $script, BufferInterface $sigBuf, BufferInterface $keyBuf, $sigVersion, $flags)
 {
     $this->checkSignatureEncoding($sigBuf, $flags)->checkPublicKeyEncoding($keyBuf, $flags);
     try {
         $txSignature = TransactionSignatureFactory::fromHex($sigBuf->getHex());
         $publicKey = PublicKeyFactory::fromHex($keyBuf->getHex());
         if ($sigVersion === 1) {
             $hasher = new V1Hasher($this->transaction, $this->amount);
         } else {
             $hasher = new Hasher($this->transaction);
         }
         $hash = $hasher->calculate($script, $this->nInput, $txSignature->getHashType());
         return $this->adapter->verify($hash, $publicKey, $txSignature->getSignature());
     } catch (\Exception $e) {
         return false;
     }
 }