Beispiel #1
0
def decode_oid(length, message):
    """decode ASN.1 object ID"""
    oid = []
    # get the first subid
    subid = ord(message[0])
    oid.append(subid // 40)
    oid.append(subid % 40)

    index = 1
    # loop through the rest
    while index < length:
        # get a subid
        subid = ord(message[index])
        if subid < 128:
            oid.append(subid)
            index = index + 1
        else:
            # construct subid from a number of octets
            next = subid
            subid = 0
            while next >= 128:
                # collect subid
                subid = (subid << 7) + (next & 0x7F)
                # take next octet
                index = index + 1
                next = ord(message[index])
                # just for sure
                if index > length:
                    return bad_integer
            # append a subid to oid list
            subid = (subid << 7) + next
            oid.append(subid)
            index = index + 1
    # return objid
    return Basetypes.OBJECT_IDENTIFIER(oid)