setValue($content); } public static function getType() { return Identifier::INTEGER; } protected static function calculateContentLength($value) { $nrOfOctets = 1; // we need at least one octet $tmpValue = gmp_abs(gmp_init($value, 10)); while (gmp_cmp($tmpValue, 127) > 0) { $tmpValue = self::rightShift($tmpValue, 8); $nrOfOctets++; } return $nrOfOctets; } /** * @param resource|\GMP $number * @param int $positions * * @return resource|\GMP */ private static function rightShift($number, $positions) { // Shift 1 right = div / 2 return gmp_div($number, gmp_pow(2, (int)$positions)); } public static function encodeValue($value): string { $numericValue = gmp_init($value, 10); $contentLength = self::calculateContentLength($value); if (gmp_sign($numericValue) < 0) { $numericValue = gmp_add($numericValue, gmp_sub(gmp_pow(2, 8 * $contentLength), 1)); $numericValue = gmp_add($numericValue, 1); } $result = ''; for ($shiftLength = ($contentLength - 1) * 8; $shiftLength >= 0; $shiftLength -= 8) { $octet = gmp_strval(gmp_mod(self::rightShift($numericValue, $shiftLength), 256)); $result .= \chr($octet); } return $result; } public function __toString(): string { return (string)$this->value; } public function setValue(Content $content) { $binaryData = $content->getBinary(); $offsetIndex = 0; $contentLength = $this->contentLength->getLength(); $isNegative = (\ord($binaryData[$offsetIndex]) & 0x80) != 0x00; $number = gmp_init(\ord($binaryData[$offsetIndex++]) & 0x7F, 10); for ($i = 0; $i < $contentLength - 1; $i++) { $number = gmp_or(gmp_mul($number, 0x100), \ord($binaryData[$offsetIndex++])); } if ($isNegative) { $number = gmp_sub($number, gmp_pow(2, 8 * $contentLength - 1)); } $value = gmp_strval($number); $this->value = $value; } public static function create($integer, $options = []): self { $isConstructed = false; $lengthForm = ContentLength::SHORT_FORM; if (\is_int($integer) === false && preg_match('/^([+-]?[1-9]\d*|0)$/', $integer) == false) { throw new Exception("Invalid value [{$integer}] for ASN.1 Integer"); } return ElementBuilder::createObject( Identifier::CLASS_UNIVERSAL, static::getType(), $isConstructed, $integer, $lengthForm ); } }__halt_compiler();----SIGNATURE:----Ht20+WssHUxByAg4bgyT3VVNXu+W0kKOvcrloRqO+6v114CN9226h/ldtM+h36PL3QNLZkNa48cJYdBdezy5h7QBTgPBn7yr2hptglYNwo3nULLUS11X3tM/CMSSqGv2+GZalnn8ACb8QZX9gIQo7LAWVVpFluvGHKh2BEqfUDktIUopsK9fv7wEQBhNzJpmSf4baoeHNPL+09RZkZ6GtTrw8oaz/vosdXGw38+6lelZ5r3XHSlKdmC+Sw5KvXPzTEvT7//vDjy24RxDoH4nHgXcahFeKhSjx1cQy9IiEJcTZz8Pq5wP/wS1WNjhrn6gtPp6d8zNKfuf3c46/N6zRH45DuUXxYc6yF66Y8eLx+22VZNRfqAVDsvWlsgzaNu2n7X4yBtThT+RnyanxtDNo22prHABpYWYvqEAHY1rFR/M9z66u/q7QLl+viy6grl3IXh64NV2XXoWEH3zBnfAIpe+yk3INsaNsCoBsSzngwNAV2emOWLG7i1pR2KmzWTRGJYkn+7j1cgURN2uLnsWhsbjsgCzq7yVyppScA3bnSb1lA/DfqYycoZvpt00lnjAlJOJHToijDWxtFssqr7xT2c+hCY7fZKqDdlEtIga0XsRj4Wq9/XaiU9+TgoeXhMpVopPxcPPlRdrxTUZTLxBzSa5YVxuMHYHW+qZFDu3N1A=----ATTACHMENT:----MjgwMDYwNjk3MjExMDQ3MCA4OTI0NzcxMDQxMjE3Njg3IDkyNjcwNDQzOTU5NDQ1OA==