import struct

def tlvToDict(blob):
    d = {}
    for tag,data in loopTLVBlocks(blob):
        d[tag] = data
    return d

def tlvToList(blob):
    return list(loopTLVBlocks(blob))
    
def loopTLVBlocks(blob):
    i = 0
    while i + 8 <= len(blob):
        tag = blob[i:i+4]
        length = struct.unpack(">L",blob[i+4:i+8])[0]
        data = blob[i+8:i+8+length]
        yield (tag,data)
        i += 8 + length