docs: def _read_bytes_to_non_framed_body(self, b):
          """Reads the requested number of bytes from source to a streaming non-framed message body.
  
          :param int b: Number of bytes to read
          :returns: Encrypted bytes from source stream
          :rtype: bytes
          """
          _LOGGER.debug("Reading %d bytes", b)
          plaintext = self.__unframed_plaintext_cache.read(b)
          plaintext_length = len(plaintext)
          if self.tell() + len(plaintext) > MAX_NON_FRAMED_SIZE:
              raise SerializationError("Source too large for non-framed message")
  
          ciphertext = self.encryptor.update(plaintext)
          self._bytes_encrypted += plaintext_length
          if self.signer is not None:
              self.signer.update(ciphertext)
  
          if len(plaintext) < b:
              _LOGGER.debug("Closing encryptor after receiving only %d bytes of %d bytes requested", plaintext_length, b)
  
              closing = self.encryptor.finalize()
  
              if self.signer is not None:
                  self.signer.update(closing)
  
              closing += serialize_non_framed_close(tag=self.encryptor.tag, signer=self.signer)
  
              if self.signer is not None:
                  closing += serialize_footer(self.signer)
              self.__message_complete = True
              return ciphertext + closing
  
          return ciphertext