예제 #1
0
def test_goose_pdu_all_data_structure_1():
    from pyasn1 import debug
    debug.setLogger(debug.Debug('all'))
    encoded_data = (
        "\xa2\x12"
        "\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xaa\xe0\xa4\x6f\xf3"
        "\x5e\x92"
    )
    expected = False
    iec61850_goose_pdu = IECGoosePDU().clone()
    all_data = iec61850_goose_pdu.getComponentByName('allData')
    data_item_1 = all_data.getComponentByPosition(0)
    structure = data_item_1.getComponentByName('structure')
    g = IECGoosePDU().subtype(
        implicitTag=tag.Tag(
            tag.tagClassApplication,
            tag.tagFormatConstructed,
            1
        )
    )
    decoded_data, unprocessed_trail = decoder.decode(
        encoded_data,
        asn1Spec=g
    )
    assert expected == decoded_data
예제 #2
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_t():
    encoded_data = ("\x84\x08" "\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92")
    expected = "\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92"
    iec61850_goose_pdu = IECGoosePDU().clone()
    time = iec61850_goose_pdu.getComponentByName('t')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=time)
    assert expected == decoded_data
예제 #3
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_test():
    encoded_data = ("\x87\x01" "\x00")
    expected = False
    iec61850_goose_pdu = IECGoosePDU().clone()
    test = iec61850_goose_pdu.getComponentByName('test')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=test)
    assert expected == decoded_data
예제 #4
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_confRev():
    encoded_data = ("\x88\x01" "\x02")
    expected = 2
    iec61850_goose_pdu = IECGoosePDU().clone()
    conf_rev = iec61850_goose_pdu.getComponentByName('confRev')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=conf_rev)
    assert expected == decoded_data
예제 #5
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_sqNum():
    encoded_data = ("\x86\x02" "\x3f\x40")
    expected = 16192
    iec61850_goose_pdu = IECGoosePDU().clone()
    sqNum = iec61850_goose_pdu.getComponentByName('sqNum')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=sqNum)
    assert expected == decoded_data
예제 #6
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_stNum():
    encoded_data = ("\x85\x01" "\x60")
    expected = 96
    iec61850_goose_pdu = IECGoosePDU().clone()
    stNum = iec61850_goose_pdu.getComponentByName('stNum')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=stNum)
    assert expected == decoded_data
예제 #7
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_time_allowed_to_live():
    encoded_data = "\x81\x02\x07\xd0"
    expected = 2000
    iec61850_goose_pdu = IECGoosePDU().clone()
    timeAllowedtoLive = iec61850_goose_pdu.getComponentByName(
        'timeAllowedtoLive')
    decoded_data, unprocessed_trail = decoder.decode(
        encoded_data, asn1Spec=timeAllowedtoLive)
    assert expected == decoded_data
예제 #8
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_num_dat_set_entries():
    encoded_data = ("\x8a\x01" "\x05")
    expected = 5
    iec61850_goose_pdu = IECGoosePDU().clone()
    num_dat_set_entries = iec61850_goose_pdu.getComponentByName(
        'numDatSetEntries')
    decoded_data, unprocessed_trail = decoder.decode(
        encoded_data, asn1Spec=num_dat_set_entries)
    assert expected == decoded_data
예제 #9
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_all_data_bit_string():
    encoded_data = ("\x84\x03" "\x03\x00\x00")
    expected = 0
    iec61850_goose_pdu = IECGoosePDU().clone()
    all_data = iec61850_goose_pdu.getComponentByName('allData')
    data_item_1 = all_data.getComponentByPosition(0)
    bit_string = data_item_1.getComponentByName('bit-string')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=bit_string)
    assert expected == decoded_data.asInteger()
예제 #10
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_all_data_utc_time():
    encoded_data = ("\x91\x08" "\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92")
    expected = "\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92"
    iec61850_goose_pdu = IECGoosePDU().clone()
    all_data = iec61850_goose_pdu.getComponentByName('allData')
    data_item_1 = all_data.getComponentByPosition(0)
    utc_time = data_item_1.getComponentByName('utc-time')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=utc_time)
    assert expected == decoded_data
예제 #11
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_nds_com():
    from pyasn1 import debug
    debug.setLogger(debug.Debug('all'))
    encoded_data = ("\x89\x01" "\x00")
    expected = False
    iec61850_goose_pdu = IECGoosePDU().clone()
    nds_com = iec61850_goose_pdu.getComponentByName('ndsCom')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=nds_com)
    assert expected == decoded_data
예제 #12
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_go_id():
    encoded_data = (
        "\x83\x19"
        "\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30\x44\x73\x65\x74\x5f\x53"
        "\x75\x62\x6e\x65\x74\x43\x74\x72\x6c")
    expected = "11F_13_100Dset_SubnetCtrl"
    iec61850_goose_pdu = IECGoosePDU().clone()
    go_id = iec61850_goose_pdu.getComponentByName('goID')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=go_id)
    assert expected == decoded_data
예제 #13
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_all_data_boolean():
    from pyasn1 import debug
    debug.setLogger(debug.Debug('all'))
    encoded_data = ("\x83\x01" "\x00")
    expected = False
    iec61850_goose_pdu = IECGoosePDU().clone()
    all_data = iec61850_goose_pdu.getComponentByName('allData')
    data_item_1 = all_data.getComponentByPosition(0)
    boolean = data_item_1.getComponentByName('boolean')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=boolean)
    assert expected == decoded_data
예제 #14
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_gocbRef():
    encoded_data = (
        "\x80\x2b"
        "\x44\x45\x4e\x4e\x59\x5f\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30"
        "\x43\x46\x47\x2f\x4c\x4c\x4e\x30\x24\x47\x4f\x24\x44\x73\x65\x74"
        "\x5f\x53\x75\x62\x6e\x65\x74\x43\x74\x72\x6c")
    expected = "DENNY_11F_13_100CFG/LLN0$GO$Dset_SubnetCtrl"
    iec61850_goose_pdu = IECGoosePDU().clone()
    gocbRef = iec61850_goose_pdu.getComponentByName('gocbRef')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=gocbRef)
    assert expected == decoded_data
예제 #15
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_dat_set():
    encoded_data = (
        "\x82\x22"
        "\x44\x45\x4e\x4e\x59\x5f\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30"
        "\x43\x46\x47\x2f\x4c\x4c\x4e\x30\x24\x47\x5f\x4e\x65\x74\x43\x74"
        "\x72\x6c")
    expected = "DENNY_11F_13_100CFG/LLN0$G_NetCtrl"
    iec61850_goose_pdu = IECGoosePDU().clone()
    dat_set = iec61850_goose_pdu.getComponentByName('datSet')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=dat_set)
    assert expected == decoded_data
예제 #16
0
def test_goose_pdu_decode():
    from pyasn1 import debug
    debug.setLogger(debug.Debug('all'))
    encoded_data = (
        "\x61\x81\xf3\x80\x2b\x44\x45\x4e"
        "\x4e\x59\x5f\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30\x43\x46\x47"
        "\x2f\x4c\x4c\x4e\x30\x24\x47\x4f\x24\x44\x73\x65\x74\x5f\x53\x75"
        "\x62\x6e\x65\x74\x43\x74\x72\x6c\x81\x02\x07\xd0\x82\x22\x44\x45"
        "\x4e\x4e\x59\x5f\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30\x43\x46"
        "\x47\x2f\x4c\x4c\x4e\x30\x24\x47\x5f\x4e\x65\x74\x43\x74\x72\x6c"
        "\x83\x19\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30\x44\x73\x65\x74"
        "\x5f\x53\x75\x62\x6e\x65\x74\x43\x74\x72\x6c\x84\x08\x5a\xaa\xe0"
        "\xa4\x6f\xf3\x5e\x92\x85\x01\x60\x86\x02\x3f\x40\x87\x01\x00\x88"
        "\x01\x02\x89\x01\x00\x8a\x01\x05\xab\x64\xa2\x12\x83\x01\x00\x84"
        "\x03\x03\x00\x00\x91\x08\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92\xa2\x12"
        "\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xa9\x39\x5a\x03\xea"
        "\x4a\x92\xa2\x12\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xa9"
        "\x39\x5a\x03\xea\x4a\x92\xa2\x12\x83\x01\x00\x84\x03\x03\x00\x00"
        "\x91\x08\x5a\xa9\x39\x5a\x03\xea\x4a\x92\xa2\x12\x83\x01\x00\x84"
        "\x03\x03\x00\x00\x91\x08\x5a\xaa\xd1\x7d\xd2\x48\x21\x92"
    )
    g = IECGoosePDU().subtype(
        implicitTag=tag.Tag(
            tag.tagClassApplication,
            tag.tagFormatConstructed,
            1
        )
    )
    decoded_data, unprocessed_trail = decoder.decode(
        encoded_data,
        asn1spec=g
    )
def gooseASN1_DataPrint(data):
    for e in list(IECGoosePDU()):
        if not data[e].hasValue():
            continue
        if type(data[e]) == char.VisibleString:
            print('%s: %s' % (e, str(data[e])))
            continue
        if type(data[e]) == univ.Integer:
            print('%s: %s' % (e, int(data[e])))
            continue
        if type(data[e]) == UtcTime:
            #print('%s: %s'%(e,datetime.datetime.fromtimestamp(int.from_bytes(bytearray(data[e])[:4],'big')).strftime('%Y-%m-%d %H:%M:%S')))
            print('%s: %s' % (e, timeStrFrom64bits(bytearray(data[e])[:4])))
            continue
        if type(data[e]) == univ.Boolean:
            print('%s: %s' % (e, str(data[e])))
            continue
        if type(data[e]) == AllData:
            print('%s' % (e))
            for e in data.getComponentByName('allData'):
                for v in e.values():
                    print('    %s' % (v))
            continue
        if type(data[e]) == univ.OctetString:
            print('%s: %s' % (e, str(data[e])))
            continue
예제 #18
0
def gooseASN1_DataPrint_vendorA(data):
    print('\n\n')
    for e in list(IECGoosePDU()):
        if not gd[e].hasValue():
            continue
        if type(gd[e]) == char.VisibleString:
            print('%s: %s' % (e, str(gd[e])))
            continue
        if type(gd[e]) == univ.Integer:
            print('%s: %s' % (e, int(gd[e])))
            continue
        if type(gd[e]) == UtcTime:
            print('%s: %s' %
                  (e,
                   datetime.datetime.fromtimestamp(
                       int.from_bytes(bytearray(gd[e])[:4],
                                      'big')).strftime('%Y-%m-%d %H:%M:%S')))
            continue
        if type(gd[e]) == univ.Boolean:
            print('%s: %s' % (e, str(gd[e])))
            continue
        if type(gd[e]) == AllData:
            print('%s' % (e))
            tmpstr = []
            for e in gd.getComponentByName('allData'):
                for v in e.values():
                    tmpstr.append(str(v))
            # Some vendors send two values for each value. Value1) the actual value Value2) quality
            # Join these into colon seperated values for readability
            for e in [': '.join(x) for x in zip(tmpstr[0::2], tmpstr[1::2])]:
                print('%s%s' % ('    ', e))
            continue
        if type(gd[e]) == univ.OctetString:
            print('%s: %s' % (e, str(gd[e])))
            continue
예제 #19
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_pdu_all_data():
    from pyasn1 import debug
    debug.setLogger(debug.Debug('all'))
    encoded_data = (
        "\xab\x64"
        "\xa2\x12\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xaa\xe0\xa4"
        "\x6f\xf3\x5e\x92\xa2\x12\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08"
        "\x5a\xa9\x39\x5a\x03\xea\x4a\x92\xa2\x12\x83\x01\x00\x84\x03\x03"
        "\x00\x00\x91\x08\x5a\xa9\x39\x5a\x03\xea\x4a\x92\xa2\x12\x83\x01"
        "\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xa9\x39\x5a\x03\xea\x4a\x92"
        "\xa2\x12\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xaa\xd1\x7d"
        "\xd2\x48\x21\x92")
    expected = 5
    iec61850_goose_pdu = IECGoosePDU().clone()
    all_data = iec61850_goose_pdu.getComponentByName('allData')
    decoded_data, unprocessed_trail = decoder.decode(encoded_data,
                                                     asn1Spec=all_data)
    assert expected == decoded_data
def goose_pdu_decode(encoded_data):

    # Debugging on
    if DEBUG > 2:
        from pyasn1 import debug
        debug.setLogger(debug.Debug('all'))

    g = IECGoosePDU().subtype(implicitTag=tag.Tag(tag.tagClassApplication,
                                                  tag.tagFormatConstructed, 1))
    decoded_data, unprocessed_trail = decoder.decode(encoded_data, asn1Spec=g)
    # This should work, but not sure.
    return decoded_data
예제 #21
0
파일: test_goose.py 프로젝트: cutaway/goose
def test_goose_message():
    g = IECGoosePDU().subtype(implicitTag=tag.Tag(tag.tagClassApplication,
                                                  tag.tagFormatConstructed, 1))
    g.setComponentByName('gocbRef',
                         'DENNY_11F_13_100CFG/LLN0$GO$Dset_SubnetCtrl')
    g.setComponentByName('timeAllowedtoLive', 2000)
    g.setComponentByName('datSet', 'DENNY_11F_13_100CFG/LLN0$G_NetCtrl')
    g.setComponentByName('goID', '11F_13_100Dset_SubnetCtrl')
    g.setComponentByName('t', b'\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92')
    g.setComponentByName('stNum', 96)
    g.setComponentByName('sqNum', 16192)
    g.setComponentByName('test', False)
    g.setComponentByName('confRev', 2)
    g.setComponentByName('ndsCom', False)
    g.setComponentByName('numDatSetEntries', 5)
    all_data = AllData().subtype(
        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 11))
    inner1 = univ.SequenceOf(componentType=Data()).subtype(
        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))
    inner1.setComponentByPosition(0,
                                  Data().setComponentByName("boolean", False))
    inner1.setComponentByPosition(
        1,
        Data().setComponentByName("bit-string", "'0000000000000'B"))
    inner1.setComponentByPosition(
        2,
        Data().setComponentByName('utc-time',
                                  b'\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92'))
    data1 = Data()
    data1.setComponentByName('structure', inner1)
    inner2 = univ.SequenceOf(componentType=Data()).subtype(
        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))
    inner2.setComponentByPosition(0,
                                  Data().setComponentByName("boolean", False))
    inner2.setComponentByPosition(
        1,
        Data().setComponentByName("bit-string", "'0000000000000'B"))
    inner2.setComponentByPosition(
        2,
        Data().setComponentByName('utc-time',
                                  b'\x5a\xa9\x39\x5a\x03\xea\x4a\x92'))
    data2 = Data()
    data2.setComponentByName('structure', inner2)
    inner3 = univ.SequenceOf(componentType=Data()).subtype(
        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))
    inner3.setComponentByPosition(0,
                                  Data().setComponentByName("boolean", False))
    inner3.setComponentByPosition(
        1,
        Data().setComponentByName("bit-string", "'0000000000000'B"))
    inner3.setComponentByPosition(
        2,
        Data().setComponentByName('utc-time',
                                  b'\x5a\xa9\x39\x5a\x03\xea\x4a\x92'))
    data3 = Data()
    data3.setComponentByName('structure', inner3)
    inner4 = univ.SequenceOf(componentType=Data()).subtype(
        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))
    inner4.setComponentByPosition(0,
                                  Data().setComponentByName("boolean", False))
    inner4.setComponentByPosition(
        1,
        Data().setComponentByName("bit-string", "'0000000000000'B"))
    inner4.setComponentByPosition(
        2,
        Data().setComponentByName('utc-time',
                                  b'\x5a\xa9\x39\x5a\x03\xea\x4a\x92'))
    data4 = Data()
    data4.setComponentByName('structure', inner4)
    inner5 = univ.SequenceOf(componentType=Data()).subtype(
        implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))
    inner5.setComponentByPosition(0,
                                  Data().setComponentByName("boolean", False))
    inner5.setComponentByPosition(
        1,
        Data().setComponentByName("bit-string", "'0000000000000'B"))
    inner5.setComponentByPosition(
        2,
        Data().setComponentByName('utc-time',
                                  b'\x5a\xaa\xd1\x7d\xd2\x48\x21\x92'))
    data5 = Data()
    data5.setComponentByName('structure', inner5)
    all_data.setComponentByPosition(0, data1)
    all_data.setComponentByPosition(1, data2)
    all_data.setComponentByPosition(2, data3)
    all_data.setComponentByPosition(3, data4)
    all_data.setComponentByPosition(4, data5)
    g.setComponentByName('allData', all_data)
    calculated = raw(
        Ether(dst='01:0c:cd:01:00:00', src='00:30:a7:13:2e:92') /
        Dot1Q(vlan=10, type=0x88b8, prio=6) / GOOSE(appid=int(0x0000)) /
        encoder.encode(g), )
    expected = (
        b"\x01\x0c\xcd\x01\x00\x00\x00\x30\xa7\x13\x2e\x92\x81\x00\xc0\x0a"
        b"\x88\xb8\x00\x00\x00\xfe\x00\x00\x00\x00\x61\x81\xf3\x80\x2b\x44"
        b"\x45\x4e\x4e\x59\x5f\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30\x43"
        b"\x46\x47\x2f\x4c\x4c\x4e\x30\x24\x47\x4f\x24\x44\x73\x65\x74\x5f"
        b"\x53\x75\x62\x6e\x65\x74\x43\x74\x72\x6c\x81\x02\x07\xd0\x82\x22"
        b"\x44\x45\x4e\x4e\x59\x5f\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30"
        b"\x43\x46\x47\x2f\x4c\x4c\x4e\x30\x24\x47\x5f\x4e\x65\x74\x43\x74"
        b"\x72\x6c\x83\x19\x31\x31\x46\x5f\x31\x33\x5f\x31\x30\x30\x44\x73"
        b"\x65\x74\x5f\x53\x75\x62\x6e\x65\x74\x43\x74\x72\x6c\x84\x08\x5a"
        b"\xaa\xe0\xa4\x6f\xf3\x5e\x92\x85\x01\x60\x86\x02\x3f\x40\x87\x01"
        b"\x00\x88\x01\x02\x89\x01\x00\x8a\x01\x05\xab\x64\xa2\x12\x83\x01"
        b"\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xaa\xe0\xa4\x6f\xf3\x5e\x92"
        b"\xa2\x12\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xa9\x39\x5a"
        b"\x03\xea\x4a\x92\xa2\x12\x83\x01\x00\x84\x03\x03\x00\x00\x91\x08"
        b"\x5a\xa9\x39\x5a\x03\xea\x4a\x92\xa2\x12\x83\x01\x00\x84\x03\x03"
        b"\x00\x00\x91\x08\x5a\xa9\x39\x5a\x03\xea\x4a\x92\xa2\x12\x83\x01"
        b"\x00\x84\x03\x03\x00\x00\x91\x08\x5a\xaa\xd1\x7d\xd2\x48\x21\x92")
    assert calculated[0:7] == expected[0:7]  # destination MAC
    assert calculated[7:12] == expected[7:12]  # source MAC
    assert calculated[12:14] == expected[12:14]  # type
    assert calculated[14:18] == expected[14:18]  # 802.1Q
    assert calculated[18:20] == expected[18:20]  # APPID
    assert calculated[20:22] == expected[20:22]  # Length
    assert calculated[22:26] == expected[22:26]  # Reserved1 and Reserved2
    assert calculated[26:28] == expected[26:28]  # goosePDU asn.1 tag
    assert calculated[28:74] == expected[28:74]  # gocbRef
    assert calculated[74:78] == expected[74:78]  # timeAllowedtoLive
    assert calculated[78:114] == expected[78:114]  # datSet
    assert calculated[114:141] == expected[114:141]  # goID
    assert calculated[141:151] == expected[141:151]  # t
    assert calculated[151:154] == expected[151:154]  # stNum
    assert calculated[154:158] == expected[154:158]  # sqNum
    assert calculated[158:161] == expected[158:161]  # test
    assert calculated[161:164] == expected[161:164]  # confRev
    assert calculated[164:167] == expected[164:167]  # ndsCom
    assert calculated[167:170] == expected[167:170]  # numDatSetEntries
    assert calculated[170:172] == expected[170:172]  # allData asn.1
    assert calculated[172:174] == expected[172:174]  # structure #1 asn.1
    assert calculated[174:192] == expected[174:192]  # structure #1
    assert calculated[192:194] == expected[192:194]  # structure #2 asn.1
    assert calculated[194:212] == expected[194:212]  # structure #2
    assert calculated[212:214] == expected[212:214]  # structure #3 asn.1
    assert calculated[214:232] == expected[214:232]  # structure #3
    assert calculated[232:234] == expected[232:234]  # structure #4 asn.1
    assert calculated[234:252] == expected[234:252]  # structure #4
    assert calculated[252:254] == expected[252:254]  # structure #5 asn.1
    assert calculated[254:272] == expected[254:272]  # structure #5 asn.1
    assert calculated == expected