xref: /plugin/pureldap/vendor/freedsx/ldap/src/FreeDSx/Ldap/Protocol/LdapEncoder.php (revision dad993c57a70866aa1db59c43f043769c2eb7ed0)
10b3fd2d3SAndreas Gohr<?php
2*dad993c5SAndreas Gohr
30b3fd2d3SAndreas Gohr/**
40b3fd2d3SAndreas Gohr * This file is part of the FreeDSx LDAP LDAP package.
50b3fd2d3SAndreas Gohr *
60b3fd2d3SAndreas Gohr * (c) Chad Sikorra <Chad.Sikorra@gmail.com>
70b3fd2d3SAndreas Gohr *
80b3fd2d3SAndreas Gohr * For the full copyright and license information, please view the LICENSE
90b3fd2d3SAndreas Gohr * file that was distributed with this source code.
100b3fd2d3SAndreas Gohr */
110b3fd2d3SAndreas Gohr
120b3fd2d3SAndreas Gohrnamespace FreeDSx\Ldap\Protocol;
130b3fd2d3SAndreas Gohr
140b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Encoder\BerEncoder;
150b3fd2d3SAndreas Gohruse FreeDSx\Asn1\Type\AbstractType;
160b3fd2d3SAndreas Gohr
170b3fd2d3SAndreas Gohr/**
180b3fd2d3SAndreas Gohr * Applies some LDAP specific rules, and mappings, to the BER encoder, specified in RFC 4511.
190b3fd2d3SAndreas Gohr *
200b3fd2d3SAndreas Gohr *    - Only the definite form of length encoding is used.
210b3fd2d3SAndreas Gohr *    - OCTET STRING values are encoded in the primitive form only.
220b3fd2d3SAndreas Gohr *    - If the value of a BOOLEAN type is true, the encoding of the value octet is set to hex "FF".
230b3fd2d3SAndreas Gohr *    - If a value of a type is its default value, it is absent.
240b3fd2d3SAndreas Gohr *
250b3fd2d3SAndreas Gohr * @author Chad Sikorra <Chad.Sikorra@gmail.com>
260b3fd2d3SAndreas Gohr */
270b3fd2d3SAndreas Gohrclass LdapEncoder extends BerEncoder
280b3fd2d3SAndreas Gohr{
290b3fd2d3SAndreas Gohr    /**
300b3fd2d3SAndreas Gohr     * {@inheritdoc}
310b3fd2d3SAndreas Gohr     */
320b3fd2d3SAndreas Gohr    public function __construct()
330b3fd2d3SAndreas Gohr    {
340b3fd2d3SAndreas Gohr        parent::__construct([
350b3fd2d3SAndreas Gohr            'primitive_only' => [
360b3fd2d3SAndreas Gohr                AbstractType::TAG_TYPE_OCTET_STRING,
370b3fd2d3SAndreas Gohr            ],
380b3fd2d3SAndreas Gohr        ]);
390b3fd2d3SAndreas Gohr        $this->setTagMap(AbstractType::TAG_CLASS_APPLICATION, [
400b3fd2d3SAndreas Gohr            0 => AbstractType::TAG_TYPE_SEQUENCE,
410b3fd2d3SAndreas Gohr            1 => AbstractType::TAG_TYPE_SEQUENCE,
420b3fd2d3SAndreas Gohr            2 => AbstractType::TAG_TYPE_NULL,
430b3fd2d3SAndreas Gohr            3 => AbstractType::TAG_TYPE_SEQUENCE,
440b3fd2d3SAndreas Gohr            4 => AbstractType::TAG_TYPE_SEQUENCE,
450b3fd2d3SAndreas Gohr            5 => AbstractType::TAG_TYPE_SEQUENCE,
460b3fd2d3SAndreas Gohr            6 => AbstractType::TAG_TYPE_SEQUENCE,
470b3fd2d3SAndreas Gohr            7 => AbstractType::TAG_TYPE_SEQUENCE,
480b3fd2d3SAndreas Gohr            8 => AbstractType::TAG_TYPE_SEQUENCE,
490b3fd2d3SAndreas Gohr            9 => AbstractType::TAG_TYPE_SEQUENCE,
500b3fd2d3SAndreas Gohr            10 => AbstractType::TAG_TYPE_OCTET_STRING,
510b3fd2d3SAndreas Gohr            11 => AbstractType::TAG_TYPE_SEQUENCE,
520b3fd2d3SAndreas Gohr            12 => AbstractType::TAG_TYPE_SEQUENCE,
530b3fd2d3SAndreas Gohr            13 => AbstractType::TAG_TYPE_SEQUENCE,
540b3fd2d3SAndreas Gohr            14 => AbstractType::TAG_TYPE_SEQUENCE,
550b3fd2d3SAndreas Gohr            15 => AbstractType::TAG_TYPE_SEQUENCE,
560b3fd2d3SAndreas Gohr            16 => AbstractType::TAG_TYPE_INTEGER,
570b3fd2d3SAndreas Gohr            19 => AbstractType::TAG_TYPE_SEQUENCE,
580b3fd2d3SAndreas Gohr            23 => AbstractType::TAG_TYPE_SEQUENCE,
590b3fd2d3SAndreas Gohr            24 => AbstractType::TAG_TYPE_SEQUENCE,
600b3fd2d3SAndreas Gohr            25 => AbstractType::TAG_TYPE_SEQUENCE,
610b3fd2d3SAndreas Gohr        ]);
620b3fd2d3SAndreas Gohr    }
630b3fd2d3SAndreas Gohr}
64