code: def calc_chksums(buf):
      
      unsigned_chksum = 256 + sum(struct.unpack("148B", buf[:148]) + struct.unpack("356B", buf[156:512]))
      signed_chksum = 256 + sum(struct.unpack("148b", buf[:148]) + struct.unpack("356b", buf[156:512]))
      return unsigned_chksum, signed_chksum
docs: Calculate the checksum for a member's header by summing up all
         characters except for the chksum field which is treated as if
         it was filled with spaces. According to the GNU tar sources,
         some tars (Sun and NeXT) calculate chksum with signed char,
         which will be different if there are chars in the buffer with
         the high bit set. So we calculate two checksums, unsigned and
         signed.