add client-side checksum calculation