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