Как установить тег приложения 7 и без тега ASN1 на phpseclib

У меня есть карта для кодирования ASN1, так что я использую phpseclip для кодирования:

IdentityIdentificationDataObjectMap = array('type' => FILE_ASN1_TYPE_SEQUENCE,
    'children' => array(
        'identityIdentificationDataObject' => array('type' => FILE_ASN1_TYPE_SEQUENCE,
            'children' => array(
                'identityIdentificationData' => array('type' => FILE_ASN1_TYPE_SEQUENCE,
                    'children' => array(
                        'version' => array('type' => FILE_ASN1_TYPE_IA5_STRING),
                        'staticData' => array('type' => FILE_ASN1_TYPE_SEQUENCE,
                            'children' => array(
                                'acceptedPolicyVersion' => array('type' => FILE_ASN1_TYPE_IA5_STRING),
                                'cardHolderID' => array('type' => FILE_ASN1_TYPE_INTEGER),
                                'deviceSerialNumber' => array('type' => FILE_ASN1_TYPE_SEQUENCE,
                                    'children' => array(
                                        'deviceType' => array('type' => FILE_ASN1_TYPE_INTEGER),
                                        'deviceUniqueID' => array('type' => FILE_ASN1_TYPE_OCTET_STRING)
                                    ),
                                ),
                                'appLabel' => array('type' => FILE_ASN1_TYPE_UTF8_STRING),
                                'requestorRole' => array('type' => FILE_ASN1_TYPE_ENUMERATED,
                                    'mapping' => array(
                                        'roleClient',
                                        'roleParticipant'
                                    ),
                                ),
                                .
                                .
                                .

И когда я закодировал с моим массивом вывод на этом сайте: https://lapo.it/asn1js/

SEQUENCE(1 elem)
  SEQUENCE(2 elem)
    SEQUENCE(2 elem)
      IA5String 2.0
      SEQUENCE(6 elem)
        IA5String 2
        INTEGER(37 bit) 90000100526
        SEQUENCE(2 elem)
          INTEGER 3
          .
          .
          .

Но я хочу добавить тег Application 7 к своему ASN1, и я хочу получить такой вывод.

Application 7(2 elem)
  [0](2 elem)
    [0]2.0
    [1](6 elem)
      [0]2
      [1]90000100526
      [2](2 elem)
        [0](1 byte) 3
          .
          .
          .

Я хочу знать, возможно ли дать тег Application X с помощью phpseclip. Моя версия php 5.5. И так без каких-либо тегов, просто [0][1] теги для кодирования моего массива в ASN1.

Во-первых, возможно ли это как? Tnx. за ответы.

1 ответ

Решение

Это должно быть возможно, если вы используете последнюю версию phpseclib 1.0 (1.0.11 на этот пост). https://github.com/phpseclib/phpseclib/blob/1.0.11/tests/Unit/File/ASN1Test.php предоставляет пример:

public function testApplicationTag()
{
    $map = array(
        'type'     => FILE_ASN1_TYPE_SEQUENCE,
        'children' => array(
            // technically, default implies optional, but we'll define it as being optional, none-the-less, just to
            // reenforce that fact
            'version'             => array(
                // if class isn't present it's assumed to be FILE_ASN1_CLASS_UNIVERSAL or
                // (if constant is present) FILE_ASN1_CLASS_CONTEXT_SPECIFIC
                'class'    => FILE_ASN1_CLASS_APPLICATION,
                'cast'     => 2,
                'optional' => true,
                'explicit' => true,
                'default'  => 'v1',
                'type'     => FILE_ASN1_TYPE_INTEGER,
                'mapping' => array('v1', 'v2', 'v3')
            )
        )
    );
    $data = array('version' => 'v3');
    $asn1 = new File_ASN1();
    $str = $asn1->encodeDER($data, $map);
    $decoded = $asn1->decodeBER($str);
    $arr = $asn1->asn1map($decoded[0], $map);
    $this->assertSame($data, $arr);
}
Другие вопросы по тегам