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;
}