diff --git a/Makefile.process b/Makefile.process index 9c6bdd1..720b3b0 100644 --- a/Makefile.process +++ b/Makefile.process @@ -50,6 +50,8 @@ $(TARGET): $(OBJS) | ./bin define test-one $(TARGET) ./testfiles/suit_manifest_exp$(1).cbor \ + -u "http://cdn.example/example3.bin" -f "./testfiles/raw_image.bin \ + -u "http://example.com/file.bin" -f "./testfiles/raw_image.bin" \ -u "http://example.com/dependent.suit" -f "./testfiles/suit_manifest_expS0.cbor" \ -u "https://example.com/encrypted-firmware" -b "758c4b7bbae2c4c1d462423e0f0dc3164ffa7b85bb94d4bd6d7ed26ab32feb063385d4d3465927ec82cb5e198a59" \ -u "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.suit" -f "./testfiles/suit_manifest_expU.cbor" \ diff --git a/SUPPORTED.md b/SUPPORTED.md index ac6afd6..9cf8b1c 100644 --- a/SUPPORTED.md +++ b/SUPPORTED.md @@ -6,9 +6,9 @@ ### SUIT Manifest Operation | Metadata | Condition | Directive | Parameter | Text ---|---|---|---|---|--- -decode | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square: -encode | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square: -process | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square: +decode | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square: +encode | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square: +process | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square::green_square: ### SUIT Multiple Trust Domains Operation | Metadata | Condition | Directive | Parameter | Text ---|---|---|---|---|--- @@ -18,15 +18,15 @@ process | :green_square::green_square::green_square: | :green_square::green_squa ### SUIT Update Management Operation | Metadata | Condition | Directive | Parameter | Text ---|---|---|---|---|--- -decode | :green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square: -encode | :green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square: -process | :green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square: +decode | :green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::red_square::red_square: | +encode | :green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::red_square::red_square: | +process | :green_square: | :green_square::green_square::green_square::green_square::green_square: | :green_square::green_square::green_square: | :green_square::green_square::green_square::green_square::red_square::red_square: | ### SUIT Encrypted Payload Operation | Metadata | Condition | Directive | Parameter | Text ---|---|---|---|---|--- -decode | | | | :green_square::green_square::green_square::red_square: | -encode | | | | :green_square::green_square::green_square::red_square: | -process | | | | :green_square::green_square::red_square::red_square: | +decode | | | | :green_square::green_square::green_square: | +encode | | | | :green_square::green_square::green_square: | +process | | | | :green_square::green_square::red_square: | ### SUIT MUD Operation | Metadata | Condition | Directive | Parameter | Text ---|---|---|---|---|--- @@ -76,7 +76,7 @@ Authentication Wrapper | 2 | suit-authentication-wrapper | SUIT Manifest | N/M | Manifest | 3 | suit-manifest | SUIT Manifest | N/M | RWX CoSWID (s) | 14 | suit-coswid | SUIT Update Management | RECOMMENDED | RWX Payload Fetch (s) | 16 | suit-payload-fetch | SUIT Manifest | OPTIONAL | RWX -Payload Installation (s) | 17 | suit-install | SUIT Manifest | OPTIONAL | RWX +Payload Installation (s) | 20 | suit-install | SUIT Manifest | OPTIONAL | RWX Text Description (s) | 23 | suit-text | SUIT Manifest | OPTIONAL | RWX SUIT MUD (s) | ? | suit-mud | SUIT MUD | OPTIONAL | --- @@ -93,7 +93,7 @@ Image Invocation | 9 | suit-invoke | SUIT Manifest | OPTIONAL | RWX CoSWID | 14 | suit-coswid | SUIT Update Management | RECOMMENDED | RWX Dependency Resolution | 15 | suit-dependency-resolution | SUIT Multiple Trust Domains | N/M | RWX Payload Fetch | 16 | suit-payload-fetch | SUIT Manifest | OPTIONAL | RWX -Payload Installation | 17 | suit-install | SUIT Manifest | OPTIONAL | RWX +Payload Installation | 20 | suit-install | SUIT Manifest | OPTIONAL | RWX Text Description | 23 | suit-text | SUIT Manifest | OPTIONAL | RWX Uninstall | 24 | suit-uninstall | SUIT Multiple Trust Domains | N/M | RWX SUIT MUD | ? | suit-mud | SUIT MUD | OPTIONAL | --- @@ -142,8 +142,8 @@ Wait | 29 | suit-directive-wait | SUIT Update Management | N/M | RWX Swap | 31 | suit-directive-swap | SUIT Manifest | N/M | RWX Run Sequence | 32 | suit-directive-run-sequence | SUIT Manifest | OPTIONAL | RWX Unlink | 33 | suit-directive-unlink | SUIT Multiple Trust Domains | N/M | RWX -Override Multiple | 34? | suit-directive-override-multiple | SUIT Update Management | N/M | RWX -Copy Params | 35? | suit-directive-copy-params | SUIT Update Management | N/M | RWX +Override Multiple | 34 | suit-directive-override-multiple | SUIT Update Management | N/M | RWX +Copy Params | 35 | suit-directive-copy-params | SUIT Update Management | N/M | RWX ### SUIT Parameters @@ -157,25 +157,34 @@ Component Slot | 5 | suit-parameter-component-slot | SUIT Manifest | N/M | RWX Strict Order | 12 | suit-parameter-strict-order | SUIT Manifest | N/M | RWX Soft Failure | 13 | suit-parameter-soft-failure | SUIT Manifest | N/M | RWX Image Size | 14 | suit-parameter-image-size | SUIT Manifest | N/M | RWX +Fetch Arguments | 16? | suit-parameter-fetch-arguments | SUIT Manifest | N/M | RWX Content | 18 | suit-parameter-content | SUIT Manifest | N/M | RWX Encryption Info (AES-KW) | 19 | suit-parameter-encryption-info | SUIT Encrypted Payload | N/M | RWX Encryption Info (ECDH) | 19 | suit-parameter-encryption-info | SUIT Encrypted Payload | N/M | RWX Encryption Info (HPKE) | 19 | suit-parameter-encryption-info | SUIT Encrypted Payload | N/M | RW- -CEK Verification | 20 | suit-parameter-cek-verification | SUIT Encrypted Payload | N/M | --- URI | 21 | suit-parameter-uri | SUIT Manifest | N/M | RWX Source Component | 22 | suit-parameter-source-component | SUIT Manifest | N/M | RWX Invoke Args | 23 | suit-parameter-invoke-args | SUIT Manifest | N/M | RWX Device ID | 24 | suit-parameter-device-identifier | SUIT Manifest | N/M | RWX Minimum Battery | 26 | suit-parameter-minimum-battery | SUIT Update Management | N/M | RWX Update Priority | 27 | suit-parameter-update-priority | SUIT Update Management | N/M | RWX -Version | 28 | suit-parameter-version | SUIT Update Management | N/M | RWX +Version | 28 | suit-parameter-version | SUIT Update Management | N/M | --- Wait Info | 29 | suit-parameter-wait-info | SUIT Update Management | N/M | RWX -Fetch Arguments | 30? | suit-parameter-fetch-arguments | SUIT Manifest | N/M | RWX +Component Metadata | 30 | suit-parameter-component-metadata | SUIT Update Management | N/M | --- ### SUIT Text NOTE: libcsuit ignores this while processing a SUIT Manifest +Name | Label | CDDL Structure | IN | IS | Supported? +---|---|---|---|---|--- +Manifest Description | 1 | suit-text-manifest-description | SUIT Manifest | OPTIONAL | RWX +Update Description | 2 | suit-text-update-description | SUIT Manifest | OPTIONAL | RWX +Manifest JSON Source | 3 | suit-text-manifest-json-source | SUIT Manifest | OPTIONAL | RWX +Manifest YAML Source | 4 | suit-text-manifest-yaml-source | SUIT Manifest | OPTIONAL | RWX + +### SUIT Text Component + Name | Label | CDDL Structure | IN | IS | Supported? ---|---|---|---|---|--- Vendor Name | 1 | suit-text-vendor-name | SUIT Manifest | OPTIONAL | RWX diff --git a/inc/csuit/suit_common.h b/inc/csuit/suit_common.h index 3d49d89..1ecaa16 100644 --- a/inc/csuit/suit_common.h +++ b/inc/csuit/suit_common.h @@ -307,12 +307,12 @@ typedef enum suit_parameter_key { SUIT_PARAMETER_STRICT_ORDER = 12, SUIT_PARAMETER_SOFT_FAILURE = 13, SUIT_PARAMETER_IMAGE_SIZE = 14, + SUIT_PARAMETER_FETCH_ARGS = 16, /* XXX */ SUIT_PARAMETER_CONTENT = 18, SUIT_PARAMETER_URI = 21, SUIT_PARAMETER_SOURCE_COMPONENT = 22, SUIT_PARAMETER_INVOKE_ARGS = 23, SUIT_PARAMETER_DEVICE_IDENTIFIER = 24, - SUIT_PARAMETER_FETCH_ARGS = 30, /* XXX */ /* draft-ietf-suit-update-management */ SUIT_PARAMETER_USE_BEFORE = 4, @@ -320,6 +320,7 @@ typedef enum suit_parameter_key { SUIT_PARAMETER_UPDATE_PRIORITY = 27, SUIT_PARAMETER_VERSION = 28, SUIT_PARAMETER_WAIT_INFO = 29, + SUIT_PARAMETER_COMPONENT_METADATA = 30, /* XXX */ /* draft-ietf-suit-firmware-encryption */ SUIT_PARAMETER_ENCRYPTION_INFO = 19, diff --git a/misc/TABLES_MANIFEST_SUPPORTED.md b/misc/TABLES_MANIFEST_SUPPORTED.md index 9ed24ac..f451fe6 100644 --- a/misc/TABLES_MANIFEST_SUPPORTED.md +++ b/misc/TABLES_MANIFEST_SUPPORTED.md @@ -8,7 +8,7 @@ Authentication Wrapper | 2 | suit-authentication-wrapper | SUIT Manifest | N/M | Manifest | 3 | suit-manifest | SUIT Manifest | N/M | RWX CoSWID (s) | 14 | suit-coswid | SUIT Update Management | RECOMMENDED | RWX Payload Fetch (s) | 16 | suit-payload-fetch | SUIT Manifest | OPTIONAL | RWX -Payload Installation (s) | 17 | suit-install | SUIT Manifest | OPTIONAL | RWX +Payload Installation (s) | 20 | suit-install | SUIT Manifest | OPTIONAL | RWX Text Description (s) | 23 | suit-text | SUIT Manifest | OPTIONAL | RWX SUIT MUD (s) | ? | suit-mud | SUIT MUD | OPTIONAL | --- @@ -25,7 +25,7 @@ Image Invocation | 9 | suit-invoke | SUIT Manifest | OPTIONAL | RWX CoSWID | 14 | suit-coswid | SUIT Update Management | RECOMMENDED | RWX Dependency Resolution | 15 | suit-dependency-resolution | SUIT Multiple Trust Domains | N/M | RWX Payload Fetch | 16 | suit-payload-fetch | SUIT Manifest | OPTIONAL | RWX -Payload Installation | 17 | suit-install | SUIT Manifest | OPTIONAL | RWX +Payload Installation | 20 | suit-install | SUIT Manifest | OPTIONAL | RWX Text Description | 23 | suit-text | SUIT Manifest | OPTIONAL | RWX Uninstall | 24 | suit-uninstall | SUIT Multiple Trust Domains | N/M | RWX SUIT MUD | ? | suit-mud | SUIT MUD | OPTIONAL | --- @@ -74,8 +74,8 @@ Wait | 29 | suit-directive-wait | SUIT Update Management | N/M | RWX Swap | 31 | suit-directive-swap | SUIT Manifest | N/M | RWX Run Sequence | 32 | suit-directive-run-sequence | SUIT Manifest | OPTIONAL | RWX Unlink | 33 | suit-directive-unlink | SUIT Multiple Trust Domains | N/M | RWX -Override Multiple | 34? | suit-directive-override-multiple | SUIT Update Management | N/M | RWX -Copy Params | 35? | suit-directive-copy-params | SUIT Update Management | N/M | RWX +Override Multiple | 34 | suit-directive-override-multiple | SUIT Update Management | N/M | RWX +Copy Params | 35 | suit-directive-copy-params | SUIT Update Management | N/M | RWX ### SUIT Parameters @@ -89,25 +89,34 @@ Component Slot | 5 | suit-parameter-component-slot | SUIT Manifest | N/M | RWX Strict Order | 12 | suit-parameter-strict-order | SUIT Manifest | N/M | RWX Soft Failure | 13 | suit-parameter-soft-failure | SUIT Manifest | N/M | RWX Image Size | 14 | suit-parameter-image-size | SUIT Manifest | N/M | RWX +Fetch Arguments | 16? | suit-parameter-fetch-arguments | SUIT Manifest | N/M | RWX Content | 18 | suit-parameter-content | SUIT Manifest | N/M | RWX Encryption Info (AES-KW) | 19 | suit-parameter-encryption-info | SUIT Encrypted Payload | N/M | RWX Encryption Info (ECDH) | 19 | suit-parameter-encryption-info | SUIT Encrypted Payload | N/M | RWX Encryption Info (HPKE) | 19 | suit-parameter-encryption-info | SUIT Encrypted Payload | N/M | RW- -CEK Verification | 20 | suit-parameter-cek-verification | SUIT Encrypted Payload | N/M | --- URI | 21 | suit-parameter-uri | SUIT Manifest | N/M | RWX Source Component | 22 | suit-parameter-source-component | SUIT Manifest | N/M | RWX Invoke Args | 23 | suit-parameter-invoke-args | SUIT Manifest | N/M | RWX Device ID | 24 | suit-parameter-device-identifier | SUIT Manifest | N/M | RWX Minimum Battery | 26 | suit-parameter-minimum-battery | SUIT Update Management | N/M | RWX Update Priority | 27 | suit-parameter-update-priority | SUIT Update Management | N/M | RWX -Version | 28 | suit-parameter-version | SUIT Update Management | N/M | RWX +Version | 28 | suit-parameter-version | SUIT Update Management | N/M | --- Wait Info | 29 | suit-parameter-wait-info | SUIT Update Management | N/M | RWX -Fetch Arguments | 30? | suit-parameter-fetch-arguments | SUIT Manifest | N/M | RWX +Component Metadata | 30 | suit-parameter-component-metadata | SUIT Update Management | N/M | --- ### SUIT Text NOTE: libcsuit ignores this while processing a SUIT Manifest +Name | Label | CDDL Structure | IN | IS | Supported? +---|---|---|---|---|--- +Manifest Description | 1 | suit-text-manifest-description | SUIT Manifest | OPTIONAL | RWX +Update Description | 2 | suit-text-update-description | SUIT Manifest | OPTIONAL | RWX +Manifest JSON Source | 3 | suit-text-manifest-json-source | SUIT Manifest | OPTIONAL | RWX +Manifest YAML Source | 4 | suit-text-manifest-yaml-source | SUIT Manifest | OPTIONAL | RWX + +### SUIT Text Component + Name | Label | CDDL Structure | IN | IS | Supported? ---|---|---|---|---|--- Vendor Name | 1 | suit-text-vendor-name | SUIT Manifest | OPTIONAL | RWX