Skip to content

Commit

Permalink
tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
fdanis-oss committed Nov 26, 2019
1 parent a533d25 commit 21402ce
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 6 deletions.
49 changes: 44 additions & 5 deletions src/libostree/ostree-repo-static-delta-compilation.c
Original file line number Diff line number Diff line change
Expand Up @@ -1373,6 +1373,7 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
g_autoptr(OtVariantBuilder) descriptor_builder = NULL;
const char *opt_sign_name;
const char **opt_key_ids;
g_autoptr(GVariantBuilder) signature_builder = NULL;

if (!g_variant_lookup (params, "min-fallback-size", "u", &min_fallback_size))
min_fallback_size = 4;
Expand Down Expand Up @@ -1456,10 +1457,12 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
goto out;

descriptor_builder = ot_variant_builder_new (G_VARIANT_TYPE (OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT), descriptor_tmpf.fd);
signature_builder = g_variant_builder_new (G_VARIANT_TYPE (OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT));

/* Open the metadata dict */
if (!ot_variant_builder_open (descriptor_builder, G_VARIANT_TYPE ("a{sv}"), error))
goto out;
g_variant_builder_open (signature_builder, G_VARIANT_TYPE ("a{sv}"));

/* NOTE: Add user-supplied metadata first. This is used by at least
* flatpak as a way to provide MIME content sniffing, since the
Expand All @@ -1475,6 +1478,7 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
{
if (!ot_variant_builder_add_value (descriptor_builder, item, error))
goto out;
g_variant_builder_add_value(signature_builder, item);
g_variant_unref (item);
}
}
Expand All @@ -1494,6 +1498,7 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
}
if (!ot_variant_builder_add (descriptor_builder, error, "{sv}", "ostree.endianness", g_variant_new_byte (endianness_char)))
goto out;
g_variant_builder_add(signature_builder, "{sv}", "ostree.endianness", g_variant_new_byte (endianness_char));
}

part_headers = g_variant_builder_new (G_VARIANT_TYPE ("a" OSTREE_STATIC_DELTA_META_ENTRY_FORMAT));
Expand Down Expand Up @@ -1549,11 +1554,13 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
g_autofree char *detached_key = _ostree_get_relative_static_delta_path (from, to, "commitmeta");
if (!ot_variant_builder_add (descriptor_builder, error, "{sv}", detached_key, detached))
goto out;
g_variant_builder_add(signature_builder, "{sv}", detached_key, detached);
}

/* Close metadata dict */
if (!ot_variant_builder_close (descriptor_builder, error))
goto out;
g_variant_builder_close(signature_builder);

/* Generate OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT */
{
Expand All @@ -1562,8 +1569,17 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
from ? ostree_checksum_to_bytes_v (from) : ot_gvariant_new_bytearray ((guchar *)"", 0);
/* floating */ GVariant *to_csum_v =
ostree_checksum_to_bytes_v (to);
g_autoptr (GVariant) part_headers_v = g_variant_builder_end (part_headers);
g_autoptr (GVariant) signature_v = NULL;


/* NEED REFACTOR ? */
g_variant_ref(from_csum_v);
g_variant_ref(to_csum_v);
g_variant_ref(to_commit);
g_variant_ref(part_headers_v);
g_variant_ref(fallback_headers);

if (!ot_variant_builder_add (descriptor_builder, error, "t",
GUINT64_TO_BE (g_date_time_to_unix (now))) ||
!ot_variant_builder_add_value (descriptor_builder,
Expand All @@ -1575,11 +1591,23 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
!ot_variant_builder_add_value (descriptor_builder,
ot_gvariant_new_bytearray ((guchar*)"", 0), error) ||
!ot_variant_builder_add_value (descriptor_builder,
g_variant_builder_end (part_headers), error) ||
part_headers_v, error) ||
!ot_variant_builder_add_value (descriptor_builder,
fallback_headers, error))
goto out;

g_variant_builder_add(signature_builder, "t", GUINT64_TO_BE (g_date_time_to_unix (now)));
g_variant_builder_add_value(signature_builder, from_csum_v);
g_variant_builder_add_value(signature_builder, to_csum_v);
g_variant_builder_add_value(signature_builder, to_commit);
g_variant_builder_add_value(signature_builder, ot_gvariant_new_bytearray ((guchar*)"", 0));
g_variant_builder_add_value(signature_builder, part_headers_v);
g_variant_builder_add_value(signature_builder, fallback_headers);
g_variant_builder_add(signature_builder, "m{sv}", FALSE, NULL, NULL);
signature_v = g_variant_builder_end (signature_builder);

g_printerr(" %s\n", g_variant_print(signature_v, TRUE));

/* NOTE: Add superblock signatures last. */
if (opt_key_ids)
{
g_autoptr(OstreeSign) sign = NULL;
Expand All @@ -1588,6 +1616,12 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
if (sign == NULL)
goto out;

/* Open the signatures dict */
//if (!ot_variant_builder_open (descriptor_builder, G_VARIANT_TYPE ("ma{sv}"), error))
// goto out;
//if (!ot_variant_builder_open (descriptor_builder, G_VARIANT_TYPE ("a{sv}"), error))
// goto out;

for (const char **iter = opt_key_ids; iter && *iter; iter++)
{
const char *keyid = *iter;
Expand All @@ -1596,13 +1630,11 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
const gchar *signature_format = ostree_sign_metadata_format (sign);
g_autoptr(GBytes) signature = NULL;

// TODO: generate correct data to sign
g_autoptr(GBytes) tmpdata = g_bytes_new("DummyData", 10);

secret_key = g_variant_new_string (keyid);
if (!ostree_sign_set_sk (sign, secret_key, error))
goto out;

g_autoptr(GBytes) tmpdata = g_variant_get_data_as_bytes(signature_v);
if (!ostree_sign_data (sign, tmpdata, &signature,
NULL, error))
goto out;
Expand All @@ -1614,8 +1646,15 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
TRUE, (GDestroyNotify)g_bytes_unref, signature);

if (!ot_variant_builder_add (descriptor_builder, error, "m{sv}", TRUE, signature_key, ret))
// if (!ot_variant_builder_add (descriptor_builder, error, "{sv}", signature_key, ret))
goto out;
}

/* Close signatures dict */
//if (!ot_variant_builder_close (descriptor_builder, error))
// goto out;
//if (!ot_variant_builder_close (descriptor_builder, error))
// goto out;
}
else
{
Expand Down
12 changes: 11 additions & 1 deletion src/ostree/ot-builtin-static-delta.c
Original file line number Diff line number Diff line change
Expand Up @@ -350,8 +350,18 @@ ot_static_delta_builtin_generate (int argc, char **argv, OstreeCommandInvocation
g_print (" From: %s\n", from_resolved ? from_resolved : "empty");
g_print (" To: %s\n", to_resolved);
{ g_autoptr(GVariant) params = g_variant_ref_sink (g_variant_builder_end (parambuilder));

/* ONLY FOR TESTS PURPOSE */
GVariant *variant;
GVariantBuilder *builder;
builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
g_variant_builder_add(builder, "{sv}", "ostree.meta1", g_variant_new_byte ('F'));
g_variant_builder_add(builder, "{sv}", "ostree.meta2", g_variant_new_byte ('D'));
variant = g_variant_new("a{sv}", builder);
g_variant_builder_unref(builder);

if (!ostree_repo_static_delta_generate (repo, OSTREE_STATIC_DELTA_GENERATE_OPT_MAJOR,
from_resolved, to_resolved, NULL,
from_resolved, to_resolved, variant,
params,
cancellable, error))
return FALSE;
Expand Down

0 comments on commit 21402ce

Please sign in to comment.