3. The Canonical Cache Representation content
The content of a Canonical Cache Representation is formally defined as follows:¶
RpkiCanonicalCacheRepresentation-2025 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) mod(0) id-mod-rpkiCCR-2025(TBD) } DEFINITIONS EXPLICIT TAGS ::= BEGIN IMPORTS CONTENT-TYPE, Digest, DigestAlgorithmIdentifier, SubjectKeyIdentifier FROM CryptographicMessageSyntax-2010 -- in [RFC6268] { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) id-mod-cms-2009(58) } -- in [draft-spaghetti-sidrops-rpki-erik-protocol-01] ManifestRef FROM RpkiErikPartition-2025 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) mod(0) id-mod-rpkiErikPartition-2025(TBD) } ASID, ROAIPAddressFamily FROM RPKI-ROA-2023 -- in [RFC9582] { so(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) mod(0) id-mod-rpkiROA-2023(75) } ; ct-rpkiCanonicalCacheRepresentation CONTENT-TYPE ::= { TYPE RpkiCanonicalCacheRepresentation IDENTIFIED BY id-ct-rpkiCanonicalCacheRepresentation } id-ct-rpkiCanonicalCacheRepresentation OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) snijders(41948) ccr(825) } RpkiCanonicalCacheRepresentation ::= SEQUENCE { version [0] INTEGER DEFAULT 0, hashAlg DigestAlgorithmIdentifier, producedAt GeneralizedTime, mfts [1] ManifestState OPTIONAL, vrps [2] ROAPayloadState OPTIONAL, vaps [3] ASPAPayloadState OPTIONAL, tas [4] TrustAnchorState OPTIONAL, ... } -- at least one of mfts, vrps, vaps, or tas MUST be present ( WITH COMPONENTS { ..., mfts PRESENT } | WITH COMPONENTS { ..., vrps PRESENT } | WITH COMPONENTS { ..., vaps PRESENT } | WITH COMPONENTS { ..., tas PRESENT } ) ManifestState ::= SEQUENCE { mftrefs SEQUENCE OF ManifestRef, mostRecentUpdate GeneralizedTime, hash Digest } ROAPayloadState ::= SEQUENCE { rps SEQUENCE OF ROAPayloadSet, hash Digest } ROAPayloadSet ::= SEQUENCE { asID ASID, ipAddrBlocks SEQUENCE (SIZE(1..2)) OF ROAIPAddressFamily } ASPAPayloadState ::= SEQUENCE { aps SEQUENCE OF ASPAPayloadSet, hash Digest } ASPAPayloadSet ::= SEQUENCE { customerASID ASID providers SEQUENCE (SIZE(1..MAX)) OF ASID } TrustAnchorState ::= SEQUENCE { skis SEQUENCE (SIZE(1..MAX)) OF SubjectKeyIdentifier, hash Digest } END¶
3.1. version
The version
field contains the format version for the RpkiCanonicalCacheRepresentation
structure, in this version of the specification it MUST be 0.¶
3.2. hashAlg
The hashAlg
field specifies the algorithm used to construct the message digests.
This profile uses SHA-256 [SHS], therefore the OID MUST be 2.16.840.1.101.3.4.2.1
.¶
3.3. producedAt
The producedAt
field contains a GeneralizedTime
and indicates the moment in time the CCR was generated.¶
3.4. State aspect fields
Each CCR contains one or more fields representing particular aspects of the cache's state.
Implementers should note the ellipsis extension marker in the RpkiCanonicalCacheRepresentation
ASN.1 notation and anticipate future changes as new signed object types are standardized.¶
Each state aspect generally consists of a sequence of details extracted from RPKI Objects of a specific type, along with a digest computed by hashing the aforementioned DER-encoded sequence, optionally including some metadata.¶
3.4.1. ManifestState
An instance of ManifestState
represents the set of valid, current Manifests ([RFC9286]) in the cache.
It contains three fields:¶
The mftrefs
field contains a SEQUENCE of ManifestRef
structures (see Section 3 of [I-D.spaghetti-sidrops-rpki-erik-protocol]) sorted in ascending order by hash value.
The hash
value in each instance of ManifestRef
MUST be unique with respect to the other instances of ManifestRef
.¶
The mostRecentUpdate
is a metadata field which contains the most recent thisUpdate
amongst all Manifests.
If the mftrefs
field contains an empty sequence, the mostRecentUpdate
MUST be set to the POSIX Epoch ("19700101000000Z").¶
The hash
field contains a message digest computed using the mftrefs
value (encoded in DER format) as input message.¶
3.4.2. ROAPayloadState
An instance of ROAPayloadState
contains a field named rps
which represents the current set of Validated ROA Payloads (Section 2 of [RFC6811]) encoded as a SEQUENCE of ROAPayloadSet
instances.¶
The ROAPayloadSet
structure is modeled after the RouteOriginAttestation
(Section 4 of [RFC9582]).
The asID
value in each instance of ROAPayloadSet
MUST be unique with respect to other instances of ROAPayloadSet
.
The contents of the ipAddrBlocks
field MUST appear in canonical form and ordered as defined in Section 4.3.3 of [RFC9582].¶
The hash
field contains a message digest computed using the rps
value (encoded in DER format) as input message.¶
3.4.3. ASPAPayloadState
An instance of ASPAPayloadState
contains an aps
field which represents the current set of deduplicated and merged ASPA payloads ([I-D.ietf-sidrops-aspa-profile]) ordered by ascending customerASID
value encoded as a SEQUENCE of ASPAPayloadSet
instances.
The customerASID
value in each instance of ASPAPayloadSet
MUST be unique with respect to other instances of ASPAPayloadSet
.¶
The ASPAPayloadSet
structure is modeled after the ProviderASSet
(Section 3.3 of [I-D.ietf-sidrops-aspa-profile]).¶
The hash
field contains a message digest computed using the aps
value (encoded in DER format) as input message.¶
3.4.4. TrustAnchorState
An instance of TrustAnchorState
represents the set of valid Trust Anchor (TA) Certification Authority (CA) resource certificates used by the relying party when producing the CCR.¶
The skis
field contains a sequence of Subject Key Identifiers (SKI) sorted in ascending order.
Each SubjectKeyIdentifier
is the 160-bit SHA-1 hash of the value of the DER-encoded ASN.1 bit string of the TA's Subject Public Key, as described in Section 4.8.2 of [RFC6487].¶
The hash
field contains a message digest computed using the skis
value (encoded in DER format) as input message.¶