From 21402cedf14e62d8f040feb2dbdb708486f9bec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Danis?= Date: Tue, 26 Nov 2019 19:14:57 +0100 Subject: [PATCH] tmp --- .../ostree-repo-static-delta-compilation.c | 49 +++++++++++++++++-- src/ostree/ot-builtin-static-delta.c | 12 ++++- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/libostree/ostree-repo-static-delta-compilation.c b/src/libostree/ostree-repo-static-delta-compilation.c index c61b9fb7e8..88f30a6831 100644 --- a/src/libostree/ostree-repo-static-delta-compilation.c +++ b/src/libostree/ostree-repo-static-delta-compilation.c @@ -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; @@ -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 @@ -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); } } @@ -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)); @@ -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 */ { @@ -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, @@ -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; @@ -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; @@ -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; @@ -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 { diff --git a/src/ostree/ot-builtin-static-delta.c b/src/ostree/ot-builtin-static-delta.c index 43e97582bc..c3b483aea1 100644 --- a/src/ostree/ot-builtin-static-delta.c +++ b/src/ostree/ot-builtin-static-delta.c @@ -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;