/** * @param Parser $parser * @return PrivateKey */ public function fromParser(Parser &$parser) { $bytes = $parser->readBytes(32); $multiplier = $bytes->getInt(); $privateKey = PrivateKeyFactory::fromInt($multiplier, false, $this->ecAdapter); return $privateKey; }
/** * @param Parser $parser * @return Buffer * @throws \BitWasp\Buffertools\Exceptions\ParserOutOfRange */ public function read(Parser &$parser) { $bits = $this->readBits($parser->readBytes($this->length)); if (!$this->isBigEndian()) { $bits = $this->flipBits($bits); } return Buffer::hex(str_pad($this->getMath()->baseConvert($bits, 2, 16), $this->length * 2, '0', STR_PAD_LEFT), $this->length, $this->getMath()); }
/** * @param Parser $parser * @return int|string * @throws \BitWasp\Buffertools\Exceptions\ParserOutOfRange * @throws \Exception */ public function readBits(Parser &$parser) { $math = $this->getMath(); $bitSize = $this->getBitSize(); $bits = str_pad($math->baseConvert($parser->readBytes($bitSize / 8)->getHex(), 16, 2), $bitSize, '0', STR_PAD_LEFT); $integer = $math->baseConvert($this->isBigEndian() ? $bits : $this->flipBits($bits), 2, 10); return $integer; }
/** * @param Parser $parser * @return Ipv4|Ipv6|Onion * @throws \BitWasp\Buffertools\Exceptions\ParserOutOfRange * @throws \Exception */ public function fromParser(Parser $parser) { $buffer = $parser->readBytes(16); $binary = $buffer->getBinary(); if (Onion::MAGIC === substr($binary, 0, strlen(Onion::MAGIC))) { $addr = strtolower(Base32::encode($buffer->slice(strlen(Onion::MAGIC))->getBinary())) . '.onion'; $ip = new Onion($addr); } elseif (Ipv4::MAGIC === substr($binary, 0, strlen(Ipv4::MAGIC))) { $end = $buffer->slice(strlen(Ipv4::MAGIC), 4); $ip = new Ipv4(long2ip($end->getInt())); } else { $addr = []; foreach (str_split($binary, 2) as $segment) { $addr[] = bin2hex($segment); } $addr = implode(":", $addr); $ip = new Ipv6($addr); } return $ip; }
/** * @param Parser $parser * @return PrivateKey * @throws \BitWasp\Buffertools\Exceptions\ParserOutOfRange */ public function fromParser(Parser $parser) { $compressed = $this->haveNextCompressed; $this->haveNextCompressed = false; return $this->ecAdapter->getPrivateKey($parser->readBytes(32)->getInt(), $compressed); }
<?php require "../vendor/autoload.php"; use BitWasp\Buffertools\Buffer; use BitWasp\Buffertools\Parser; // Parsers read Buffers $buffer = new Buffer('abc'); $parser = new Parser($buffer); // Call readBytes to unpack the data /** @var Buffer[] $set */ $set = [$parser->readBytes(1), $parser->readBytes(1), $parser->readBytes(1)]; foreach ($set as $item) { echo $item->getBinary() . PHP_EOL; }
/** * @expectedException \Exception */ public function testReadBytesBeyondLength() { $bytes = '41424344'; $parser = new Parser($bytes); $parser->readBytes(5); }