fwupd/libfwupdplugin/fu-cabinet.h
Richard Hughes e65d28d817 Add a utility to resign firmware files
This can be used like this:

    fwupdtool firmware-sign firmware.cab rhughes_signed.pem rhughes.key

Test signing certificates can be generated using the example script here:
https://github.com/hughsie/libjcat/blob/master/contrib/build-certs.py although
these certificates should not be used for enterprise use.
2021-04-19 12:59:35 +01:00

80 lines
2.0 KiB
C

/*
* Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#pragma once
#include <glib-object.h>
#include <xmlb.h>
#include <jcat.h>
#define FU_TYPE_CABINET (fu_cabinet_get_type ())
G_DECLARE_FINAL_TYPE (FuCabinet, fu_cabinet, FU, CABINET, GObject)
/**
* FuCabinetParseFlags:
* @FU_CABINET_PARSE_FLAG_NONE: No flags set
*
* The flags to use when loading the cabinet.
**/
typedef enum {
FU_CABINET_PARSE_FLAG_NONE = 0,
/*< private >*/
FU_CABINET_PARSE_FLAG_LAST
} FuCabinetParseFlags;
/**
* FuCabinetExportFlags:
* @FU_CABINET_EXPORT_FLAG_NONE: No flags set
*
* The flags to use when exporting the archive.
**/
typedef enum {
FU_CABINET_EXPORT_FLAG_NONE = 0,
/*< private >*/
FU_CABINET_EXPORT_FLAG_LAST
} FuCabinetExportFlags;
/**
* FuCabinetSignFlags:
* @FU_CABINET_SIGN_FLAG_NONE: No flags set
*
* The flags to use when signing the archive.
**/
typedef enum {
FU_CABINET_SIGN_FLAG_NONE = 0,
/*< private >*/
FU_CABINET_SIGN_FLAG_LAST
} FuCabinetSignFlags;
FuCabinet *fu_cabinet_new (void);
void fu_cabinet_set_size_max (FuCabinet *self,
guint64 size_max);
void fu_cabinet_set_jcat_context (FuCabinet *self,
JcatContext *jcat_context);
gboolean fu_cabinet_parse (FuCabinet *self,
GBytes *data,
FuCabinetParseFlags flags,
GError **error)
G_GNUC_WARN_UNUSED_RESULT;
gboolean fu_cabinet_sign (FuCabinet *self,
GBytes *cert,
GBytes *privkey,
FuCabinetSignFlags flags,
GError **error)
G_GNUC_WARN_UNUSED_RESULT;
void fu_cabinet_add_file (FuCabinet *self,
const gchar *basename,
GBytes *data);
GBytes *fu_cabinet_get_file (FuCabinet *self,
const gchar *basename,
GError **error);
GBytes *fu_cabinet_export (FuCabinet *self,
FuCabinetExportFlags flags,
GError **error)
G_GNUC_WARN_UNUSED_RESULT;
XbSilo *fu_cabinet_get_silo (FuCabinet *self);