<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-qin-bmwg-rpki-rp-bench-01" category="info" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="BM for RPKI RP">Benchmarking Methodology for RPKI Relying Party</title>
    <seriesInfo name="Internet-Draft" value="draft-qin-bmwg-rpki-rp-bench-01"/>
    <author initials="L." surname="Qin" fullname="Lancheng Qin">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>qinlc@mail.zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="Y." surname="Su" fullname="Yingying Su">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>suyy@mail.zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="D." surname="Li" fullname="Dan Li">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>tolidan@tsinghua.edu.cn</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <area>Operations and Management</area>
    <workgroup>BMWG</workgroup>
    <keyword>RPKI, Relying Party, Benchmarking</keyword>
    <abstract>
      <?line 61?>

<t>This document defines a benchmarking methodology for evaluating RPKI Relying Party (RP) implementations in controlled laboratory environments. The methodology focuses on whether RP implementations correctly perform required validation steps and on the performance of these operations. RP implementations are treated as black boxes, enabling consistent and objective assessment based on externally observable behavior rather than internal design or implementation details.</t>
    </abstract>
  </front>
  <middle>
    <?line 65?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t>The Resource Public Key Infrastructure (RPKI) <xref target="RFC6480"/> provides a framework for cryptographically securing Internet routing by allowing Relying Parties (RPs) to validate Route Origin Authorizations (ROAs) and other RPKI objects. Currently, there is no standardized methodology to evaluate whether RP implementations correctly perform the required validation procedures. In addition, the processing performance of RPs, such as the time required to validate objects and generate validated ROA payloads (VRPs), has not been systematically measured.</t>
      <t>This document defines a benchmarking methodology for Relying Parties that addresses both functional correctness and processing performance. Specifically, the methodology provides:</t>
      <ol spacing="normal" type="1"><li>
          <t>Functional correctness tests to evaluate compliance with the RFC requirements.</t>
        </li>
        <li>
          <t>Performance tests to measure the total processing time from object retrieval to VRP generation.</t>
        </li>
      </ol>
      <t>This document currently focuses on the validation output produced from ROAs, namely the generated VRP set. Validation outputs associated with ASPA objects or other current or future RPKI signed objects are outside the scope of this document, although they may be evaluated using a similar methodology with object-specific validation requirements and expected outputs.</t>
      <t>The remainder of this document is structured as follows:</t>
      <ul spacing="normal">
        <li>
          <t>Section 4 defines the functional correctness and performance tests.</t>
        </li>
        <li>
          <t>Section 5 defines the format for reporting test results.</t>
        </li>
      </ul>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="sec-rp">
      <name>Relying Party Overview</name>
      <t>A Relying Party (RP) in the Resource Public Key Infrastructure (RPKI) is responsible for retrieving, validating, and making available RPKI objects to support secure route validation. <xref target="RFC8897"/> specifies the expected behavior of RPs, which includes:</t>
      <ul spacing="normal">
        <li>
          <t>Object Retrieval: obtaining RPKI objects from Publication Points (PPs) and keeping them up-to-date.</t>
        </li>
        <li>
          <t>Object Syntax Validation: checking DER encoding, syntax, and structural correctness of RPKI objects, including certificates, CRLs, ROAs, and manifests.</t>
        </li>
        <li>
          <t>Certification Path Validation: constructing and validating certificate chains from the Trust Anchor to each leaf certificate.</t>
        </li>
        <li>
          <t>Signed Object Signature Validation: verifying digital signatures of RPKI objects.</t>
        </li>
        <li>
          <t>Manifest Processing: ensuring completeness and integrity of published objects.</t>
        </li>
      </ul>
      <t>After validation, the RP produces a Validated Payload for use in routing systems. These functions ensure that only valid and trusted RPKI objects influence routing decisions.</t>
    </section>
    <section anchor="sec-test-methodology">
      <name>Test Setup</name>
      <t>This section defines the test setup. The System Under Test (SUT) (i.e., the RP software) is treated as a black box. No internal configuration or implementation behavior of the RP software is mandated. The test setup focuses on providing controlled inputs and observing RP outputs to enable reproducible and comparable measurements.</t>
      <t>In this methodology, the input to the SUT is the controlled RPKI repositories configured by the Controller and published through the controlled Servers. The output of the SUT is the generated VRP set, or equivalent validation output that allows the Controller to determine the resulting VRPs. Verification in this methodology is based on the SUT's externally observable output, rather than on its internal cache layout, internal processing pipeline, or implementation-specific debug information. For the correctness metrics defined in this document, a one-shot validation run is sufficient.</t>
      <section anchor="test-environment">
        <name>Test Environment</name>
        <t>In this methodology, the Tester consists of the Servers and the Controller. Together, they generate the test conditions, trigger events, and support observation of the SUT for functional and performance evaluation. The SUT itself is evaluated for correctness and efficiency in processing RPKI objects.</t>
        <figure anchor="fig-1">
          <name>Test environment</name>
          <artwork><![CDATA[
+----------------------------------+
|             Controller           |
+----------------------------------+
       |                  |
       v                  v
+-------------+      +-------------+
|     SUT     | ---> |   Servers   |
+-------------+      +-------------+
]]></artwork>
        </figure>
        <t>To ensure meaningful testing, the environment should include:</t>
        <ul spacing="normal">
          <li>
            <t>At least one Trust Anchor (TA)</t>
          </li>
          <li>
            <t>One or more subordinate certificate authority (CA) certificates</t>
          </li>
          <li>
            <t>RPKI objects signed by CAs</t>
          </li>
        </ul>
        <t>The test environment should support multiple RPKI transport protocols for object retrieval, including Rsync <xref target="RSYNC"/>, RRDP <xref target="RFC8182"/>, or Erik <xref target="I-D.ietf-sidrops-rpki-erik-protocol"/>.</t>
      </section>
      <section anchor="system-under-test-and-servers">
        <name>System Under Test and Servers</name>
        <t>The SUT is an RPKI Relying Party implementation that retrieves RPKI objects from the controlled repositories, validates them, and generates the VRP set or equivalent validation output.</t>
        <t>The Servers should include PPs which host RPKI objects signed by CAs. Each PP at least contains ROAs, a manifest, and a CRL necessary for the tests. RPKI objects can be added, modified, or removed by the Controller.</t>
      </section>
      <section anchor="controller">
        <name>Controller</name>
        <t>The Controller orchestrates the entire testing process. In <xref target="fig-1"/>, the arrows from the Controller to both the SUT and Servers represent the flow of control information.</t>
        <t>For the SUT, the Controller controls the start and end of tests. The Controller can obtain the SUT's VRP set or equivalent validation output through an externally observable output interface configured for the test, such as an output file, RTR, or a CCR profile <xref target="I-D.ietf-sidrops-rpki-ccr"/>. The Controller then processes test results and compares them with the expected output derived from the controlled repository contents.</t>
        <t>For the Servers, the Controller handles content changes to ensure that the SUT sees one set of RPKI objects during a validation run and a different set during the next run. Existing tools (e.g., <xref target="Barry"/>) can be used to implement and manage the test environment.</t>
      </section>
    </section>
    <section anchor="rpki-relying-party-benchmarking-tests">
      <name>RPKI Relying Party Benchmarking Tests</name>
      <section anchor="baseline-valid-repository-processing">
        <name>Baseline Valid Repository Processing</name>
        <t>Objective: To establish a baseline for evaluating whether the SUT can process a controlled repository containing valid RPKI objects and generate the expected VRP set. This test verifies the SUT's output for a repository in which all relevant objects are valid and all validation conditions are satisfied. This baseline confirms that valid repository contents produce the expected VRP set before error cases are introduced.</t>
        <t>Procedure: The Servers and all RPKI objects are correctly configured prior to the test. The SUT is configured with the URI of the TA.</t>
        <t>The following steps are performed:</t>
        <ol spacing="normal" type="1"><li>
            <t>Publish a baseline repository containing valid certificates, manifests, CRLs, and ROAs on the Servers. The baseline repository <bcp14>MUST</bcp14> be constructed so that each ROA under test produces a distinct VRP payload. This ensures that the absence of a VRP from the generated VRP set can be attributed to the rejection of the corresponding ROA.</t>
          </li>
          <li>
            <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
          </li>
          <li>
            <t>Start the SUT and allow it to perform one validation run over the controlled repository.</t>
          </li>
          <li>
            <t>Verify that the generated VRP set matches the expected VRP set derived from the baseline repository contents.</t>
          </li>
        </ol>
        <t>Expected Results:
The generated VRP set matches the expected VRP set derived from the baseline repository contents. This indicates that, for the baseline repository, the SUT can retrieve, parse, validate, and process the relevant RPKI objects sufficiently to generate the expected VRPs.</t>
      </section>
      <section anchor="object-syntax-validation-correctness">
        <name>Object Syntax Validation Correctness</name>
        <t>This section evaluates whether the SUT correctly performs syntax validation for different RPKI objects. The SUT is expected to perform syntax checks according to the relevant specifications and detect objects that do not conform to the defined syntax requirements.</t>
        <t>The syntax requirements for different RPKI objects are defined in the following specifications:</t>
        <ul spacing="normal">
          <li>
            <t>Certificate and CRL: <xref target="RFC5280"/> and <xref target="RFC6487"/></t>
          </li>
          <li>
            <t>Manifest: <xref target="RFC6488"/> and <xref target="RFC9286"/></t>
          </li>
          <li>
            <t>ROA: <xref target="RFC6488"/> and <xref target="RFC9582"/></t>
          </li>
        </ul>
        <t>Unless otherwise specified, each test in this section starts from the baseline repository defined in the Baseline Valid Repository Processing test. A single object in the baseline repository is then replaced with a malformed object that violates one specific syntax requirement. The SUT behavior is evaluated by checking whether the generated VRP set matches the expected result derived from this single-object modification. In general, VRPs whose production depends on the malformed object are expected to be absent from the generated VRP set, while unaffected baseline VRPs are expected to remain present.</t>
        <section anchor="der-decoding">
          <name>DER Decoding</name>
          <t>Objective: To evaluate whether the SUT correctly rejects an RPKI object that contains invalid Distinguished Encoding Rules (DER) encoding.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
            </li>
            <li>
              <t>Select one ROA in the baseline repository whose payload is present in the baseline expected VRP set.</t>
            </li>
            <li>
              <t>Replace only the selected ROA with a malformed DER-encoded version of that ROA, for example by using a BER encoding that is not valid DER.</t>
            </li>
            <li>
              <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the generated VRP set matches the baseline expected VRP set with the VRP derived from the malformed ROA removed.</t>
            </li>
          </ol>
          <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRP derived from the malformed DER-encoded ROA removed. Unaffected baseline VRPs remain present.</t>
        </section>
        <section anchor="certificate-syntax-validation">
          <name>Certificate Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for CA certificates.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
            </li>
            <li>
              <t>Select one leaf CA certificate in the baseline repository. The selected leaf CA has no subordinate CAs and issues EE certificates for one or more ROAs that produce baseline VRPs.</t>
            </li>
            <li>
              <t>Replace only the selected leaf CA certificate with a malformed CA certificate that violates one specific syntax requirement defined in Section 7.2 of <xref target="RFC6487"/> (e.g., missing mandatory fields, invalid field values, incorrect extensions, or malformed structures).</t>
            </li>
            <li>
              <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs whose EE certificates are issued by the selected leaf CA removed.</t>
            </li>
          </ol>
          <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs whose EE certificates are issued by the selected leaf CA removed. Unaffected baseline VRPs remain present.</t>
        </section>
        <section anchor="crl-syntax-validation">
          <name>CRL Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for CRLs.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
            </li>
            <li>
              <t>Select one leaf CA in the baseline repository. The selected leaf CA has no subordinate CAs and its publication point contains one or more ROAs that produce baseline VRPs.</t>
            </li>
            <li>
              <t>Replace only the CRL issued by the selected leaf CA with a malformed CRL that violates one specific syntax requirement defined in <xref target="RFC5280"/> or <xref target="RFC6487"/>.</t>
            </li>
            <li>
              <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs in the selected leaf CA's publication point removed.</t>
            </li>
          </ol>
          <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs in the selected leaf CA's publication point removed. Unaffected baseline VRPs remain present.</t>
        </section>
        <section anchor="manifest-syntax-validation">
          <name>Manifest Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for manifests.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
            </li>
            <li>
              <t>Select one leaf CA in the baseline repository. The selected leaf CA has no subordinate CAs and its publication point contains one or more ROAs that produce baseline VRPs.</t>
            </li>
            <li>
              <t>Replace only the manifest associated with the selected leaf CA's publication point with a malformed manifest that violates one specific syntax requirement defined in <xref target="RFC6488"/> or <xref target="RFC9286"/>.</t>
            </li>
            <li>
              <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs in the selected leaf CA's publication point removed.</t>
            </li>
          </ol>
          <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs in the selected leaf CA's publication point removed. Unaffected baseline VRPs remain present.</t>
        </section>
        <section anchor="roa-syntax-validation">
          <name>ROA Syntax Validation</name>
          <t>Objective: To evaluate whether the SUT correctly performs syntax validation for ROAs.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
            </li>
            <li>
              <t>Select one ROA in the baseline repository and record the VRP payload expected from that ROA.</t>
            </li>
            <li>
              <t>Replace only the selected ROA with a malformed ROA that violates one specific syntax requirement defined in <xref target="RFC6488"/> or <xref target="RFC9582"/>.</t>
            </li>
            <li>
              <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the VRP payload expected from the malformed ROA is absent from the generated VRP set.</t>
            </li>
          </ol>
          <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRP payload expected from the malformed ROA removed. Unaffected baseline VRPs remain present.</t>
        </section>
      </section>
      <section anchor="certification-path-validation-correctness">
        <name>Certification Path Validation Correctness</name>
        <t>Objective: To evaluate whether the SUT correctly performs certification path validation for the EE certificate associated with a selected ROA.</t>
        <t>Procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
          </li>
          <li>
            <t>Select one ROA in the baseline repository and identify the EE certificate associated with that ROA.</t>
          </li>
          <li>
            <t>Modify only the relationship between the selected ROA's EE certificate and its issuing CA certificate to introduce one certification path violation. Examples of such violations include, but are not limited to:
            </t>
            <ul spacing="normal">
              <li>
                <t>Invalid certificate signature, where the EE certificate cannot be verified using the issuing CA's public key.</t>
              </li>
              <li>
                <t>Resource extension violation, where the resources listed in the EE certificate are not encompassed by the resources listed in the issuing CA certificate.</t>
              </li>
              <li>
                <t>Invalid issuer-subject relationship, where the issuer information in the EE certificate is inconsistent with the issuing CA certificate.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
          </li>
          <li>
            <t>Start the SUT and allow it to synchronize the repository contents.</t>
          </li>
          <li>
            <t>Verify that the VRP payload expected from the selected ROA is absent from the generated VRP set.</t>
          </li>
        </ol>
        <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRP payload expected from the selected ROA removed. Unaffected baseline VRPs remain present.</t>
      </section>
      <section anchor="signed-object-signature-validation-correctness">
        <name>Signed Object Signature Validation Correctness</name>
        <t>Objective: To evaluate whether the SUT correctly verifies the digital signature of an RPKI signed object using the corresponding public key in the associated certificate.</t>
        <t>Procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
          </li>
          <li>
            <t>Select one RPKI signed object in the baseline repository whose validity is required for producing one or more expected VRPs. For a ROA signature test, select one ROA and record the VRP payload expected from that ROA.</t>
          </li>
          <li>
            <t>Replace only the selected signed object with a version whose signature is intentionally invalid (e.g., the object content is modified after signing or the signature does not match the corresponding certificate).</t>
          </li>
          <li>
            <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
          </li>
          <li>
            <t>Start the SUT and allow it to synchronize the repository contents.</t>
          </li>
          <li>
            <t>Verify that the generated VRP set matches the baseline expected VRP set with the VRPs that depend on the invalidly signed object removed.</t>
          </li>
        </ol>
        <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRPs whose production depends on the invalidly signed object removed. For a ROA signature test, this means that the VRP payload expected from the selected ROA is removed. Unaffected baseline VRPs remain present.</t>
      </section>
      <section anchor="manifest-processing-correctness">
        <name>Manifest Processing Correctness</name>
        <t>This section evaluates whether the SUT correctly uses manifests to verify the integrity and completeness of RPKI repository objects.</t>
        <t>Manifests are expected to be used to:</t>
        <ul spacing="normal">
          <li>
            <t>Verify that the content of each RPKI object matches the hash listed in the manifest.</t>
          </li>
          <li>
            <t>Verify that objects accepted from a publication point are consistent with the object list declared in the corresponding manifest.</t>
          </li>
        </ul>
        <section anchor="manifest-hash-mismatch-check">
          <name>Manifest Hash-Mismatch Check</name>
          <t>Objective: To evaluate whether the SUT correctly handles a retrieved RPKI object whose content does not match the hash declared in its associated manifest.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
            </li>
            <li>
              <t>Select one leaf CA in the baseline repository. The selected leaf CA has no subordinate CAs and its publication point contains one or more ROAs that produce baseline VRPs.</t>
            </li>
            <li>
              <t>Select one ROA listed in the manifest associated with the selected leaf CA's publication point.</t>
            </li>
            <li>
              <t>Modify only the selected ROA after the manifest has been generated, so that the ROA hash no longer matches the hash listed in the manifest.</t>
            </li>
            <li>
              <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs in the selected leaf CA's publication point removed.</t>
            </li>
          </ol>
          <t>Expected Results:
The generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs in the selected leaf CA's publication point removed. Unaffected baseline VRPs from other publication points remain present. This reflects that, in a cold-start validation run, a hash mismatch causes the fetch for that publication point to fail.</t>
        </section>
        <section anchor="manifest-object-mismatch-check">
          <name>Manifest Object-Mismatch Check</name>
          <t>Objective: To evaluate whether the SUT correctly handles an object that is missing from or extra in relation to the object list declared in a manifest.</t>
          <t>Procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Start from the baseline repository defined in the Baseline Valid Repository Processing test.</t>
            </li>
            <li>
              <t>Select one leaf CA in the baseline repository. The selected leaf CA has no subordinate CAs and its publication point contains one or more ROAs that produce baseline VRPs.</t>
            </li>
            <li>
              <t>For a missing-object test case, remove only one object listed in the manifest from the selected leaf CA's publication point.</t>
            </li>
            <li>
              <t>For an extra-object test case, add one otherwise valid ROA to the selected leaf CA's publication point without listing it in the corresponding manifest, and record the VRP payload that would be expected from that ROA if it were accepted.</t>
            </li>
            <li>
              <t>Each test case introduces only one manifest object mismatch at a time.</t>
            </li>
            <li>
              <t>Initialize the SUT for a cold-start validation run (e.g., with no previously cached repository state).</t>
            </li>
            <li>
              <t>Start the SUT and allow it to synchronize the repository contents.</t>
            </li>
            <li>
              <t>Verify that the generated VRP set matches the expected result for the specific object-mismatch test case.</t>
            </li>
          </ol>
          <t>Expected Results:
For a missing-object test case, the generated VRP set matches the baseline expected VRP set with the VRPs derived from ROAs in the selected leaf CA's publication point removed. Unaffected baseline VRPs from other publication points remain present. This reflects that, in a cold-start validation run, a missing object listed in the manifest causes the fetch for that publication point to fail.</t>
          <t>For an extra-object test case, the generated VRP set matches the baseline expected VRP set. The VRP payload that would be derived from the extra ROA is absent from the generated VRP set.</t>
        </section>
      </section>
      <section anchor="processing-time-test">
        <name>Processing Time test</name>
        <t>Objective: To measure the end-to-end processing time of the SUT for a one-shot validation run. Processing time is measured as the elapsed wall-clock time between the moment the Controller starts the validation run and the moment the SUT makes the generated VRP set or equivalent validation output available.</t>
        <t>Procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Prepare a test repository containing a predefined set of RPKI objects.</t>
          </li>
          <li>
            <t>Start the SUT for a one-shot validation run and record the start timestamp.</t>
          </li>
          <li>
            <t>Allow the SUT to complete the validation run and produce the generated VRP set or equivalent validation output.</t>
          </li>
          <li>
            <t>Record the end timestamp when the generated VRP set or equivalent validation output becomes available.</t>
          </li>
          <li>
            <t>Calculate the total processing time as the difference between the start and end timestamps.</t>
          </li>
          <li>
            <t>Repeat the test for different numbers of CAs, ROAs, and generated VRPs to evaluate performance under varying load conditions.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="report-format">
      <name>Report Format</name>
      <t>This section defines the format for reporting the results of RPKI Relying Party benchmarking tests. The format is concise and suitable for documenting both functional correctness and performance results.</t>
      <t>System Under Test (SUT) Information:</t>
      <ul spacing="normal">
        <li>
          <t>RP implementation name and version</t>
        </li>
        <li>
          <t>Relevant SUT configuration used for the test</t>
        </li>
      </ul>
      <t>Test Repository Information:</t>
      <ul spacing="normal">
        <li>
          <t>Number of objects and object types used in the baseline repository</t>
        </li>
        <li>
          <t>Number of expected VRPs in the baseline repository</t>
        </li>
        <li>
          <t>Test cases executed</t>
        </li>
        <li>
          <t>Test-specific repository modification, if any</t>
        </li>
      </ul>
      <t>Functional Correctness Test Results:</t>
      <ul spacing="normal">
        <li>
          <t>Baseline Valid Repository Processing: pass/fail</t>
        </li>
        <li>
          <t>DER Decoding Correctness:
          </t>
          <ul spacing="normal">
            <li>
              <t>Invalid DER Handling: pass/fail</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Object Syntax Validation Correctness:
          </t>
          <ul spacing="normal">
            <li>
              <t>Certificate: pass/fail</t>
            </li>
            <li>
              <t>CRL: pass/fail</t>
            </li>
            <li>
              <t>Manifest: pass/fail</t>
            </li>
            <li>
              <t>ROA: pass/fail</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Certification Path Validation Correctness: pass/fail</t>
        </li>
        <li>
          <t>Signed Object Signature Validation Correctness:
          </t>
          <ul spacing="normal">
            <li>
              <t>Invalid Signature Handling: pass/fail</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Manifest Processing Correctness:
          </t>
          <ul spacing="normal">
            <li>
              <t>Hash-Mismatch Check: pass/fail</t>
            </li>
            <li>
              <t>Object-Mismatch Check:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Missing Object: pass/fail</t>
                </li>
                <li>
                  <t>Extra Object: pass/fail</t>
                </li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
      <t>Performance Test Results:</t>
      <ul spacing="normal">
        <li>
          <t>Processing Time Performance Test:
          </t>
          <ul spacing="normal">
            <li>
              <t>Number of CAs</t>
            </li>
            <li>
              <t>Number of ROAs</t>
            </li>
            <li>
              <t>Number of generated VRPs</t>
            </li>
            <li>
              <t>Total elapsed time from the start of the one-shot validation run to the availability of the generated VRP set</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Notes:</t>
      <ul spacing="normal">
        <li>
          <t>Functional correctness tests report pass/fail based on whether the SUT's output matches the expected output derived from the controlled repository contents.</t>
        </li>
        <li>
          <t>Performance tests report total processing time together with the test scale parameters defined above.</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-security">
      <name>Security Considerations</name>
      <t>This document defines benchmarking methodologies for RPKI RP implementations in controlled laboratory environments using dedicated address space and constrained resources. No additional security considerations are identified within the scope of this document.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA requests.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Jorge Cano and the FORT team for their detailed reviews and constructive feedback, which helped clarify and improve the scope and methodology of this work. The authors also thank Mikhail Puzanov for his valuable feedback on the RP/SUT model and the externally observable validation output used in this methodology.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6480" target="https://www.rfc-editor.org/info/rfc6480" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6480.xml">
          <front>
            <title>An Infrastructure to Support Secure Internet Routing</title>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document describes an architecture for an infrastructure to support improved security of Internet routing. The foundation of this architecture is a Resource Public Key Infrastructure (RPKI) that represents the allocation hierarchy of IP address space and Autonomous System (AS) numbers; and a distributed repository system for storing and disseminating the data objects that comprise the RPKI, as well as other signed objects necessary for improved routing security. As an initial application of this architecture, the document describes how a legitimate holder of IP address space can explicitly and verifiably authorize one or more ASes to originate routes to that address space. Such verifiable authorizations could be used, for example, to more securely construct BGP route filters. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6480"/>
          <seriesInfo name="DOI" value="10.17487/RFC6480"/>
        </reference>
        <reference anchor="RFC9286" target="https://www.rfc-editor.org/info/rfc9286" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9286.xml">
          <front>
            <title>Manifests for the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines a "manifest" for use in the Resource Public Key Infrastructure (RPKI). A manifest is a signed object (file) that contains a listing of all the signed objects (files) in the repository publication point (directory) associated with an authority responsible for publishing in the repository. For each certificate, Certificate Revocation List (CRL), or other type of signed objects issued by the authority that are published at this repository publication point, the manifest contains both the name of the file containing the object and a hash of the file content. Manifests are intended to enable a relying party (RP) to detect certain forms of attacks against a repository. Specifically, if an RP checks a manifest's contents against the signed objects retrieved from a repository publication point, then the RP can detect replay attacks, and unauthorized in-flight modification or deletion of signed objects. This document obsoletes RFC 6486.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9286"/>
          <seriesInfo name="DOI" value="10.17487/RFC9286"/>
        </reference>
        <reference anchor="RFC6487" target="https://www.rfc-editor.org/info/rfc6487" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6487.xml">
          <front>
            <title>A Profile for X.509 PKIX Resource Certificates</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="G. Michaelson" initials="G." surname="Michaelson"/>
            <author fullname="R. Loomans" initials="R." surname="Loomans"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document defines a standard profile for X.509 certificates for the purpose of supporting validation of assertions of "right-of-use" of Internet Number Resources (INRs). The certificates issued under this profile are used to convey the issuer's authorization of the subject to be regarded as the current holder of a "right-of-use" of the INRs that are described in the certificate. This document contains the normative specification of Certificate and Certificate Revocation List (CRL) syntax in the Resource Public Key Infrastructure (RPKI). This document also specifies profiles for the format of certificate requests and specifies the Relying Party RPKI certificate path validation procedure. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6487"/>
          <seriesInfo name="DOI" value="10.17487/RFC6487"/>
        </reference>
        <reference anchor="RFC6488" target="https://www.rfc-editor.org/info/rfc6488" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6488.xml">
          <front>
            <title>Signed Object Template for the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="A. Chi" initials="A." surname="Chi"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document defines a generic profile for signed objects used in the Resource Public Key Infrastructure (RPKI). These RPKI signed objects make use of Cryptographic Message Syntax (CMS) as a standard encapsulation format. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6488"/>
          <seriesInfo name="DOI" value="10.17487/RFC6488"/>
        </reference>
        <reference anchor="RFC8182" target="https://www.rfc-editor.org/info/rfc8182" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8182.xml">
          <front>
            <title>The RPKI Repository Delta Protocol (RRDP)</title>
            <author fullname="T. Bruijnzeels" initials="T." surname="Bruijnzeels"/>
            <author fullname="O. Muravskiy" initials="O." surname="Muravskiy"/>
            <author fullname="B. Weber" initials="B." surname="Weber"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>In the Resource Public Key Infrastructure (RPKI), Certificate Authorities (CAs) publish certificates, including end-entity certificates, Certificate Revocation Lists (CRLs), and RPKI signed objects to repositories. Relying Parties retrieve the published information from those repositories. This document specifies a new RPKI Repository Delta Protocol (RRDP) for this purpose. RRDP was specifically designed for scaling. It relies on an Update Notification File which lists the current Snapshot and Delta Files that can be retrieved using HTTPS (HTTP over Transport Layer Security (TLS)), and it enables the use of Content Distribution Networks (CDNs) or other caching infrastructures for the retrieval of these files.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8182"/>
          <seriesInfo name="DOI" value="10.17487/RFC8182"/>
        </reference>
        <reference anchor="RFC8897" target="https://www.rfc-editor.org/info/rfc8897" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8897.xml">
          <front>
            <title>Requirements for Resource Public Key Infrastructure (RPKI) Relying Parties</title>
            <author fullname="D. Ma" initials="D." surname="Ma"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document provides a single reference point for requirements for Relying Party (RP) software for use in the Resource Public Key Infrastructure (RPKI). It cites requirements that appear in several RPKI RFCs, making it easier for implementers to become aware of these requirements. Over time, this RFC will be updated to reflect changes to the requirements and guidance specified in the RFCs discussed herein.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8897"/>
          <seriesInfo name="DOI" value="10.17487/RFC8897"/>
        </reference>
        <reference anchor="RFC9582" target="https://www.rfc-editor.org/info/rfc9582" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9582.xml">
          <front>
            <title>A Profile for Route Origin Authorizations (ROAs)</title>
            <author fullname="J. Snijders" initials="J." surname="Snijders"/>
            <author fullname="B. Maddison" initials="B." surname="Maddison"/>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="D. Kong" initials="D." surname="Kong"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This document defines a standard profile for Route Origin Authorizations (ROAs). A ROA is a digitally signed object that provides a means of verifying that an IP address block holder has authorized an Autonomous System (AS) to originate routes to one or more prefixes within the address block. This document obsoletes RFC 6482.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9582"/>
          <seriesInfo name="DOI" value="10.17487/RFC9582"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="I-D.ietf-sidrops-rpki-erik-protocol" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-rpki-erik-protocol-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-rpki-erik-protocol.xml">
          <front>
            <title>The Erik Synchronization Protocol for use with the Resource Public Key Infrastructure (RPKI)</title>
            <author fullname="Job Snijders" initials="J." surname="Snijders">
              <organization>BSD Software Development</organization>
            </author>
            <author fullname="Tim Bruijnzeels" initials="T." surname="Bruijnzeels">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Tom Harrison" initials="T." surname="Harrison">
              <organization>APNIC</organization>
            </author>
            <author fullname="Wataru Ohgai" initials="W." surname="Ohgai">
              <organization>JPNIC</organization>
            </author>
            <date day="17" month="March" year="2026"/>
            <abstract>
              <t>This document specifies the Erik Synchronization Protocol for use with the Resource Public Key Infrastructure (RPKI). Erik Synchronization can be characterized as a data replication system using Merkle trees, a content-addressable naming scheme, concurrency control using monotonically increasing sequence numbers, and HTTP transport. Relying Parties can combine information retrieved via Erik Synchronization with other RPKI transport protocols. The protocol's design is intended to be efficient, fast, easy to implement, and robust in the face of partitions or faults in the network.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-rpki-erik-protocol-04"/>
        </reference>
        <reference anchor="I-D.ietf-sidrops-rpki-ccr" target="https://datatracker.ietf.org/doc/html/draft-ietf-sidrops-rpki-ccr-11" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-sidrops-rpki-ccr.xml">
          <front>
            <title>A Profile for Resource Public Key Infrastructure (RPKI) Canonical Cache Representation (CCR)</title>
            <author fullname="Job Snijders" initials="J." surname="Snijders">
              <organization>BSD Software Development</organization>
            </author>
            <author fullname="Bart Bakker" initials="B." surname="Bakker">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Tim Bruijnzeels" initials="T." surname="Bruijnzeels">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Theo Buehler" initials="T." surname="Buehler">
              <organization>OpenBSD</organization>
            </author>
            <date day="1" month="July" year="2026"/>
            <abstract>
              <t>This document specifies a Canonical Cache Representation (CCR) content type for use with the Resource Public Key Infrastructure (RPKI). CCR is a Distinguished Encoding Rules (DER) encoded data interchange format which can be used to represent various aspects of the state of a validated RPKI cache at a particular point in time. The CCR profile is a compact and versatile format, well-suited for a variety of applications, for example, audit trails, analytics pipelines, and validated payload dissemination.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sidrops-rpki-ccr-11"/>
        </reference>
        <reference anchor="RSYNC" target="https://rsync.samba.org">
          <front>
            <title>The rsync web pages</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Barry" target="https://github.com/lacnic/barry">
          <front>
            <title>BaRRy</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 487?>



  </back>
  <!-- ##markdown-source:
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
tHH97Rv+7HX/OE4URf8LXZPaUQZmAAA=

-->

</rfc>
