docs: def read(self, cnt=None):
          """Read and decrypt."""
          if cnt > 8 * 1024:
              raise BadRarFile('Bad count to header decrypt - wrong password?')
  
          # consume old data
          if cnt <= len(self.buf):
              res = self.buf[:cnt]
              self.buf = self.buf[cnt:]
              return res
          res = self.buf
          self.buf = EMPTY
          cnt -= len(res)
  
          # decrypt new data
          blklen = 16
          while cnt > 0:
              enc = self.f.read(blklen)
              if len(enc) < blklen:
                  break
              dec = self.ciph.decrypt(enc)
              if cnt >= len(dec):
                  res += dec
                  cnt -= len(dec)
              else:
                  res += dec[:cnt]
                  self.buf = dec[cnt:]
                  cnt = 0
  
          return res