public void update()

in jsign-core/src/main/java/net/jsign/pe/PEImageChecksum.java [56:81]


    public void update(byte[] buffer, int offset, int length) {
        long checksum = this.checksum;
        
        for (int i = offset; i < offset + length; i += 4) {
            if (!checksumOffsetSkipped && position + i == checksumOffset) {
                // skip the checksum field
                checksumOffsetSkipped = true;
            } else {
                long dword = (buffer[i] & 0xFF) +
                        ((buffer[i + 1] & 0xFF) << 8) +
                        ((buffer[i + 2] & 0xFF) << 16) +
                        ((buffer[i + 3] & 0xFFL) << 24);
                
                checksum += dword;
                
                if (checksum > MAX_UNSIGNED_INT) {
                    // fold into 32 bits
                    checksum = (checksum & 0xFFFFFFFFL) + (checksum >> 32);
                }
            }
        }
        
        this.checksum = checksum;
        
        position += length - offset;
    }