<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com) by Daniel M Kohn (private) -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
    <!ENTITY rfc2119 PUBLIC '' 
      'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
]>

<rfc category="std" ipr="trust200902" docName="draft-tbruijnzeels-sidr-delta-protocol-01" updates="draft-tbruijnzeels-sidr-delta-protocol-00">

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>

    <front>
        <title>RPKI Repository Delta Protocol</title>
        <author initials='T.' surname="Bruijnzeels" fullname='Tim Bruijnzeels'>
            <organization>RIPE NCC</organization>
            <address>
                <email>tim@ripe.net</email>
            </address>
        </author>
        <author initials='O.' surname="Muravskiy" fullname='Oleg Muravskiy'>
            <organization>RIPE NCC</organization>
            <address>
                <email>oleg@ripe.net</email>
            </address>
        </author>
        <author initials='B.' surname="Weber" fullname='Bryan Weber'>
            <organization>Cobenian</organization>
            <address>
                <email>bryan@cobenian.com</email>
            </address>
        </author>
        <date />
        <abstract>
            <t>In the Resource Public Key Infrastructure (RPKI), certificate authorities publish certificates, including end entity certificates, and CRLs to repositories on publication servers. Relying Parties (RP) retrieve the published information from the repository and MAY store it in a cache. This document specifies a delta protocol which provides relying parties with a mechanism to query a repository for changes, thus enabling the RP to keep its state in sync with the repository.</t>
        </abstract>
    </front>

    <middle>
        <section title="Requirements notation">
            <t>
                The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
                "OPTIONAL" in this document are to be interpreted as described in
                <xref target="RFC2119" />
                .
            </t>
        </section>

        <section title="Introduction">
            <t>In the Resource Public Key Infrastructure (RPKI), certificate authorities publish certificates, including end entity certificates, and CRLs to repositories on publication servers. Relying Parties (RP) retrieve the published information from the repository and MAY store it in a cache. This document specifies a delta protocol which provides relying parties with a mechanism to query a repository for changes, thus enabling the RP to keep its state in sync with the repository.</t>
        <t>This protocol aims to minimize the amount of data that traverses the network and thus helps minimize the amount of time until repository convergence occurs. This protocol also provides a standards based way to obtain consistent, point in time views of a single repository eliminating a number of consistency related issues. The protocol is designed to be consistent with the publication protocol (http://datatracker.ietf.org/doc/draft-ietf-sidr-publication/) wherever possible.</t>
        </section>

        <section title="RPKI Repository Delta Protocol Implementation">

            <section title="Overview">
                <t>Relying parties in the RPKI retrieve information from repositories. In order to retrieve the information as efficiently as possible this protocol defines an update notification file which can be used to determine if the RP and repository are synchronized. If the RP is not in sync with the repository, the update notification file provides a means to locate files containing deltas from the past 24 hours or snapshot file(s) with a complete, point in time version of the repository no less than 24 hours old. When possible the use of deltas SHOULD be preferred as the means for synchronizing the state of the RP with the repository. When a RP is in a state such that the available deltas are insufficient to synchronize its state with the repository then the snapshot file(s) MUST be used. Such cases can occur when a new RP is first brought online, when a RP has not retrieved updates for more than 24 hours, when a RP has become out of sync with the repository due to an error or when the repository must transition to a new session id. After downloading a snapshot it MAY be necessary to apply deltas to synchronize with the current version of the repository. Therefore, it MUST always be possible to apply zero or more deltas to the snapshot to synchronize a RP with the current version of the repository. The snapshot and delta files are immutable in that the contents for a given URI never change and can safely be cached. Immutable files cause less processing to be done on the server and allow for safe caching of repository content.</t>

                <t>The snapshot provides a consistent, point in time view of the repository. The snapshot can be large so it is RECOMMENDED to break it into multiple segment files. Each file making up the snapshot MUST have a unique URI. It is RECOMMENDED to make each URI contain the session id, version and segment number.</t>
                <t>Each delta file describes changes in the repository from one point in time to another point in time. A single delta file MAY contain many updates. Due to the way that Certificate Authorities frequently sign new manifests and CRLs in large batches some deltas may contain a large number of changes. For this reason it is also RECOMMENDED to split large deltas into multiple segment files. Each delta segment file MUST be made available over a unique URI. It is recommended to include the following information in the URI; session id, from version number, to version number, and segment number if applicable.</t>

                <t>In this document we will assume that HTTP is used as the transport protocol. The unique URIs for snapshot and delta files are intended to support HTTP caching, possibly by Content Delivery Networks (CDNs). We will include HTTP specific hints with regards to the caching and retrieval of the update notification file. It should be noted that other transport protocols can also be used, provided that the same caching semantics are observed.</t>
            </section>

            <section title="Transport protocol">
                <t>The delta protocol described here has been designed to use HTTP as the transport protocol although it is not strictly required. Any transport protocol that meets the requirements laid out in the following sections can be used in place of HTTP.</t>
            </section>

            <section title="File Format">
                <t>This protocol uses XML for the update notification, snapshot and delta files.</t>
            </section>

            <section title="Update Notification File">
                <t>The update notification file is used by RPs to discover whether any changes exist between the state of the publication server's repository and the RP's cache. It describes the location of the files containing the snapshot and incremental deltas which can be used by the RP to synchronize with the repository. The update notification file can be cached, but it SHOULD NOT be cached for more than five minutes. The URIs for each snapshot and delta file MUST be unique and the contents of the files for each URI MUST not change.</t>
                <t>Assuming that HTTP is used as the transport protocol, publication servers SHOULD use appropriate cache headers. The maximum allowed time to cache MUST not exceed 5 minutes (e.g. add header: Cache-Control: max-age=300). It is RECOMMENDED that Relying Parties use the "If-Modified-Since" header in GET requests for the notification file.</t>
                <t>A RP MUST NOT process any update notification file that is incomplete or not well formed.</t>
                <section title="Root Element">
                    <t>The XML namespace MUST be http://www.ripe.net/rpki/rrdp.</t>
                    <t>The encoding MUST be us-ascii.</t>
                    <t>The root element MUST be msg and it contains the following attributes:</t>

                    <texttable>
                        <ttcol align="center">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <ttcol align="left">Value</ttcol>
                        <c>type</c>
                        <c>The type of this RRDP message.</c>
                        <c>notification</c>
                        <c>version</c>
                        <c>The RRDP protocol version of this message.</c>
                        <c>1</c>
                    </texttable>
                </section>

                <section title="Contents">
                    <t>The message MUST contain one notification element. The element has the following attributes:</t>

                    <texttable>
                        <ttcol align="center">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>session_id</c>
                        <c>Unique identifier of the session id of the publication server. It is RECOMMENDED that a UUID is used as the session_id.</c>
                        <c>current_version</c>
                        <c>Unbounded, unsigned integer representing the current version of the repository.</c>
                    </texttable>

                    <t>The current version number MUST be one greater than the previous version number for a given session id. If a repository server is no longer able to provide contiguous deltas it MUST reset the session id and start with version 0.</t>

                    <t>The notification element MUST contain one 'snapshot' element and MAY contain a 'deltas' element. In practice the 'deltas' element will almost always be present because most Certificate Authorities re-sign manifests and CRLs at a frequency of at least once every 24 hours. The snapshot and deltas elements are each described below.</t>

                    <section title="SNAPSHOT ELEMENT">
                        <t>A snapshot is a point in time view of the state of the entire repository. A snapshot MUST have one or more 'snapshot-segment' elements.</t>
                        <t>The snapshot segment files MUST not contain duplicate entries for the same certificate or CRL URI. This means that snapshot segments do not have to be applied in serial.</t>

                        <texttable>
                            <ttcol align="center">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>version</c>
                            <c>The version number of the repository for this full snapshot.</c>
                        </texttable>
                    </section>

                    <section title="SNAPSHOT SEGMENT ELEMENT">
                        <t>A snapshot-segment contains information about one segment of a full snapshot.</t>

                        <texttable>
                            <ttcol align="center">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>uri</c>
                            <c>A unique URI for this snapshot segment. The URI must be unique so the file can be cached indefinitely. It is RECOMMENDED to construct this URI based on the session id, version and segment number. E.g. http://host/snapshots/SESSION_ID/VERSION/SEGMENT.xml or with concrete data http://host/snapshots/9f735ad0-aef4-4d8b-820d-559472936265/203/4.xml</c>
                            <c>hash</c>
                            <c>The SHA-256 hash of the snapshot segment file (similar to RFC 6485). This does not provide any additional security, it merely helps detect transport errors.</c>
                        </texttable>

                    </section>

                    <section title="DELTAS ELEMENT">
                        <t>The deltas element contains delta segment elements with information about the available deltas. It does not have any attributes.</t>
                        <t>The delta segments MUST be listed in chronological order and MUST be replayed in the order specified in the updated notification file. While one version MAY be covered in more than one file there MUST NOT be any overlap in version numbers. There are two possible valid cases. The first is that the from and to versions are identical to the previous segment and the segment number is one greater than the previous delta. The other valid case  is when the from version is equal to the to version of the previous delta and the to version of the element is greater than or equal to the from version of the element. In this case the segment number MAY be present and have a value of 1 or MUST NOT be present. Any case that does not meet one of these two requirements MUST be considered invalid.</t>
                    </section>

                    <section title="DELTA SEGMENT ELEMENT">
                        <t>A delta segment file element contains information about one or more sets of deltas specified by the starting 'from' version and going until the ending 'to' version. These deltas may be aggregated over time, however each delta file remains immutable. The delta element serves for deltas that are too large to fit in one file. It is broken into segments similar to the way that the snapshot file is broken into segments.</t>

                        <texttable>
                            <ttcol align="center">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>from</c>
                            <c>The first version contained in the delta.</c>
                            <c>to</c>
                            <c>The last version contained in the delta.</c>
                            <c>uri</c>
                            <c>A URI pointing to the file containing the changes in this delta. The URI must be unique so the file can be cached indefinitely. It is RECOMMENDED to construct this URI based on the session id, from version, to version and segment number (if applicable) for this delta. E.g. http://host/deltas/SESSION_ID/FROM/TO/SEGMENT.xml or http://host/deltas/9f735ad0-aef4-4d8b-820d-559472936265/173/174/5.xml</c>
                            <c>hash</c>
                            <c>The SHA-256 hash of the delta segment file (similar to RFC 6485). This does not provide any additional security, it merely helps detect transport errors.</c>
                        </texttable>
                    </section>

                </section>


                <section title="Sample Notification File">
                  <figure>
                      <artwork> <![CDATA[
<?xml version="1.0" encoding="us-ascii"?>
<msg type="notification" version="1" 
    xmlns="http://www.ripe.net/rpki/rrdp">
    <notification 
        session_id="d9f6dc91-0394-40b9-9663-66aef4bb623a" 
        current_version="203">
        <snapshot version="202">
            <snapshot-segment
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/1.xml"
hash="279b79fd8389e20585f26735ee70e0e4d4b8af23bb2e2e611c70e92d2433e"/>
            <snapshot-segment
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/2.xml"
hash="a2d56ec180f2dde2a46bf92e0565932e25829b852a0b47d5de6e41394c290"/>
            <snapshot-segment
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/3.xml"
hash="b2d56ec180f2dde2a46bf92e0565932e2582952a0b43107d5de6e41394c29a"/>
            <snapshot-segment
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/4.xml"
hash="c2d56ec180f2dde2a46bf92e0565932e25829b2a0b43107d5de6e41394c29f"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/5.xml" 
hash="d2d56ec180f2dde2a46bf92e0565932e229b852a0b43107d5de6e41394c29b"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/6.xml" 
hash="e2d56ec180f2dde2a46bf92e0565932e258b852a0b43107d5de6e41394c292"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/7.xml" 
hash="f2d56ec180f2dde2a46bf92e0565932e2582952a0b43107d5de6e41394c29c"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/8.xml" 
hash="02d56ec180f2dde2a46bf92e0565932e25829b8a0b43107d5de6e41394c294"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/9.xml" 
hash="c2d56ec180f2dde2a46bf92e0565932e25829b852b43107d5de6e41394c29d"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/10.xml" 
hash="22d56ec180f2dde2a46bf92e0565932e25829b852a0b43107d5de41394c296"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/11.xml" 
hash="b2d56ec180f2dde2a46bf92e0565932e25829b852a0b43107d5de6e394c29e"/>
            <snapshot-segment 
uri="http://host/d9f6dc91-0394-40b9-9663-66aeb623a/snapshot/202/12.xml" 
hash="42d56ec180f2dde2a46bf92e0565932e25829b852a0b4315de6e41394c298"/>
        </snapshot>
        <deltas>
            <delta-segment from="156" to="183" 
uri="http://host/d9f6c91-0394-40b9-9663-66aeb623a/deltas/156/183.xml" 
hash="a2d56ec180f2dde2a46bf90565932e25829b852a0b43107d5de6e41394c291"/>
            <delta-segment from="183" to="184"
uri="http://host/d9f6c91-0394-40b9-9663-66aeb623a/deltas/183/184/1.xml" 
hash="a2d56ec180f2dde2a46b2e0565932e25829b852a0b43107d5de6e41394c292"/>
            <delta-segment from="183" to="184" 
uri="http://host/d9f6c91-0394-40b9-9663-66aeb623a/deltas/183/184/2.xml" 
hash="a2d56ec180f2dde2a46b2e0565932e25829b852a0b43107d5de6e41394c292"/>
            <delta-segment from="183" to="184"
uri="http://host/d9f6c91-0394-40b9-9663-66aeb623a/deltas/183/184/3.xml" 
hash="a2d56ec180f2dde2a46b2e0565932e25829b852a0b43107d5de6e41394c292"/>
            <delta-segment from="184" to="197" 
uri="http://host/d9f6c91-0394-40b9-9663-66aeb623a/deltas/184/197.xml" 
hash="a2d56ec180f2dde2a46b2e0565932e25829b852a0b43107d5de6e41394c292"/>
            <delta-segment from="197" to="203" 
uri="http://host/d9f6c91-0394-40b9-9663-66aeb623a/deltas/197/203.xml" 
hash="a2d56ec180f2dde2a4f92e0565932e25829b852a0b43107d5de6e41394c293"/>
        </deltas>
    </notification>
</msg>
]]></artwork>
                      <postamble>It should be noted that the length of the UUID and SHA-256 hash are not correct, this example is only for illustrative purposes.</postamble>
                    </figure>
                </section>

                <section title="Snapshot and Delta Availability Requirements">
                    <t>It is RECOMMENDED that publication servers aggregate deltas after some time to reduce the number of fetches that RPs need to perform and to keep the notification file small. There are several strategies possible to optimize this, so this is not limited strictly here.</t>
                    <t>The publication server MUST provide a set of deltas that allow RPs to synchronize to the current version number from the snapshot. The RP MAY need to process more than one delta to achieve this.</t>
                </section>
            </section>

            <section title="Snapshot Segment Format">
                <t>A snapshot MUST contain all objects from the repository current as of the time of the publication. Each segment contains a subset of the objects such that the union of all the segments make up the full snapshot. Snapshot segments only contain publish elements. They MUST NOT contain withdraw elements.</t>

                <section title="Root Element">
                    <t>The XML namespace MUST be http://www.ripe.net/rpki/rrdp.</t>
                    <t>The encoding MUST be us-ascii.</t>
                    <t>The root element MUST be msg and it contains the following attributes:</t>

                    <texttable>
                        <ttcol align="center">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <ttcol align="left">Value</ttcol>
                        <c>type</c>
                        <c>The type of this RRDP message.</c>
                        <c>snapshot</c>
                        <c>version</c>
                        <c>The RRDP protocol version of this message.</c>
                        <c>1</c>
                    </texttable>
                </section>

                <section title="Contents">
                    <t>The message MUST contain one snapshot element. The element has the following attributes:</t>

                    <texttable>
                        <ttcol align="center">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>session_id</c>
                        <c>Unique identifier of the session id of the publication server. It is RECOMMENDED that a UUID is used as the session_id.</c>
                        <c>version</c>
                        <c>Unbounded, unsigned integer representing the current version of the repository.</c>
                        <c>index</c>
                        <c>The index of this segment for the given version, as in, this is segment 2 of 9 for version 836. The index is one based so the first value is 1 and NOT 0.</c>
                    </texttable>

                    <section title="PUBLISH ELEMENT">
                        <t>The publish element is an exact copy of the publish element as described in the publication document (reference: http://tools.ietf.org/html/draft-ietf-sidr-publication-03#section-3.3).</t>
                        <texttable>
                            <ttcol align="center">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>uri</c>
                            <c>The URI that was included in the original 'publish' element.</c>
                        </texttable>
                        <t>The content of each element is the base 64 encoded object.</t>
                        <t>The URI is useful for current RP implementations that use URIs to work out relations in the RPKI. It should be noted though that RPs can also work this out based on manifests and object properties such as key identifiers, signatures and the hash of the binary object. See: http://www.ietf.org/internet-drafts/draft-tbruijnzeels-sidr-validation-local-cache-00.txt</t>
                        <t>The extension of the filename can be used by the RP to determine the type of object.</t>
                    </section>
                </section>

                <section title="Sample SNAPSHOT SEGMENT file">
                    <figure>
                        <artwork><![CDATA[
<?xml version="1.0" encoding="us-ascii"?>
<msg xmlns="http://www.ripe.net/rpki/rrdp"
    type="snapshot" version="1">
    <snapshot session_id="d9f6dc91-0394-40b9-9663-66aef4bb623a"
        repository_version="1" index="2">
        <publish uri="http://host/foo/bar/cer1.cer">
            MIIE+jCCA+KgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAzMTEwLwYDVQQD
            jRBODAxN0U2NkE5RTkxNzJFNDYxMkQ4Q0Y0QzgzRjIzOERFMkEzMB4XE
            ........................................................
            h8zeHoFVu6ghRPy5dbOA4akX/KG6b8XIx0iwPYdLiDbdWFbtTdPcXBau
        </publish>
        <publish uri="http://host/foo/bar/cer2.cer">
            MIIE+jCCA+KgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAzMTEwLwYDVQQD
            h8zeHoFVu6ghRPy5dbOA4akX/KG6b8XIx0iwPYdLiDbdWFbtTdPcXBau
            ........................................................
            jRBODAxN0U2NkE5RTkxNzJFNDYxMkQ4Q0Y0QzgzRjIzOERFMkEzMB4XD
        </publish>
        <publish uri="http://host/foo/bar/cer3.cer">
            MIIE+jCCA+KgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAzMTEwLwYDVQQD
            h8zeHoFVu6ghRPy5dbOA4akX/KG6b8XIx0iwPYdLiDbdWFbtTdPcXBau
            ........................................................
            jRBODAxN0U2NkE5RTkxNzJFNDYxMkQ4Q0Y0QzgzRjIzOERFMkEzMB4XD
        </publish>
    </snapshot>
</msg>
]]></artwork>
                     <postamble>Lines containing only periods signify additional lines of base 64 encoded data.</postamble>
                    </figure>
                </section>

                <section title="Applying changes from snapshot segments">
                    <t>Snapshot segments for a given session id and version MUST NOT contain publish elements for a given URI. Therefore snapshot segments do not have to be applied in a particular order.</t>
                </section>
           </section>

            <section title="Incremental Delta Format">

                <t>An incremental delta segment file contains all changes between the start and end versions.</t>

                <section title="Root Element">
                    <t>The XML namespace MUST be http://www.ripe.net/rpki/rrdp.</t>
                    <t>The encoding MUST be us-ascii.</t>
                    <t>The root element MUST be msg and it contains the following attributes:</t>

                    <texttable>
                        <ttcol align="center">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <ttcol align="left">Value</ttcol>
                        <c>type</c>
                        <c>The type of this RRDP message.</c>
                        <c>deltas</c>
                        <c>version</c>
                        <c>The RRDP protocol version of this message.</c>
                        <c>1</c>
                    </texttable>
                </section>

                <section title="Contents">
                    <t>The message MUST contain one deltas element. The deltas must be applied in the numeric order by version and then by the order in which they appear in this file. The deltas element has the following attributes:</t>

                    <texttable>
                        <ttcol align="center">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>session_id</c>
                        <c>Unique identifier of the session id of the publication server. It is RECOMMENDED that a UUID is used as the session_id.</c>
                        <c>from</c>
                        <c>Unbounded, unsigned integer representing the first version for this delta.</c>
                        <c>to</c>
                        <c>Unbounded, unsigned integer representing the last version for this delta.</c>
                        <c>index</c>
                        <c>The index of this delta IF the delta was not able to fit in one file, as in, this is segment 2 of 9 for the delta that covers the changes from version 3 to version 4. The index is one based so the first value is 1 and NOT 0. This attribute is OPTIONAL, but it MUST be present if the particular version range is covered by more than one file.</c>
                    </texttable>

                    <section title="DELTA ELEMENT">
                        <texttable>
                            <ttcol align="center">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>version</c>
                            <c>The version of the delta changes.</c>
                        </texttable>
                        <t>The delta element contains withdraw and publish elements.</t>

                        <section title="WITHDRAW ELEMENT">
                            <t>The withdraw element is an exact copy of the withdraw element as described in the publication document (reference: http://tools.ietf.org/html/draft-ietf-sidr-publication-03#section-3.3).</t>

                            <texttable>
                                <ttcol align="center">Attribute</ttcol>
                                <ttcol align="left">Description</ttcol>
                                <c>uri</c>
                                <c>The URI that was included in the original withdraw element.</c>
                            </texttable>
                        </section>

                        <section title="PUBLISH ELEMENT">
                            <t>The publish element is an exact copy of the publish element as described in the publication document (reference: http://tools.ietf.org/html/draft-ietf-sidr-publication-03#section-3.3).</t>
                            <texttable>
                                <ttcol align="center">Attribute</ttcol>
                                <ttcol align="left">Description</ttcol>
                                <c>uri</c>
                                <c>The URI that was included in the original publish element.</c>
                            </texttable>
                            <t>The content of each element is the base 64 encoded object.</t>
                            <t>The URI is useful for current RP implementations that use URIs to work out relations in the PKI. It should be noted though that RPs can also work this out based on manifests and object properties such as key identifiers, signatures and the hash of the binary object. See: http://www.ietf.org/internet-drafts/draft-tbruijnzeels-sidr-validation-local-cache-00.txt</t>
                            <t>The extension of the filename can be used by the RP to determine the type of object.</t>
                        </section>

                    </section>

                </section>


                <section title="Sample DELTAS file">
                    <figure>
                        <artwork><![CDATA[
<?xml version="1.0" encoding="us-ascii"?>
<msg type="deltas" version="1"
    xmlns="http://www.ripe.net/rpki/rrdp">
    <deltas session_id="d9f6dc91-0394-40b9-9663-66aef4bb623a"
        from="0" to="3" index="4">
        <delta version="1">
            <publish uri="http://host/foo/bar/cer1.cer">
                MIIE+jCCA+KgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAzMTEw
                jRBODAxN0U2NkE5RTkxNzJFNDYxMkQ4Q0Y0QzgzRjIzOERFM
                ................................................
                h8zeHoFVu6ghRPy5dbOA4akX/KG6b8XIx0iwPYdLiDbdWFbt
            </publish>
        </delta>
        <delta version="2">
            <withdraw uri="http://host/foo/bar/cer1.cer" />
            <publish uri="http://host/foo/bar/cer2.cer">
                MIIE+jCCA+KgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAzMTEw
                h8zeHoFVu6ghRPy5dbOA4akX/KG6b8XIx0iwPYdLiDbdWFbt
                ................................................
                jRBODAxN0U2NkE5RTkxNzJFNDYxMkQ4Q0Y0QzgzRjIzOERFM
            </publish>
            <publish uri="http://host/foo/bar/cer3.cer">
                MIIE+jCCA+KgAwIBAgIBDTANBgkqhkiG9w0BAQsFADAzMTEw
                h8zeHoFVu6ghRPy5dbOA4akX/KG6b8XIx0iwPYdLiDbdWFbt
                ................................................
                jRBODAxN0U2NkE5RTkxNzJFNDYxMkQ4Q0Y0QzgzRjIzOERFM
            </publish>
        </delta>
        <delta version="3">
            <withdraw uri="http://host/foo/bar/cer2.cer" />
        </delta>
    </deltas>
</msg>
                        ]]></artwork>
                        <postamble>The dotted lines signify additional lines of Base 64 encoded data.</postamble>
                    </figure>
                </section>

                <section title="Applying changes from delta segments">
                    <t>Delta segment files which are not well formed MUST not be processed. The delta segment with the lowest from version for a given session id MUST be processed first. Each version for a given session id SHOULD NOT be applied more than once. Delta segments for a given session id, from version and to version MUST be applied in the order of the version and then by the order in which they are specified in the file.</t>
                </section>

            </section>

            <section title="Pointing to the update notification file">
                <t>The location of the update notification files for a CA certificate publication point is communicated by including a SIA pointer for them. We propose the to use 'http+rdp' for the URI scheme, implying http is used as the transfer protocol and this Rpki Repository Delta Protocol (rrdp) applies. E.g. http+rrdp://rpki.ripe.net/updates.xml</t>
            </section>

        </section>

        <section title="Security Considerations">
            <t>TBD</t>
        </section>
        <section title="Acknowledgements">
            <t>TBD</t>
        </section>
    </middle>

    <back>
        <references title="Normative References">&rfc2119;
        </references>
    </back>

</rfc>
