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