docs: def decrypt_ecb_cts(self, data):
      """
      Return an iterator that decrypts `data` using the Electronic Codebook with
      Ciphertext Stealing (ECB-CTS) mode of operation.
      
      ECB-CTS mode can only operate on `data` that is greater than 8 bytes in
      length.
      
      Each iteration, except the last, always returns a block-sized :obj:`bytes`
      object (i.e. 8 bytes). The last iteration may return a :obj:`bytes` object
      with a length less than the block-size, if `data` is not a multiple of the
      block-size in length.
      
      `data` should be a :obj:`bytes`-like object that is greater than 8 bytes in
      length.
      If it is not, a :exc:`ValueError` exception is raised.
      """
      data_len = len(data)
      if data_len <= 8:
        raise ValueError("data is not greater than 8 bytes in length")
        
      S1, S2, S3, S4 = self.S
      P = self.P
      
      u4_1_pack = self._u4_1_pack
      u1_4_unpack = self._u1_4_unpack
      u4_2_pack = self._u4_2_pack
      u4_2_unpack = self._u4_2_unpack
      decrypt = self._decrypt
      
      extra_bytes = data_len % 8
      last_block_stop_i = data_len - extra_bytes
          
      cipher_L, cipher_R = u4_2_unpack(data[0:8])
      plain_block = u4_2_pack(
        *decrypt(cipher_L, cipher_R, P, S1, S2, S3, S4, u4_1_pack, u1_4_unpack)
      )
      
      for cipher_L, cipher_R in self._u4_2_iter_unpack(data[8:last_block_stop_i]):
        yield plain_block
        plain_block = u4_2_pack(
          *decrypt(cipher_L, cipher_R, P, S1, S2, S3, S4, u4_1_pack, u1_4_unpack)
        )
      
      cipher_L, cipher_R = u4_2_unpack(
        data[last_block_stop_i:] + plain_block[extra_bytes:]
      )
      
      yield u4_2_pack(
        *decrypt(cipher_L, cipher_R, P, S1, S2, S3, S4, u4_1_pack, u1_4_unpack)
      )
      yield plain_block[:extra_bytes]