docs: def decrypt(self, data, pad=None, padmode=None):
  		"""decrypt(data, [pad], [padmode]) -> bytes
  
  		data : bytes to be encrypted
  		pad  : Optional argument for decryption padding. Must only be one byte
  		padmode : Optional argument for overriding the padding mode.
  
  		The data must be a multiple of 8 bytes and will be decrypted
  		with the already specified key. In PAD_NORMAL mode, if the
  		optional padding character is supplied, then the un-encrypted
  		data will have the padding characters removed from the end of
  		the bytes. This pad removal only occurs on the last 8 bytes of
  		the data (last data block). In PAD_PKCS5 mode, the special
  		padding end markers will be removed from the data after
  		decrypting, no pad character is required for PAD_PKCS5.
  		"""
  		ENCRYPT = des.ENCRYPT
  		DECRYPT = des.DECRYPT
  		data = self._guardAgainstUnicode(data)
  		if pad is not None:
  			pad = self._guardAgainstUnicode(pad)
  		if self.getMode() == CBC:
  			self.__key1.setIV(self.getIV())
  			self.__key2.setIV(self.getIV())
  			self.__key3.setIV(self.getIV())
  			i = 0
  			result = []
  			while i < len(data):
  				iv = data[i:i+8]
  				block = self.__key3.crypt(iv,    DECRYPT)
  				block = self.__key2.crypt(block, ENCRYPT)
  				block = self.__key1.crypt(block, DECRYPT)
  				self.__key1.setIV(iv)
  				self.__key2.setIV(iv)
  				self.__key3.setIV(iv)
  				result.append(block)
  				i += 8
  			if _pythonMajorVersion < 3:
  				data = ''.join(result)
  			else:
  				data = bytes.fromhex('').join(result)
  		else:
  			data = self.__key3.crypt(data, DECRYPT)
  			data = self.__key2.crypt(data, ENCRYPT)
  			data = self.__key1.crypt(data, DECRYPT)
  		return self._unpadData(data, pad, padmode)