10b3fd2d3SAndreas Gohr<?php 20b3fd2d3SAndreas Gohr/** 30b3fd2d3SAndreas Gohr * This file is part of the FreeDSx ASN1 package. 40b3fd2d3SAndreas Gohr * 50b3fd2d3SAndreas Gohr * (c) Chad Sikorra <Chad.Sikorra@gmail.com> 60b3fd2d3SAndreas Gohr * 70b3fd2d3SAndreas Gohr * For the full copyright and license information, please view the LICENSE 80b3fd2d3SAndreas Gohr * file that was distributed with this source code. 90b3fd2d3SAndreas Gohr */ 100b3fd2d3SAndreas Gohr 110b3fd2d3SAndreas Gohrnamespace FreeDSx\Asn1; 120b3fd2d3SAndreas Gohr 13*dad993c5SAndreas Gohruse DateTimeInterface; 140b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\AbstractTimeType; 150b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\AbstractType; 160b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\BitStringType; 170b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\BmpStringType; 180b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\BooleanType; 190b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\CharacterStringType; 200b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\EnumeratedType; 210b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\GeneralizedTimeType; 220b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\GeneralStringType; 230b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\GraphicStringType; 240b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\IA5StringType; 250b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\IntegerType; 260b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\NullType; 270b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\NumericStringType; 280b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\OctetStringType; 290b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\OidType; 300b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\PrintableStringType; 310b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\RealType; 320b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\RelativeOidType; 330b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\SequenceOfType; 340b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\SequenceType; 350b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\SetOfType; 360b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\SetType; 370b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\TeletexStringType; 380b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\UniversalStringType; 390b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\UtcTimeType; 400b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\Utf8StringType; 410b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\VideotexStringType; 420b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\VisibleStringType; 430b3fd2d3SAndreas Gohr 440b3fd2d3SAndreas Gohr/** 450b3fd2d3SAndreas Gohr * Used to construct various ASN1 structures. 460b3fd2d3SAndreas Gohr * 470b3fd2d3SAndreas Gohr * @author Chad Sikorra <Chad.Sikorra@gmail.com> 480b3fd2d3SAndreas Gohr */ 490b3fd2d3SAndreas Gohrclass Asn1 500b3fd2d3SAndreas Gohr{ 510b3fd2d3SAndreas Gohr /** 520b3fd2d3SAndreas Gohr * @param AbstractType ...$types 530b3fd2d3SAndreas Gohr * @return SequenceType 540b3fd2d3SAndreas Gohr */ 550b3fd2d3SAndreas Gohr public static function sequence(AbstractType ...$types): SequenceType 560b3fd2d3SAndreas Gohr { 570b3fd2d3SAndreas Gohr return new SequenceType(...$types); 580b3fd2d3SAndreas Gohr } 590b3fd2d3SAndreas Gohr 600b3fd2d3SAndreas Gohr /** 610b3fd2d3SAndreas Gohr * @param AbstractType ...$types 620b3fd2d3SAndreas Gohr * @return SequenceOfType 630b3fd2d3SAndreas Gohr */ 640b3fd2d3SAndreas Gohr public static function sequenceOf(AbstractType ...$types): SequenceOfType 650b3fd2d3SAndreas Gohr { 660b3fd2d3SAndreas Gohr return new SequenceOfType(...$types); 670b3fd2d3SAndreas Gohr } 680b3fd2d3SAndreas Gohr 690b3fd2d3SAndreas Gohr /** 700b3fd2d3SAndreas Gohr * @param int $int 710b3fd2d3SAndreas Gohr * @return IntegerType 720b3fd2d3SAndreas Gohr */ 730b3fd2d3SAndreas Gohr public static function integer(int $int): IntegerType 740b3fd2d3SAndreas Gohr { 750b3fd2d3SAndreas Gohr return new IntegerType($int); 760b3fd2d3SAndreas Gohr } 770b3fd2d3SAndreas Gohr 780b3fd2d3SAndreas Gohr /** 790b3fd2d3SAndreas Gohr * @param bool $bool 800b3fd2d3SAndreas Gohr * @return BooleanType 810b3fd2d3SAndreas Gohr */ 820b3fd2d3SAndreas Gohr public static function boolean(bool $bool): BooleanType 830b3fd2d3SAndreas Gohr { 840b3fd2d3SAndreas Gohr return new BooleanType($bool); 850b3fd2d3SAndreas Gohr } 860b3fd2d3SAndreas Gohr 870b3fd2d3SAndreas Gohr /** 880b3fd2d3SAndreas Gohr * @param int $enum 890b3fd2d3SAndreas Gohr * @return EnumeratedType 900b3fd2d3SAndreas Gohr */ 910b3fd2d3SAndreas Gohr public static function enumerated(int $enum): EnumeratedType 920b3fd2d3SAndreas Gohr { 930b3fd2d3SAndreas Gohr return new EnumeratedType($enum); 940b3fd2d3SAndreas Gohr } 950b3fd2d3SAndreas Gohr 960b3fd2d3SAndreas Gohr /** 970b3fd2d3SAndreas Gohr * @param float $real 980b3fd2d3SAndreas Gohr * @return RealType 990b3fd2d3SAndreas Gohr */ 1000b3fd2d3SAndreas Gohr public static function real(float $real): RealType 1010b3fd2d3SAndreas Gohr { 1020b3fd2d3SAndreas Gohr return new RealType($real); 1030b3fd2d3SAndreas Gohr } 1040b3fd2d3SAndreas Gohr 1050b3fd2d3SAndreas Gohr /** 1060b3fd2d3SAndreas Gohr * @return NullType 1070b3fd2d3SAndreas Gohr */ 1080b3fd2d3SAndreas Gohr public static function null(): NullType 1090b3fd2d3SAndreas Gohr { 1100b3fd2d3SAndreas Gohr return new NullType(); 1110b3fd2d3SAndreas Gohr } 1120b3fd2d3SAndreas Gohr 1130b3fd2d3SAndreas Gohr /** 1140b3fd2d3SAndreas Gohr * @param string $string 1150b3fd2d3SAndreas Gohr * @return OctetStringType 1160b3fd2d3SAndreas Gohr */ 1170b3fd2d3SAndreas Gohr public static function octetString(string $string): OctetStringType 1180b3fd2d3SAndreas Gohr { 1190b3fd2d3SAndreas Gohr return new OctetStringType($string); 1200b3fd2d3SAndreas Gohr } 1210b3fd2d3SAndreas Gohr 1220b3fd2d3SAndreas Gohr /** 1230b3fd2d3SAndreas Gohr * @param string $bitString 1240b3fd2d3SAndreas Gohr * @return BitStringType 1250b3fd2d3SAndreas Gohr */ 1260b3fd2d3SAndreas Gohr public static function bitString(string $bitString): BitStringType 1270b3fd2d3SAndreas Gohr { 1280b3fd2d3SAndreas Gohr return new BitStringType($bitString); 1290b3fd2d3SAndreas Gohr } 1300b3fd2d3SAndreas Gohr 1310b3fd2d3SAndreas Gohr /** 1320b3fd2d3SAndreas Gohr * @param int $integer 1330b3fd2d3SAndreas Gohr * @return BitStringType 1340b3fd2d3SAndreas Gohr */ 1350b3fd2d3SAndreas Gohr public static function bitStringFromInteger(int $integer): BitStringType 1360b3fd2d3SAndreas Gohr { 1370b3fd2d3SAndreas Gohr return BitStringType::fromInteger($integer); 1380b3fd2d3SAndreas Gohr } 1390b3fd2d3SAndreas Gohr 1400b3fd2d3SAndreas Gohr /** 1410b3fd2d3SAndreas Gohr * @param string $binary 1420b3fd2d3SAndreas Gohr * @return BitStringType 1430b3fd2d3SAndreas Gohr */ 1440b3fd2d3SAndreas Gohr public static function bitStringFromBinary($binary): BitStringType 1450b3fd2d3SAndreas Gohr { 1460b3fd2d3SAndreas Gohr return BitStringType::fromBinary($binary); 1470b3fd2d3SAndreas Gohr } 1480b3fd2d3SAndreas Gohr 1490b3fd2d3SAndreas Gohr /** 1500b3fd2d3SAndreas Gohr * @param string $oid 1510b3fd2d3SAndreas Gohr * @return OidType 1520b3fd2d3SAndreas Gohr */ 1530b3fd2d3SAndreas Gohr public static function oid(string $oid): OidType 1540b3fd2d3SAndreas Gohr { 1550b3fd2d3SAndreas Gohr return new OidType($oid); 1560b3fd2d3SAndreas Gohr } 1570b3fd2d3SAndreas Gohr 1580b3fd2d3SAndreas Gohr /** 1590b3fd2d3SAndreas Gohr * @param string $oid 1600b3fd2d3SAndreas Gohr * @return RelativeOidType 1610b3fd2d3SAndreas Gohr */ 1620b3fd2d3SAndreas Gohr public static function relativeOid(string $oid): RelativeOidType 1630b3fd2d3SAndreas Gohr { 1640b3fd2d3SAndreas Gohr return new RelativeOidType($oid); 1650b3fd2d3SAndreas Gohr } 1660b3fd2d3SAndreas Gohr 1670b3fd2d3SAndreas Gohr /** 1680b3fd2d3SAndreas Gohr * @param string $string 1690b3fd2d3SAndreas Gohr * @return BmpStringType 1700b3fd2d3SAndreas Gohr */ 1710b3fd2d3SAndreas Gohr public static function bmpString(string $string): BmpStringType 1720b3fd2d3SAndreas Gohr { 1730b3fd2d3SAndreas Gohr return new BmpStringType($string); 1740b3fd2d3SAndreas Gohr } 1750b3fd2d3SAndreas Gohr 1760b3fd2d3SAndreas Gohr /** 1770b3fd2d3SAndreas Gohr * @param string $string 1780b3fd2d3SAndreas Gohr * @return CharacterStringType 1790b3fd2d3SAndreas Gohr */ 1800b3fd2d3SAndreas Gohr public static function charString(string $string): CharacterStringType 1810b3fd2d3SAndreas Gohr { 1820b3fd2d3SAndreas Gohr return new CharacterStringType($string); 1830b3fd2d3SAndreas Gohr } 1840b3fd2d3SAndreas Gohr 1850b3fd2d3SAndreas Gohr /** 186*dad993c5SAndreas Gohr * @param DateTimeInterface|null $dateTime 1870b3fd2d3SAndreas Gohr * @param string $dateFormat 1880b3fd2d3SAndreas Gohr * @param string $tzFormat 1890b3fd2d3SAndreas Gohr * @return GeneralizedTimeType 1900b3fd2d3SAndreas Gohr */ 191*dad993c5SAndreas Gohr public static function generalizedTime(?DateTimeInterface $dateTime = null, string $dateFormat = AbstractTimeType::FORMAT_FRACTIONS, string $tzFormat = AbstractTimeType::TZ_UTC): GeneralizedTimeType 1920b3fd2d3SAndreas Gohr { 1930b3fd2d3SAndreas Gohr return new GeneralizedTimeType($dateTime, $dateFormat, $tzFormat); 1940b3fd2d3SAndreas Gohr } 1950b3fd2d3SAndreas Gohr 1960b3fd2d3SAndreas Gohr /** 197*dad993c5SAndreas Gohr * @param DateTimeInterface|null $dateTime 1980b3fd2d3SAndreas Gohr * @param string $dateFormat 1990b3fd2d3SAndreas Gohr * @param string $tzFormat 2000b3fd2d3SAndreas Gohr * @return UtcTimeType 2010b3fd2d3SAndreas Gohr */ 202*dad993c5SAndreas Gohr public static function utcTime(?DateTimeInterface $dateTime = null, string $dateFormat = AbstractTimeType::FORMAT_SECONDS, string $tzFormat = AbstractTimeType::TZ_UTC): UtcTimeType 2030b3fd2d3SAndreas Gohr { 2040b3fd2d3SAndreas Gohr return new UtcTimeType($dateTime, $dateFormat, $tzFormat); 2050b3fd2d3SAndreas Gohr } 2060b3fd2d3SAndreas Gohr 2070b3fd2d3SAndreas Gohr /** 2080b3fd2d3SAndreas Gohr * @param string $string 2090b3fd2d3SAndreas Gohr * @return GeneralStringType 2100b3fd2d3SAndreas Gohr */ 2110b3fd2d3SAndreas Gohr public static function generalString(string $string): GeneralStringType 2120b3fd2d3SAndreas Gohr { 2130b3fd2d3SAndreas Gohr return new GeneralStringType($string); 2140b3fd2d3SAndreas Gohr } 2150b3fd2d3SAndreas Gohr 2160b3fd2d3SAndreas Gohr /** 2170b3fd2d3SAndreas Gohr * @param string $string 2180b3fd2d3SAndreas Gohr * @return GraphicStringType 2190b3fd2d3SAndreas Gohr */ 2200b3fd2d3SAndreas Gohr public static function graphicString(string $string): GraphicStringType 2210b3fd2d3SAndreas Gohr { 2220b3fd2d3SAndreas Gohr return new GraphicStringType($string); 2230b3fd2d3SAndreas Gohr } 2240b3fd2d3SAndreas Gohr 2250b3fd2d3SAndreas Gohr /** 2260b3fd2d3SAndreas Gohr * @param string $string 2270b3fd2d3SAndreas Gohr * @return IA5StringType 2280b3fd2d3SAndreas Gohr */ 2290b3fd2d3SAndreas Gohr public static function ia5String(string $string): IA5StringType 2300b3fd2d3SAndreas Gohr { 2310b3fd2d3SAndreas Gohr return new IA5StringType($string); 2320b3fd2d3SAndreas Gohr } 2330b3fd2d3SAndreas Gohr 2340b3fd2d3SAndreas Gohr /** 2350b3fd2d3SAndreas Gohr * @param string $string 2360b3fd2d3SAndreas Gohr * @return NumericStringType 2370b3fd2d3SAndreas Gohr */ 2380b3fd2d3SAndreas Gohr public static function numericString(string $string): NumericStringType 2390b3fd2d3SAndreas Gohr { 2400b3fd2d3SAndreas Gohr return new NumericStringType($string); 2410b3fd2d3SAndreas Gohr } 2420b3fd2d3SAndreas Gohr 2430b3fd2d3SAndreas Gohr /** 2440b3fd2d3SAndreas Gohr * @param string $string 2450b3fd2d3SAndreas Gohr * @return PrintableStringType 2460b3fd2d3SAndreas Gohr */ 2470b3fd2d3SAndreas Gohr public static function printableString(string $string): PrintableStringType 2480b3fd2d3SAndreas Gohr { 2490b3fd2d3SAndreas Gohr return new PrintableStringType($string); 2500b3fd2d3SAndreas Gohr } 2510b3fd2d3SAndreas Gohr 2520b3fd2d3SAndreas Gohr /** 2530b3fd2d3SAndreas Gohr * @param string $string 2540b3fd2d3SAndreas Gohr * @return TeletexStringType 2550b3fd2d3SAndreas Gohr */ 2560b3fd2d3SAndreas Gohr public static function teletexString(string $string): TeletexStringType 2570b3fd2d3SAndreas Gohr { 2580b3fd2d3SAndreas Gohr return new TeletexStringType($string); 2590b3fd2d3SAndreas Gohr } 2600b3fd2d3SAndreas Gohr 2610b3fd2d3SAndreas Gohr /** 2620b3fd2d3SAndreas Gohr * @param string $string 2630b3fd2d3SAndreas Gohr * @return UniversalStringType 2640b3fd2d3SAndreas Gohr */ 2650b3fd2d3SAndreas Gohr public static function universalString(string $string): UniversalStringType 2660b3fd2d3SAndreas Gohr { 2670b3fd2d3SAndreas Gohr return new UniversalStringType($string); 2680b3fd2d3SAndreas Gohr } 2690b3fd2d3SAndreas Gohr 2700b3fd2d3SAndreas Gohr /** 2710b3fd2d3SAndreas Gohr * @param string $string 2720b3fd2d3SAndreas Gohr * @return Utf8StringType 2730b3fd2d3SAndreas Gohr */ 2740b3fd2d3SAndreas Gohr public static function utf8String(string $string): Utf8StringType 2750b3fd2d3SAndreas Gohr { 2760b3fd2d3SAndreas Gohr return new Utf8StringType($string); 2770b3fd2d3SAndreas Gohr } 2780b3fd2d3SAndreas Gohr 2790b3fd2d3SAndreas Gohr /** 2800b3fd2d3SAndreas Gohr * @param string $string 2810b3fd2d3SAndreas Gohr * @return VideotexStringType 2820b3fd2d3SAndreas Gohr */ 2830b3fd2d3SAndreas Gohr public static function videotexString(string $string): VideotexStringType 2840b3fd2d3SAndreas Gohr { 2850b3fd2d3SAndreas Gohr return new VideotexStringType($string); 2860b3fd2d3SAndreas Gohr } 2870b3fd2d3SAndreas Gohr 2880b3fd2d3SAndreas Gohr /** 2890b3fd2d3SAndreas Gohr * @param string $string 2900b3fd2d3SAndreas Gohr * @return VisibleStringType 2910b3fd2d3SAndreas Gohr */ 2920b3fd2d3SAndreas Gohr public static function visibleString(string $string): VisibleStringType 2930b3fd2d3SAndreas Gohr { 2940b3fd2d3SAndreas Gohr return new VisibleStringType($string); 2950b3fd2d3SAndreas Gohr } 2960b3fd2d3SAndreas Gohr 2970b3fd2d3SAndreas Gohr /** 298*dad993c5SAndreas Gohr * @param AbstractType ...$types 2990b3fd2d3SAndreas Gohr * @return SetType 3000b3fd2d3SAndreas Gohr */ 3010b3fd2d3SAndreas Gohr public static function set(AbstractType ...$types): SetType 3020b3fd2d3SAndreas Gohr { 3030b3fd2d3SAndreas Gohr return new SetType(...$types); 3040b3fd2d3SAndreas Gohr } 3050b3fd2d3SAndreas Gohr 3060b3fd2d3SAndreas Gohr /** 307*dad993c5SAndreas Gohr * @param AbstractType ...$types 3080b3fd2d3SAndreas Gohr * @return SetOfType 3090b3fd2d3SAndreas Gohr */ 3100b3fd2d3SAndreas Gohr public static function setOf(AbstractType ...$types): SetOfType 3110b3fd2d3SAndreas Gohr { 3120b3fd2d3SAndreas Gohr return new SetOfType(...$types); 3130b3fd2d3SAndreas Gohr } 3140b3fd2d3SAndreas Gohr 3150b3fd2d3SAndreas Gohr /** 316*dad993c5SAndreas Gohr * @template T of AbstractType 317fd0855ecSAndreas Gohr * @param int $tagNumber 318*dad993c5SAndreas Gohr * @param T $type 319*dad993c5SAndreas Gohr * @return T 3200b3fd2d3SAndreas Gohr */ 3210b3fd2d3SAndreas Gohr public static function context(int $tagNumber, AbstractType $type) 3220b3fd2d3SAndreas Gohr { 3230b3fd2d3SAndreas Gohr return $type->setTagClass(AbstractType::TAG_CLASS_CONTEXT_SPECIFIC)->setTagNumber($tagNumber); 3240b3fd2d3SAndreas Gohr } 3250b3fd2d3SAndreas Gohr 3260b3fd2d3SAndreas Gohr /** 327*dad993c5SAndreas Gohr * @template T of AbstractType 328fd0855ecSAndreas Gohr * @param int $tagNumber 329*dad993c5SAndreas Gohr * @param T $type 330*dad993c5SAndreas Gohr * @return T 3310b3fd2d3SAndreas Gohr */ 3320b3fd2d3SAndreas Gohr public static function application(int $tagNumber, AbstractType $type) 3330b3fd2d3SAndreas Gohr { 3340b3fd2d3SAndreas Gohr return $type->setTagClass(AbstractType::TAG_CLASS_APPLICATION)->setTagNumber($tagNumber); 3350b3fd2d3SAndreas Gohr } 3360b3fd2d3SAndreas Gohr 3370b3fd2d3SAndreas Gohr /** 338*dad993c5SAndreas Gohr * @template T of AbstractType 3390b3fd2d3SAndreas Gohr * @param int $tagNumber 340*dad993c5SAndreas Gohr * @param T $type 341*dad993c5SAndreas Gohr * @return T 3420b3fd2d3SAndreas Gohr */ 3430b3fd2d3SAndreas Gohr public static function universal(int $tagNumber, AbstractType $type) 3440b3fd2d3SAndreas Gohr { 3450b3fd2d3SAndreas Gohr return $type->setTagClass(AbstractType::TAG_CLASS_UNIVERSAL)->setTagNumber($tagNumber); 3460b3fd2d3SAndreas Gohr } 3470b3fd2d3SAndreas Gohr 3480b3fd2d3SAndreas Gohr /** 349*dad993c5SAndreas Gohr * @template T of AbstractType 3500b3fd2d3SAndreas Gohr * @param int $tagNumber 351*dad993c5SAndreas Gohr * @param T $type 352*dad993c5SAndreas Gohr * @return T 3530b3fd2d3SAndreas Gohr */ 3540b3fd2d3SAndreas Gohr public static function private(int $tagNumber, AbstractType $type) 3550b3fd2d3SAndreas Gohr { 3560b3fd2d3SAndreas Gohr return $type->setTagClass(AbstractType::TAG_CLASS_PRIVATE)->setTagNumber($tagNumber); 3570b3fd2d3SAndreas Gohr } 3580b3fd2d3SAndreas Gohr} 359