BUPT密码工程课后作业5-ASN.1

 

BUPT密码工程课后作业5-ASN.1

要求1

陈述

要求一: 1、使用ASN.1编写一个数据结构。具体什么数据自己考虑。 2、分别使用asn1c、JavaAsn1Compiler等对这个数据结构进行编译。可以使用c/java/python进行编码,并存储,而后用另外一种编程语言进行解码,比如,用C编码,可以用java或者python解码; 3、对上述的数据结构,使用protobuffer实现一次。这里不强制要求不同的语言实现编码和解码。 要求一中的asn文件,protobuffer,编解码源代码,可执行的程序,代码说明书和要求二中的原始文件和解释文档需要一并提交上来,方便我检查。

相信很多人参考了这篇简书,但是里面有一些坑,为了让本不容易的生活稍微容易点,写了这篇希望能有一点儿帮助。

实验环境:Ubuntu18.04(asn1c) MacOS(java/python)

1 使用ASN.1编写一个数据结构

命名为rectangle.asn1

RectangleModule1 DEFINITIONS ::=
BEGIN
Rectangle ::= SEQUENCE {
    height  INTEGER,
    width   INTEGER,
    author  OCTET STRING,
    title OCTET STRING
}
END

2使用asn1c进行编译

安装asn1c

asn1c的github主页上面下载master文件包, 找到INSTALL.md文件,根据步骤安装。安装了半天发现有在线编译器,不过似乎没人维护也没办法使用了。

安装步骤如下:

  • 编译asn1c编译器
test -f configure || autoreconf -iv

./configure

make
  • 检查保证asn1c能够在平台正常使用,这一步用时较长,其实没什么用,有没有都可以。
make check

  • 安装
sudo make install
  • asn1c展示(用来检验是不是安装好了)
man asn1c

对数据结构进行编译

(先看输出再做)

asn1c -fnative-types rectangle.asn1

输出

-fnative-types: Deprecated option
Compiled Rectangle.c
Compiled Rectangle.h
Copied /usr/local/share/asn1c/OPEN_TYPE.h	-> OPEN_TYPE.h
Copied /usr/local/share/asn1c/OPEN_TYPE.c	-> OPEN_TYPE.c
Copied /usr/local/share/asn1c/constr_CHOICE.h	-> constr_CHOICE.h
Copied /usr/local/share/asn1c/INTEGER.h	-> INTEGER.h
Copied /usr/local/share/asn1c/INTEGER.c	-> INTEGER.c
Copied /usr/local/share/asn1c/NativeInteger.h	-> NativeInteger.h
Copied /usr/local/share/asn1c/NativeInteger.c	-> NativeInteger.c
Copied /usr/local/share/asn1c/constr_CHOICE.c	-> constr_CHOICE.c
Copied /usr/local/share/asn1c/constr_SEQUENCE.h	-> constr_SEQUENCE.h
Copied /usr/local/share/asn1c/constr_SEQUENCE.c	-> constr_SEQUENCE.c
Copied /usr/local/share/asn1c/asn_application.h	-> asn_application.h
Copied /usr/local/share/asn1c/asn_application.c	-> asn_application.c
Copied /usr/local/share/asn1c/asn_ioc.h	-> asn_ioc.h
Copied /usr/local/share/asn1c/asn_system.h	-> asn_system.h
Copied /usr/local/share/asn1c/asn_codecs.h	-> asn_codecs.h
Copied /usr/local/share/asn1c/asn_internal.h	-> asn_internal.h
Copied /usr/local/share/asn1c/asn_internal.c	-> asn_internal.c
Copied /usr/local/share/asn1c/asn_random_fill.h	-> asn_random_fill.h
Copied /usr/local/share/asn1c/asn_random_fill.c	-> asn_random_fill.c
Copied /usr/local/share/asn1c/asn_bit_data.h	-> asn_bit_data.h
Copied /usr/local/share/asn1c/asn_bit_data.c	-> asn_bit_data.c
Copied /usr/local/share/asn1c/OCTET_STRING.h	-> OCTET_STRING.h
Copied /usr/local/share/asn1c/OCTET_STRING.c	-> OCTET_STRING.c
Copied /usr/local/share/asn1c/BIT_STRING.h	-> BIT_STRING.h
Copied /usr/local/share/asn1c/BIT_STRING.c	-> BIT_STRING.c
Copied /usr/local/share/asn1c/asn_codecs_prim.c	-> asn_codecs_prim.c
Copied /usr/local/share/asn1c/asn_codecs_prim.h	-> asn_codecs_prim.h
Copied /usr/local/share/asn1c/ber_tlv_length.h	-> ber_tlv_length.h
Copied /usr/local/share/asn1c/ber_tlv_length.c	-> ber_tlv_length.c
Copied /usr/local/share/asn1c/ber_tlv_tag.h	-> ber_tlv_tag.h
Copied /usr/local/share/asn1c/ber_tlv_tag.c	-> ber_tlv_tag.c
Copied /usr/local/share/asn1c/ber_decoder.h	-> ber_decoder.h
Copied /usr/local/share/asn1c/ber_decoder.c	-> ber_decoder.c
Copied /usr/local/share/asn1c/der_encoder.h	-> der_encoder.h
Copied /usr/local/share/asn1c/der_encoder.c	-> der_encoder.c
Copied /usr/local/share/asn1c/constr_TYPE.h	-> constr_TYPE.h
Copied /usr/local/share/asn1c/constr_TYPE.c	-> constr_TYPE.c
Copied /usr/local/share/asn1c/constraints.h	-> constraints.h
Copied /usr/local/share/asn1c/constraints.c	-> constraints.c
Copied /usr/local/share/asn1c/xer_support.h	-> xer_support.h
Copied /usr/local/share/asn1c/xer_support.c	-> xer_support.c
Copied /usr/local/share/asn1c/xer_decoder.h	-> xer_decoder.h
Copied /usr/local/share/asn1c/xer_decoder.c	-> xer_decoder.c
Copied /usr/local/share/asn1c/xer_encoder.h	-> xer_encoder.h
Copied /usr/local/share/asn1c/xer_encoder.c	-> xer_encoder.c
Copied /usr/local/share/asn1c/per_support.h	-> per_support.h
Copied /usr/local/share/asn1c/per_support.c	-> per_support.c
Copied /usr/local/share/asn1c/per_decoder.h	-> per_decoder.h
Copied /usr/local/share/asn1c/per_decoder.c	-> per_decoder.c
Copied /usr/local/share/asn1c/per_encoder.h	-> per_encoder.h
Copied /usr/local/share/asn1c/per_encoder.c	-> per_encoder.c
Copied /usr/local/share/asn1c/per_opentype.h	-> per_opentype.h
Copied /usr/local/share/asn1c/per_opentype.c	-> per_opentype.c
Copied /usr/local/share/asn1c/oer_decoder.h	-> oer_decoder.h
Copied /usr/local/share/asn1c/oer_encoder.h	-> oer_encoder.h
Copied /usr/local/share/asn1c/oer_support.h	-> oer_support.h
Copied /usr/local/share/asn1c/oer_decoder.c	-> oer_decoder.c
Copied /usr/local/share/asn1c/oer_encoder.c	-> oer_encoder.c
Copied /usr/local/share/asn1c/oer_support.c	-> oer_support.c
Copied /usr/local/share/asn1c/OPEN_TYPE_oer.c	-> OPEN_TYPE_oer.c
Copied /usr/local/share/asn1c/INTEGER_oer.c	-> INTEGER_oer.c
Copied /usr/local/share/asn1c/BIT_STRING_oer.c	-> BIT_STRING_oer.c
Copied /usr/local/share/asn1c/OCTET_STRING_oer.c	-> OCTET_STRING_oer.c
Copied /usr/local/share/asn1c/NativeInteger_oer.c	-> NativeInteger_oer.c
Copied /usr/local/share/asn1c/constr_CHOICE_oer.c	-> constr_CHOICE_oer.c
Copied /usr/local/share/asn1c/constr_SEQUENCE_oer.c	-> constr_SEQUENCE_oer.c
Generated Makefile.am.libasncodec
Copied /usr/local/share/asn1c/converter-example.c	-> converter-example.c implicit
Generated pdu_collection.c
Generated converter-example.mk
Copied /usr/local/share/asn1c/converter-example.c	-> converter-example.c implicit
Generated pdu_collection.c
Generated Makefile.am.asn1convert

生成了一堆新文件,本以为这些文件会被放在asn1的目录下,但是看来是放在了执行命令的时候的目录,所以如果不希望有一堆文件堆的乱七八糟,还是先建立一个文件夹然后cd到文件夹再执行命令。

3使用Java进行编译

下载JAC.jar 文件夹里面有个How to run.txt,稍微阅读一下可以知道如何使用这个文件,即使不会java。

java -jar 这个位置是下载的JAC.jar的地址  -d 编译后生成文件的地址  -p rectangle rectangle.asn1的地址 

在执行这条命令后,生成的文件中(也就是-d后面的地址中的文件)

package rectangle;

/*
 * Created by JAC (Java Asn1 Compiler)
 */

import com.turkcelltech.jac.*;
import com.chaosinmotion.asn1.Tag;

public class Rectangle extends Sequence
{
	/**
	 * if you want to set/fill an element below, just call the setValue(..) method over its instance.
	 *
	 * To encode/decode your object, just call encode(..) decode(..) methods.
	 * See 'TestProject.java' in the project to examine encoding/decoding examples
	 */
	public ASN1Integer height = new ASN1Integer("height");
	public ASN1Integer width = new ASN1Integer("width");
	public OctetString author = new OctetString("author");
	public OctetString title = new OctetString("title");
	/* end of element declarations */
	
	/**
	* asn.1 SEQUENCE constructor
	*/
	public
	Rectangle()
	{
		super();
		setUpElements();
	}

	/**
	* asn.1 SEQUENCE constructor with its name
	*/
	public
	Rectangle(String name)
	{
		super(name);
		setUpElements();
	}
	

	protected void
	setUpElements()
	{
		super.addElement(height);
		super.addElement(width);
		super.addElement(author);
		super.addElement(title);
	/* end of element setup */
	}


}


在以上的类里面添加以下代码,来给数据结构赋值。以下的代码要包在上面的类里,也就是加在最后一个}的前面。

public static void main(String []args) {
  // 创建输出流变量
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  BerOutputStream out = new BerOutputStream(outStream);

  // 对rec这个类进行赋值
  // 赋值结果为rec(author= b'1234', title = b'1234', height = 1011, width = 21)
  Rectangle rec = new Rectangle();
  byte[] name = new byte[4];
  name[0] = '1';
  name[1] = '2';
  name[2] = '3';
  name[3] = '4';
  rec.author.setValue(name);
  rec.title.setValue(name);
  rec.height.setValue(1011);
  rec.width.setValue(21);

  // 对输出变量进行编码
  try {
    rec.encode(out);
    System.out.println(out.toString());
  }catch (java.io.IOException e1){
    System.out.println(e1);
  }

  // 将编码后的结果写入test_rec文件,此时文件是二进制数据
  File f = new File("test_rec");
  try{
    OutputStream outFile = new FileOutputStream(f);
    try{outFile.write(outStream.toByteArray());}
    catch (java.io.IOException e2){
      System.out.println(e2);
    }
  }catch(java.io.FileNotFoundException e1){
    System.out.println(e1);
  }
  }

运行这个java文件,这个时候发现了两个问题:

  • 少了库 解决方法:在java编译asn1文件之后的文件中,加入如下内容:
import com.chaosinmotion.asn1.*;
import java.io.*;
  • 错误: 找不到或无法加载主类 参考了这篇知乎回答,和这篇博客园,我想已经说的很清楚了,应该可以解决这个问题。

使用python进行解码

可以参考一下pyasn1的 文档内容,使用pip3来下载:pip3 install pyasn1

首先在python中定义相关的类

from pyasn1.type import univ, namedtype

class Rectangle(univ.Sequence):
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('height', univ.Integer()),
        namedtype.NamedType('width', univ.Integer()),
        namedtype.NamedType('author', univ.OctetString()),
        namedtype.NamedType('title', univ.OctetString()),
    )

然后首先读出文件中的内容,然后根据从文档里面看来的东西进行解码。

from pyasn1.codec.der.decoder import decode
text = open('/Users/jiru/Desktop/Desktop/大三下/密码工程/作业/课后作业/作业5/java/JavaAsn1Compiler/test_rec','rb').read()
received_record, rest_of_substrate = decode(text, asn1Spec = Rectangle())
for field in received_record:
    print('{} is {}'.format(field,received_record[field]))

然而pyasn1支持的编码格式比较少,只有BER,DER,如果想编码其他格式,需要使用到asn1tools,这里面没有仔细研究。

protobuffer实现

首先根据上述数据结构编写proto文件

message Rectangle {
  required int32 height = 1;
  required int32 width = 2;
  optional string author = 3;
  optional string title = 4;
}

下载protobuf.git 之后生成python,java,cpp文件

protoc --proto_path= rectangle.proto --python_out ./
protoc --proto_path= rectangle.proto --cpp_out ./
protoc --proto_path= rectangle.proto --java_out ./

要求2

陈述

要求二: 搜索一个使用ASN.1编码的公私密钥或者证书文件,对其中的DER进行详细解释。可以自己分析,也可以通过工具分析(比如asn1dump)。分析的过程需要写出数据结构的组成,就是写出TLV来;

证书获取

这里面我们来分析一下alipay的证书,首先如何从网站上面获取证书,第一步上到Alipay,然后点击小锁头小锁头

证书获得 这个搞了半天不知道证书哪里下载,后来发现原来是把这个图标拖出来就ok了。

使用工具

在github上面找到asn1dump工具,虽然感觉不是老师说的那个,是一个c语言写成的工具,但是也凑合用了。首先在文件的路径下make,然后./asn1dump /home/jiru/桌面/*.alipay.com.cer 输出如下分析内容。

000000: 30 82 09 38        2360: SEQUENCE
000004: 30 82 08 20        2080: . SEQUENCE
000008: A0 03                 3: . . [0]
00000A: 02 01                 1: . . . Integer
                               : 02
00000D: 02 10                16: . . Integer
                               : 02 A0 C6 88 0A 04 34 2A 55 87 5A 96 73 B9 A8 2D
00001F: 30 0D                13: . . SEQUENCE
000021: 06 09                 9: . . . ObjectIdentifier
                               : 2A 86 48 86 F7 0D 01 01 0B
00002C: 05 00                 0: . . . Null
00002E: 30 5B                91: . . SEQUENCE
000030: 31 0B                11: . . . SET
000032: 30 09                 9: . . . . SEQUENCE
000034: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 06
000039: 13 02                 2: . . . . . PrintableString
                               : 55 53
00003D: 31 15                21: . . . SET
00003F: 30 13                19: . . . . SEQUENCE
000041: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 0A
000046: 13 0C                12: . . . . . PrintableString
                               : 44 69 67 69 43 65 72 74 20 49 6E 63
000054: 31 19                25: . . . SET
000056: 30 17                23: . . . . SEQUENCE
000058: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 0B
00005D: 13 10                16: . . . . . PrintableString
                               : 77 77 77 2E 64 69 67 69 63 65 72 74 2E 63 6F 6D
00006F: 31 1A                26: . . . SET
000071: 30 18                24: . . . . SEQUENCE
000073: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 03
000078: 13 11                17: . . . . . PrintableString
                               : 53 65 63 75 72 65 20 53 69 74 65 20 43 41 20 47
                               : 32
00008B: 30 1E                30: . . SEQUENCE
00008D: 17 0D                13: . . . UTCTime
                               : 31 39 30 37 30 38 30 30 30 30 30 30 5A
00009C: 17 0D                13: . . . UTCTime
                               : 32 30 30 37 33 31 31 32 30 30 30 30 5A
0000AB: 30 70               112: . . SEQUENCE
0000AD: 31 0B                11: . . . SET
0000AF: 30 09                 9: . . . . SEQUENCE
0000B1: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 06
0000B6: 13 02                 2: . . . . . PrintableString
                               : 43 4E
0000BA: 31 11                17: . . . SET
0000BC: 30 0F                15: . . . . SEQUENCE
0000BE: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 07
0000C3: 13 08                 8: . . . . . PrintableString
                               : 53 68 61 6E 67 68 61 69
0000CD: 31 1B                27: . . . SET
0000CF: 30 19                25: . . . . SEQUENCE
0000D1: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 0A
0000D6: 13 12                18: . . . . . PrintableString
                               : 41 6C 69 70 61 79 2E 63 6F 6D 20 43 6F 2E 2C 4C
                               : 74 64
0000EA: 31 1A                26: . . . SET
0000EC: 30 18                24: . . . . SEQUENCE
0000EE: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 0B
0000F3: 13 11                17: . . . . . PrintableString
                               : 53 65 63 75 72 65 20 57 65 62 20 53 65 72 76 65
                               : 72
000106: 31 15                21: . . . SET
000108: 30 13                19: . . . . SEQUENCE
00010A: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 04 03
00010F: 0C 0C                12: . . . . . UTF8String
                               : 2A 2E 61 6C 69 70 61 79 2E 63 6F 6D
00011D: 30 82 01 22         290: . . SEQUENCE
000121: 30 0D                13: . . . SEQUENCE
000123: 06 09                 9: . . . . ObjectIdentifier
                               : 2A 86 48 86 F7 0D 01 01 01
00012E: 05 00                 0: . . . . Null
000130: 03 82 01 0F         271: . . . BitString
                               : 00 (unused bits)
                               : 30 82 01 0A 02 82 01 01 00 AE 4D 9D C7 C6 7C EE
                               : 0B A5 2D 0F 5F 6B B2 00 D5 8E 96 16 6C 4A 05 D4
                               : 73 B5 10 51 B5 71 6B AD 34 CB 26 59 56 6A 43 8D
                               : 06 27 A9 CA 6A 76 7B D1 53 3A B9 8F E3 E9 33 FD
                               : FF 92 44 37 89 31 5B 30 1A DD 53 F7 01 9A C1 9D
                               : 1A DF 63 D5 C0 9D 48 3E 58 08 8D 72 EE 40 F8 CF
                               : 78 A3 16 80 1C 4D D3 77 0E C1 E0 67 91 1D 0D 70
                               : 29 76 8A 93 60 71 A7 6B 1D A0 C9 C4 4C 97 F7 7D
                               : B2 0D A9 15 42 F6 A4 40 B3 B9 4C F7 83 E4 CF 64
                               : 97 F0 D4 15 A5 80 A8 12 D3 BF 58 0E 08 03 39 A4
                               : D7 23 A9 F8 AE 95 F4 B1 CA FC 40 CB D0 0A D4 64
                               : 73 E0 F1 A7 49 DC 54 5F 1C D7 B5 0D F0 25 AE E5
                               : 87 64 58 5F 9E 7C DF 84 AA 65 E6 91 D5 78 F2 CF
                               : A4 F6 51 02 08 D8 21 08 BC 35 9C 83 58 9F C0 57
                               : 3D 45 C3 F2 5A D4 60 78 1A 6F 62 D8 8D D1 EC 5A
                               : 7D 03 E6 D3 D6 9E DA B1 CA D9 C2 94 29 1C 56 A5
                               : 71 8D DA 31 75 AC A4 4D 83 02 03 01 00 01
000243: A3 82 05 E1        1505: . . [3]
000247: 30 82 05 DD        1501: . . . SEQUENCE
00024B: 30 1F                31: . . . . SEQUENCE
00024D: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 23
000252: 04 18                24: . . . . . OctetString
                               : 30 16 80 14 C4 11 7E 88 40 86 C2 41 BF 65 F3 1A
                               : E1 B4 53 40 A3 AB EC 7D
00026C: 30 1D                29: . . . . SEQUENCE
00026E: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 0E
000273: 04 16                22: . . . . . OctetString
                               : 04 14 93 3E 9D 04 64 C2 62 59 C5 A1 24 E3 29 0B
                               : 4E 50 08 05 CE D3
00028B: 30 82 03 2A         810: . . . . SEQUENCE
00028F: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 11
000294: 04 82 03 21         801: . . . . . OctetString
                               : 30 82 03 1D 82 0C 2A 2E 61 6C 69 70 61 79 2E 63
                               : 6F 6D 82 0A 61 6C 69 70 61 79 2E 63 6F 6D 82 0D
                               : 2A 2E 61 6C 69 6C 6F 61 6E 2E 63 6F 6D 82 0B 61
                               : 6C 69 6C 6F 61 6E 2E 63 6F 6D 82 12 2A 2E 61 6C
                               : 69 70 61 79 2D 63 6C 6F 75 64 2E 63 6F 6D 82 10
                               : 61 6C 69 70 61 79 2D 63 6C 6F 75 64 2E 63 6F 6D
                               : 82 10 2A 2E 61 6C 69 70 61 79 70 6C 75 73 2E 63
                               : 6F 6D 82 0E 61 6C 69 70 61 79 70 6C 75 73 2E 63
                               : 6F 6D 82 10 2A 2E 61 6C 69 70 61 79 2D 65 63 6F
                               : 2E 63 6F 6D 82 0E 61 6C 69 70 61 79 2D 65 63 6F
                               : 2E 63 6F 6D 82 13 2A 2E 61 6E 74 2D 66 69 6E 61
                               : 6E 63 69 61 6C 2E 63 6F 6D 82 11 61 6E 74 2D 66
                               : 69 6E 61 6E 63 69 61 6C 2E 63 6F 6D 82 0E 2A 2E
                               : 61 6E 74 2D 6F 70 65 6E 2E 63 6F 6D 82 0C 61 6E
                               : 74 2D 6F 70 65 6E 2E 63 6F 6D 82 0D 2A 2E 61 6E
                               : 74 2D 62 69 7A 2E 63 6F 6D 82 0B 61 6E 74 2D 62
                               : 69 7A 2E 63 6F 6D 82 10 2A 2E 61 6E 74 66 6F 72
                               : 74 75 6E 65 2E 63 6F 6D 82 0E 61 6E 74 66 6F 72
                               : 74 75 6E 65 2E 63 6F 6D 82 0E 2A 2E 61 6E 74 67
                               : 72 6F 75 70 2E 63 6F 6D 82 0C 61 6E 74 67 72 6F
                               : 75 70 2E 63 6F 6D 82 0D 2A 2E 61 6E 74 73 64 61
                               : 71 2E 63 6F 6D 82 0B 61 6E 74 73 64 61 71 2E 63
                               : 6F 6D 82 0E 2A 2E 65 62 75 63 6B 6C 65 72 2E 63
                               : 6F 6D 82 0C 65 62 75 63 6B 6C 65 72 2E 63 6F 6D
                               : 82 10 2A 2E 6D 61 79 69 79 75 6E 62 61 6F 2E 63
                               : 6F 6D 82 0E 6D 61 79 69 79 75 6E 62 61 6F 2E 63
                               : 6F 6D 82 0B 2A 2E 6D 79 62 61 6E 6B 2E 63 6E 82
                               : 09 6D 79 62 61 6E 6B 2E 63 6E 82 0C 2A 2E 66 75
                               : 6E 64 31 32 33 2E 63 6E 82 0A 66 75 6E 64 31 32
                               : 33 2E 63 6E 82 0C 2A 2E 6B 6F 75 62 65 69 2E 63
                               : 6F 6D 82 0A 6B 6F 75 62 65 69 2E 63 6F 6D 82 0D
                               : 2A 2E 7A 6D 78 79 2E 63 6F 6D 2E 63 6E 82 1A 70
                               : 61 79 6D 65 6E 74 2E 73 69 6E 6F 70 61 79 6D 65
                               : 6E 74 2E 63 6F 6D 2E 63 6E 82 0B 7A 6D 78 79 2E
                               : 63 6F 6D 2E 63 6E 82 0E 2A 2E 7A 68 69 73 68 65
                               : 6E 67 2E 63 6F 6D 82 0B 2A 2E 61 6C 69 70 61 79
                               : 2E 68 6B 82 0C 2A 2E 61 6E 74 66 69 6E 2E 63 6F
                               : 6D 82 09 2A 2E 78 69 6E 2E 78 69 6E 82 17 6D 69
                               : 6E 69 61 70 70 2E 6F 70 65 6E 2E 61 6C 69 70 61
                               : 79 2E 63 6F 6D 82 11 2A 2E 6F 70 65 6E 2E 61 6C
                               : 69 70 61 79 2E 63 6F 6D 82 10 2A 2E 61 6E 74 66
                               : 69 6E 2D 69 6E 63 2E 63 6F 6D 82 0E 61 6E 74 66
                               : 69 6E 2D 69 6E 63 2E 63 6F 6D 82 0A 73 73 64 61
                               : 74 61 2E 63 6F 6D 82 0C 2A 2E 73 73 64 61 74 61
                               : 2E 63 6F 6D 82 0B 2A 2E 79 69 64 75 6E 2E 63 6F
                               : 6D 82 09 79 69 64 75 6E 2E 63 6F 6D 82 0E 2A 2E
                               : 68 75 69 6A 75 63 61 69 2E 63 6F 6D 82 0E 2A 2E
                               : 61 61 2E 7A 61 6D 63 73 2E 63 6F 6D 82 0B 2A 2E
                               : 7A 61 6D 63 73 2E 63 6F 6D 82 0B 2A 2E 61 6C 69
                               : 70 61 79 2E 63 6E 82 09 61 6C 69 70 61 79 2E 63
                               : 6E
0005B9: 30 0E                14: . . . . SEQUENCE
0005BB: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 0F
0005C0: 01 01                 1: . . . . . Boolean
                               : FF
0005C3: 04 04                 4: . . . . . OctetString
                               : 03 02 05 A0
0005C9: 30 1D                29: . . . . SEQUENCE
0005CB: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 25
0005D0: 04 16                22: . . . . . OctetString
                               : 30 14 06 08 2B 06 01 05 05 07 03 01 06 08 2B 06
                               : 01 05 05 07 03 02
0005E8: 30 6F               111: . . . . SEQUENCE
0005EA: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 1F
0005EF: 04 68               104: . . . . . OctetString
                               : 30 66 30 31 A0 2F A0 2D 86 2B 68 74 74 70 3A 2F
                               : 2F 63 72 6C 33 2E 64 69 67 69 63 65 72 74 2E 63
                               : 6F 6D 2F 53 65 63 75 72 65 53 69 74 65 43 41 47
                               : 32 2E 63 72 6C 30 31 A0 2F A0 2D 86 2B 68 74 74
                               : 70 3A 2F 2F 63 72 6C 34 2E 64 69 67 69 63 65 72
                               : 74 2E 63 6F 6D 2F 53 65 63 75 72 65 53 69 74 65
                               : 43 41 47 32 2E 63 72 6C
000659: 30 4C                76: . . . . SEQUENCE
00065B: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 20
000660: 04 45                69: . . . . . OctetString
                               : 30 43 30 37 06 09 60 86 48 01 86 FD 6C 01 01 30
                               : 2A 30 28 06 08 2B 06 01 05 05 07 02 01 16 1C 68
                               : 74 74 70 73 3A 2F 2F 77 77 77 2E 64 69 67 69 63
                               : 65 72 74 2E 63 6F 6D 2F 43 50 53 30 08 06 06 67
                               : 81 0C 01 02 02
0006A7: 30 6C               108: . . . . SEQUENCE
0006A9: 06 08                 8: . . . . . ObjectIdentifier
                               : 2B 06 01 05 05 07 01 01
0006B3: 04 60                96: . . . . . OctetString
                               : 30 5E 30 21 06 08 2B 06 01 05 05 07 30 01 86 15
                               : 68 74 74 70 3A 2F 2F 6F 63 73 70 2E 64 63 6F 63
                               : 73 70 2E 63 6E 30 39 06 08 2B 06 01 05 05 07 30
                               : 02 86 2D 68 74 74 70 3A 2F 2F 63 72 6C 2E 64 69
                               : 67 69 63 65 72 74 2D 63 6E 2E 63 6F 6D 2F 53 65
                               : 63 75 72 65 53 69 74 65 43 41 47 32 2E 63 72 74
000715: 30 09                 9: . . . . SEQUENCE
000717: 06 03                 3: . . . . . ObjectIdentifier
                               : 55 1D 13
00071C: 04 02                 2: . . . . . OctetString
                               : 30 00
000720: 30 82 01 04         260: . . . . SEQUENCE
000724: 06 0A                10: . . . . . ObjectIdentifier
                               : 2B 06 01 04 01 D6 79 02 04 02
000730: 04 81 F5            245: . . . . . OctetString
                               : 04 81 F2 00 F0 00 76 00 BB D9 DF BC 1F 8A 71 B5
                               : 93 94 23 97 AA 92 7B 47 38 57 95 0A AB 52 E8 1A
                               : 90 96 64 36 8E 1E D1 85 00 00 01 6B D0 3E 9B E4
                               : 00 00 04 03 00 47 30 45 02 21 00 85 2C A4 3D 7B
                               : 40 EE 94 39 EA 11 2F 02 68 B0 07 B5 96 91 6D C4
                               : E0 2D 0D 6F 7A 79 29 10 31 14 7D 02 20 3E EF F1
                               : 3E C4 77 6B EB 39 AF C9 75 28 14 DD 0A E1 DD 0A
                               : 10 F4 E2 AC 1C BC 03 7F FC 16 7D 94 53 00 76 00
                               : 87 75 BF E7 59 7C F8 8C 43 99 5F BD F3 6E FF 56
                               : 8D 47 56 36 FF 4A B5 60 C1 B4 EA FF 5E A0 83 0F
                               : 00 00 01 6B D0 3E 98 0D 00 00 04 03 00 47 30 45
                               : 02 20 49 FF 52 85 6C A0 93 9C D9 84 AC 81 3F B5
                               : B5 C6 91 93 81 AD CB 26 C2 2B 7E F3 49 4B 45 FF
                               : 87 F1 02 21 00 87 55 1D D7 BE CD E3 01 10 09 0F
                               : 03 E8 AF A1 9A 6B FF 03 0B B5 29 FD 6D FD 10 2F
                               : 16 7E D4 48 52
000828: 30 0D                13: . SEQUENCE
00082A: 06 09                 9: . . ObjectIdentifier
                               : 2A 86 48 86 F7 0D 01 01 0B
000835: 05 00                 0: . . Null
000837: 03 82 01 01         257: . BitString
                               : 00 (unused bits)
                               : A3 0A BE 22 F6 9F EA C9 CD 34 04 88 FD B2 2B 99
                               : CB 86 87 9E D9 54 4E 57 5F 8C F9 F9 7A 32 C5 35
                               : AC BB BD 1F 7B D3 D0 E1 D3 BC CC 2E 0B 0F D9 50
                               : 40 D9 8D 47 3A 0A 68 71 D9 00 8E 01 3A 9D 2C 46
                               : BF 40 65 A0 41 BA 92 B3 CB AF C3 5B 56 0D 67 C4
                               : B5 44 17 0E 4C DF 87 D8 64 41 13 E7 23 16 31 E3
                               : 73 AB F3 1F 51 53 2B 79 59 E5 4F 96 93 1C ED AE
                               : F1 85 AA 82 28 FF F9 6D F1 19 95 B2 1F 21 B4 43
                               : AD D6 02 DA 65 FE 2E 7B D6 2D 10 C1 D4 2B 96 93
                               : 28 FE 51 07 F0 7D 0D 64 B4 D6 24 50 1D 3D 0F DC
                               : 0D 67 B3 97 CF 3B F5 A1 CB 75 06 DA FE 31 1C 97
                               : 13 A9 45 29 4F 74 47 39 35 AF 9D D3 21 47 8A DE
                               : CE DD AB 7B D5 E5 59 D6 53 53 E9 D0 32 38 B6 D2
                               : BA 65 AD 2D 8C D0 32 13 B7 82 30 A1 4A 13 D0 55
                               : DA A8 9D 05 5D 35 1D B8 BD 94 9E D3 F0 9E 41 4D
                               : 70 E0 37 8D 38 00 01 F0 88 99 3A 11 41 98 D9 06