<?xml version="1.0" encoding="UTF-8"?>
<script name="GenerateFlukeSignature" type="File">
    <source language="Python">def processByteArray(byteArray):
    array_length = byteArray.getLength()

    file_bytes = bytearray(array_length)

    byteView = ByteView(byteArray)

    for i in range(array_length):
        file_bytes[i] = byteView.readByte(i)

    signature = calculate_fluke_sig(file_bytes, array_length)
    print(&quot;Fluke signature of file: &quot; + hex(signature)[2:])

SIG_ARRAY_SIZE = 16
I_SIG_ARRAY_LAST = 15
INDEX_ARRAY_SIZE = 5
I_INDEX_ARRAY_LAST = 4

def calculate_fluke_sig(pb: bytes, length: int) -&gt; int:
    sig_array = [0] * SIG_ARRAY_SIZE
    index_array = [6, 8, 11, 15, 0]
    
    count = 0
    sig = 0
    
    for i in range(I_SIG_ARRAY_LAST + 1):
        sig_array[i] = 0
    
    for i in range(I_INDEX_ARRAY_LAST + 1):
        index_array[i] = 0
    
    index_array[0] = 6
    index_array[1] = 8
    index_array[2] = 11
    index_array[3] = 15
    index_array[4] = 0
    
    for count in range(length):
        b = pb[count]
        
        for i in range(I_INDEX_ARRAY_LAST + 1):
            index = index_array[i]
            
            if i == I_INDEX_ARRAY_LAST:
                sig_array[index] = b
            else:
                b = sig_array[index] ^ b
                
            if index == 0:
                index = I_SIG_ARRAY_LAST
            else:
                index -= 1
                
            index_array[i] = index
            
    for i in range(SIG_ARRAY_SIZE):
        b = sig_array[i]
        
        for count in range(8):
            sig = (sig &lt;&lt; 1) | ((b ^ ((sig &gt;&gt; 6) ^ (sig &gt;&gt; 8) ^ (sig &gt;&gt; 11) ^ (sig &gt;&gt; 15))) &amp; 1)
            b = b &gt;&gt; 1
            
    sig = sig &amp; 0xFFFF
    return sig
</source>
</script>
