docs: def _process_data(self, dd, offsets, data):
          # type: (Downloader, blobxfer.models.download.Descriptor,
          #        blobxfer.models.download.Offsets, bytes) -> None
          """Process downloaded data for disk
          :param Downloader self: this
          :param blobxfer.models.download.Descriptor dd: download descriptor
          :param blobxfer.models.download.Offsets offsets: offsets
          :param bytes data: data to process
          """
          # decrypt if necessary
          if dd.entity.is_encrypted:
              # slice data to proper bounds and get iv for chunk
              if offsets.chunk_num == 0:
                  # set iv
                  iv = dd.entity.encryption_metadata.content_encryption_iv
                  # set data to decrypt
                  encdata = data
                  # send iv through hmac
                  dd.hmac_iv(iv)
              else:
                  # set iv
                  iv = data[:blobxfer.models.crypto.AES256_BLOCKSIZE_BYTES]
                  # set data to decrypt
                  encdata = data[blobxfer.models.crypto.AES256_BLOCKSIZE_BYTES:]
              # write encdata to disk for hmac later
              _hmac_datafile = dd.write_unchecked_hmac_data(
                  offsets, encdata)
              # decrypt data
              if self._crypto_offload is not None:
                  self._crypto_offload.add_decrypt_chunk(
                      str(dd.final_path), dd.view.fd_start, offsets,
                      dd.entity.encryption_metadata.symmetric_key,
                      iv, _hmac_datafile)
                  # data will be integrity checked and written once
                  # retrieved from crypto queue
                  return
              else:
                  data = blobxfer.operations.crypto.aes_cbc_decrypt_data(
                      dd.entity.encryption_metadata.symmetric_key,
                      iv, encdata, offsets.unpad)
                  dd.write_data(offsets, data)
          else:
              # write data to disk
              dd.write_unchecked_data(offsets, data)
          # finalize chunk
          self._finalize_chunk(dd, offsets)