/** * @param Parser $parser * @return Alert */ public function fromParser(Parser $parser) { $detail = $this->detail->fromParser($parser); list($sigBuffer) = $this->getSigBuf()->parse($parser); $adapter = Bitcoin::getEcAdapter(); $serializer = EcSerializer::getSerializer('BitWasp\\Bitcoin\\Crypto\\EcAdapter\\Serializer\\Signature\\DerSignatureSerializerInterface', true, $adapter); $sig = $serializer->parse($sigBuffer); return new Alert($detail, $sig); }
public function testSerializer() { $version = '1'; $relayUntil = '9999999'; $expiration = '9898989'; $id = '123'; $cancel = '0'; $minVer = '0'; $maxVer = '0'; $priority = '50'; $comment = new Buffer('comment'); $statusBar = new Buffer('statusBar'); $setCancel = [1, 2]; $setSubVer = [50, 99]; $detail = new AlertDetail($version, $relayUntil, $expiration, $id, $cancel, $minVer, $maxVer, $priority, $comment, $statusBar, $setCancel, $setSubVer); $serializer = new AlertDetailSerializer(); $serialized = $detail->getBuffer(); $parsed = $serializer->parse($serialized); $this->assertEquals($detail, $parsed); }
/** * @param Parser $parser * @return Alert */ public function fromParser(Parser &$parser) { $detail = $this->detail->fromParser($parser); list($sigR, $sigS) = $this->getSigTemplate()->parse($parser); $adapter = Bitcoin::getEcAdapter(); if (!$adapter instanceof \BitWasp\Bitcoin\Crypto\EcAdapter\Impl\PhpEcc\Adapter\EcAdapter) { // We need to serialize this as DER, and deserialize it using the correct serializer... $temporary = new \BitWasp\Bitcoin\Crypto\EcAdapter\Impl\PhpEcc\Adapter\EcAdapter($adapter->getMath(), $adapter->getGenerator()); $sig = new \BitWasp\Bitcoin\Crypto\EcAdapter\Impl\PhpEcc\Signature\Signature($temporary, $sigR, $sigS); $serializer = new \BitWasp\Bitcoin\Crypto\EcAdapter\Impl\PhpEcc\Serializer\Signature\DerSignatureSerializer($temporary); $serialized = $serializer->serialize($sig); // Parse using native EcAdapter /** @var \BitWasp\Bitcoin\Crypto\EcAdapter\Serializer\Signature\DerSignatureSerializerInterface $serializer */ $serializer = EcSerializer::getSerializer($adapter, 'BitWasp\\Bitcoin\\Crypto\\EcAdapter\\Serializer\\Signature\\DerSignatureSerializerInterface'); $sig = $serializer->parse($serialized); } else { $sig = new \BitWasp\Bitcoin\Crypto\EcAdapter\Impl\PhpEcc\Signature\Signature($adapter, $sigR, $sigS); } return new Alert($detail, $sig); }