![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/spomky-labs/pki-framework/src/ASN1/ |
<?php declare(strict_types=1); namespace SpomkyLabs\Pki\ASN1; use BadMethodCallException; use function mb_strlen; use SpomkyLabs\Pki\ASN1\Component\Identifier; use SpomkyLabs\Pki\ASN1\Component\Length; use SpomkyLabs\Pki\ASN1\Feature\ElementBase; /** * Container for raw DER encoded data. * * May be inserted into structure without decoding first. */ final class DERData extends Element { /** * DER encoded data. */ private readonly string $der; /** * Identifier of the underlying type. */ private readonly Identifier $identifier; /** * Offset to the content in DER data. */ private int $contentOffset = 0; /** * @param string $data DER encoded data */ private function __construct(string $data) { $this->identifier = Identifier::fromDER($data, $this->contentOffset); // check that length encoding is valid Length::expectFromDER($data, $this->contentOffset); $this->der = $data; parent::__construct($this->identifier->intTag()); } public static function create(string $data): self { return new self($data); } public function typeClass(): int { return $this->identifier->typeClass(); } public function isConstructed(): bool { return $this->identifier->isConstructed(); } public function toDER(): string { return $this->der; } protected function encodedAsDER(): string { // if there's no content payload if (mb_strlen($this->der, '8bit') === $this->contentOffset) { return ''; } return mb_substr($this->der, $this->contentOffset, null, '8bit'); } protected static function decodeFromDER(Identifier $identifier, string $data, int &$offset): ElementBase { throw new BadMethodCallException(__METHOD__ . ' must be implemented in derived class.'); } }