SCITT defines a feed as:
an identifier chosen by the Issuer for the Artifact. For every Issuer and Feed, the Registry on a Transparency Service contains a sequence of Signed Statements about the same Artifact. In COSE, Feed is a dedicated header attribute in the protected header of the Envelope.
To provide more structure, we have a tracking issue: Refine Definition of Feed #11
This document outlines a potential structure for feeds, enabling submissions and queries around a specific platform and version of an artifact.
Although these may be header properties, rather than a hierarchical structure.
The proposed structure provides:
There's an intentional structure as the consumer of the netlog:v8
package running on linux/amd64
server has no need to query information about the mac (darwin/amd64
) version.
The ability to query for updates to a specific versioned
package
on a specific platform/architecture
enables a consumer to target just what they need.
For each version
of a platform/architecture
package, a series of statements may be made.
Note that the same statement (content type) may be made by different identities (issuers), or updated statements may be made as new information is discovered.
Issuer | Type | Time Created |
---|---|---|
wabbit-networks | SPDX SBOM |
2023-01-01T16:00:00.00Z |
wabbit-networks | CycloneDX SBOM |
2023-01-01T16:00:00.00Z |
wabbit-networks | SDL Compliance |
2023-01-01T16:00:00.00Z |
wabbit-networks | Provenance |
2023-01-01T16:00:00.00Z |
wabbit-networks | GitBom |
2023-01-01T16:00:00.00Z |
cogswell-defender | Scan Result |
2023-01-01T16:00:00.00Z |
cogswell-defender | Scan Result |
2023-01-03T10:30:00.00Z |
cogswell-defender | Scan Result |
… |
clair | Scan Result |
2023-04-01T18:30:00.00Z |
cogswell-defender | Scan Result |
2023-04-02T17:00:00.00Z |
wabbit-networks | Patch Version Notification |
2023-04-03T15:30:00.00Z |
clair | Scan Result |
2023-04-03T18:00:00.00Z |
cogswell-defender | Scan Result |
2023-04-03T18:00:00.00Z |
A feed is a resource, identified by a URL.
Resources can be expressed in multiple content types.
application/scitt.feed+cbor
is mandatory to support.
scitt.feed+cbor
encodes a structure for paging a potentially infinite list.
Although these examples are YAML the actual representation would be CBOR.
Generic example, a feed identifies a list of receipts.
GET https://ts.example/feeds/42 –accept application/yaml
Slightly more structure…
A feed exposes a list of receipts, filtered to specific elements.
GET https://ts.example/feeds/by-payload-content-type/application/spdx+json
GET https://ts.example/feeds/by-signed-statement-issuer/did:vendor.example:ci-server:53
GET https://ts.example/feeds/by-purl/pkg:docker/debian@sha256:2f04d3d33b6027bb74ecc81397abe780649ec89f1a2af18d7022737d0482cefe
Non software domain examples:
GET https://ts.example/feeds/facility/geohash
GET https://ts.example/feeds/facility/geohash/imports
GET https://ts.example/feeds/facility/geohash/exports
GET https://ts.example/feeds/address/tokens
GET https://ts.example/feeds/address/transactions
GET https://ts.example/feeds/physical-address/insurance-policies
GET https://ts.example/feeds/human-identifier/insurance-policies
GET https://ts.example/feeds/vehicle-identifier/titles
GET https://ts.example/feeds/vehicle-identifier/insurance
GET https://ts.example/feeds/vehicle-identifier/speeding-tickets
Seems there are actually 2 concepts hidden in 1 here…
"Feed" as a topic committed to by the issuer of the receipt.
For example application/spdx+json
for pkg:docker/debian@sha256:2f04d3d33b6027bb74ecc81397abe780649ec89f1a2af18d7022737d0482cefe
by docker.transparency.example
^ You will see the Feed for the first case in a COSE Sign1 protected header.
"Feed" as an aggregation over witnessed receipts related to "various related topics"
For example "all the receipts" for pkg:docker/debian@sha256
(any hash, all content types) by docker.transparency.example
.
^ You won't ever see the Feed for the second case in a COSE Sign1 protected header.