xref: /plugin/pureldap/vendor/freedsx/asn1/src/FreeDSx/Asn1/Asn1.php (revision dad993c57a70866aa1db59c43f043769c2eb7ed0)
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