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.¶