/** * @param $content * @return SignedMessage */ public function parse($content) { if (0 !== strpos($content, self::HEADER)) { throw new \RuntimeException('Message must begin with -----BEGIN BITCOIN SIGNED MESSAGE-----'); } $sigHeaderPos = strpos($content, self::SIG_START); if (false === $sigHeaderPos) { throw new \RuntimeException('Unable to find start of signature'); } $sigEnd = strlen($content) - strlen(self::FOOTER); if (strpos($content, self::FOOTER) !== $sigEnd) { throw new \RuntimeException('Message must end with -----END BITCOIN SIGNED MESSAGE-----'); } $messageStartPos = strlen(self::HEADER) + 1; $messageEndPos = $sigHeaderPos - $messageStartPos - 1; $message = substr($content, $messageStartPos, $messageEndPos); $sigHex = bin2hex(base64_decode(substr($content, $sigHeaderPos + strlen(self::SIG_START), $sigEnd))); $compactSig = $this->csSerializer->parse($sigHex); return new SignedMessage($message, $compactSig); }
/** * @return \BitWasp\Buffertools\Buffer */ public function getBuffer() { $serializer = new CompactSignatureSerializer(Bitcoin::getMath()); return $serializer->serialize($this); }