gboolean
_ostree_static_delta_part_validate (OstreeRepo     *repo,
                                    GInputStream   *in,
                                    guint           part_offset,
                                    const char     *expected_checksum,
                                    GCancellable   *cancellable,
                                    GError        **error)
{
  gboolean ret = FALSE;
  g_autofree guchar *actual_checksum_bytes = NULL;
  g_autofree char *actual_checksum = NULL;
  
  if (!ot_gio_checksum_stream (in, &actual_checksum_bytes,
                               cancellable, error))
    goto out;

  actual_checksum = ostree_checksum_from_bytes (actual_checksum_bytes);
  if (strcmp (actual_checksum, expected_checksum) != 0)
    {
      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
                   "Checksum mismatch in static delta part %u; expected=%s actual=%s",
                   part_offset, expected_checksum, actual_checksum);
      goto out;
    }
  
  ret = TRUE;
 out:
  return ret;
}
Beispiel #2
0
static void
checksum_stream_thread (GSimpleAsyncResult   *result,
                        GObject              *object,
                        GCancellable         *cancellable)
{
  GError *error = NULL;
  guchar *csum;

  if (!ot_gio_checksum_stream ((GInputStream*)object, &csum,
                               cancellable, &error))
    g_simple_async_result_take_error (result, error);
  else
    g_simple_async_result_set_op_res_gpointer (result, csum, g_free);
}