docs: def _verify_signature(self, message, signature):
          """
          Will verify that the signature received from the server matches up with the expected signature
          computed locally. Will throw an exception if they do not match
  
          @param message: The message data that is received from the server
          @param signature: The signature of the message received from the server
          """
          if self.negotiate_flags & NegotiateFlags.NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY:
              actual_checksum = signature[4:12]
              actual_seq_num = struct.unpack("<I", signature[12:16])[0]
          else:
              actual_checksum = signature[8:12]
              actual_seq_num = struct.unpack("<I", signature[12:16])[0]
  
          expected_signature = calc_signature(message, self.negotiate_flags, self.incoming_signing_key, self.incoming_seq_num, self.incoming_handle)
          expected_checksum = expected_signature.checksum
          expected_seq_num = struct.unpack("<I", expected_signature.seq_num)[0]
  
          if actual_checksum != expected_checksum:
              raise Exception("The signature checksum does not match, message has been altered")
  
          if actual_seq_num != expected_seq_num:
              raise Exception("The signature sequence number does not match up, message not received in the correct sequence")
  
          self.incoming_seq_num += 1