kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

manifest.h (3008B)


      1 #ifndef KIT_DIST_MANIFEST_H
      2 #define KIT_DIST_MANIFEST_H
      3 
      4 #include <kit/core.h>
      5 #include <stddef.h>
      6 #include <stdint.h>
      7 
      8 #include "dist.h"
      9 
     10 /* The signed logical package object for distribution v2. The physical
     11  * encodings (.tar.gz and .kpkg) both carry these literal bytes and the same
     12  * detached minisign signature. */
     13 
     14 #define DIST_MANIFEST_MAGIC "kit-package 2"
     15 #define DIST_MANIFEST_HASH "blake2b-merkle-v1"
     16 #define DIST_PACKAGE3_MAGIC "kit-package 3"
     17 #define DIST_PACKAGE3_HASH "blake2b-256"
     18 #define DIST_PACKAGE3_TREE_FORMAT "kit-tree-v1"
     19 #define DIST_PACKAGE3_BLOB_FORMAT "kit-blob-v1"
     20 
     21 typedef struct DistArtifact {
     22   uint64_t id;
     23   char path[DIST_PATH_MAX + 1];
     24   char target[DIST_TRIPLE_MAX]; /* "" = target-independent */
     25   char kind[DIST_KIND_MAX];
     26   uint8_t blake2b[DIST_BLAKE2B_LEN];
     27   uint8_t root[DIST_BLAKE2B_LEN];
     28   uint64_t size;
     29   int entry;
     30 } DistArtifact;
     31 
     32 typedef struct DistDependency {
     33   char name[DIST_NAME_MAX];
     34   char version[DIST_PCONSTRAINT_MAX];
     35   uint8_t blake2b[DIST_BLAKE2B_LEN];
     36   int has_blake2b;
     37   uint8_t keyid[DIST_KEYID_LEN];
     38   int has_keyid;
     39 } DistDependency;
     40 
     41 typedef struct DistManifest {
     42   char name[DIST_NAME_MAX];
     43   char version[DIST_VERSION_MAX];
     44   char description[DIST_DESC_MAX]; /* "" = absent */
     45   DistArtifact artifacts[DIST_MAX_ARTIFACTS];
     46   size_t n_artifacts;
     47   DistDependency deps[DIST_MAX_DEPS];
     48   size_t n_deps;
     49 } DistManifest;
     50 
     51 typedef struct DistPackageOutput {
     52   uint64_t id;
     53   char name[DIST_NAME_MAX];
     54   char target[DIST_TRIPLE_MAX]; /* "" = target-independent */
     55   uint8_t tree[DIST_BLAKE2B_LEN];
     56   int is_default;
     57 } DistPackageOutput;
     58 
     59 typedef struct DistPackageArtifact {
     60   uint64_t output_id;
     61   char path[DIST_PATH_MAX + 1];
     62   char kind[DIST_KIND_MAX];
     63   int entry;
     64 } DistPackageArtifact;
     65 
     66 typedef struct DistPackageDependency {
     67   char name[DIST_NAME_MAX];
     68   char version[DIST_PCONSTRAINT_MAX];
     69   uint8_t package[DIST_BLAKE2B_LEN];
     70   int has_package;
     71   uint8_t keyid[DIST_KEYID_LEN];
     72   int has_keyid;
     73 } DistPackageDependency;
     74 
     75 typedef struct DistPackageManifest {
     76   char name[DIST_NAME_MAX];
     77   char version[DIST_VERSION_MAX];
     78   char description[DIST_DESC_MAX]; /* "" = absent */
     79   DistPackageOutput outputs[DIST_MAX_OUTPUTS];
     80   size_t n_outputs;
     81   DistPackageArtifact artifacts[DIST_MAX_ARTIFACTS];
     82   size_t n_artifacts;
     83   DistPackageDependency deps[DIST_MAX_DEPS];
     84   size_t n_deps;
     85 } DistPackageManifest;
     86 
     87 int dist_manifest_emit(const DistManifest* m, KitWriter* out);
     88 
     89 int dist_manifest_path_valid(const char* path);
     90 
     91 int dist_manifest_parse(const uint8_t* data, size_t len, DistManifest* m,
     92                         char* err, size_t errcap);
     93 
     94 int dist_package_manifest_emit(const DistPackageManifest* m, KitWriter* out);
     95 int dist_package_manifest_parse(const uint8_t* data, size_t len,
     96                                 DistPackageManifest* m, char* err,
     97                                 size_t errcap);
     98 int dist_package_manifest_validate(const DistPackageManifest* m, char* err,
     99                                    size_t errcap);
    100 
    101 #endif