<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-ietf-lamps-rfc7030-csrattrs-23" number="9908" category="std" consensus="true" submissionType="IETF" updates="7030, 9148" obsoletes="" tocInclude="true" sortRefs="true" symRefs="true" xml:lang="en" prepTime="2026-01-06T11:01:19" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-lamps-rfc7030-csrattrs-23" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9908" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="CSR Attributes">Clarification and Enhancement of the CSR Attributes Definition in RFC 7030</title>
    <seriesInfo name="RFC" value="9908" stream="IETF"/>
    <author initials="M." surname="Richardson" fullname="Michael Richardson" role="editor">
      <organization showOnFrontPage="true">Sandelman Software Works</organization>
      <address>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>
    <author initials="O." surname="Friel" fullname="Owen Friel">
      <organization showOnFrontPage="true">Cisco</organization>
      <address>
        <email>ofriel@cisco.com</email>
      </address>
    </author>
    <author initials="D." surname="von Oheimb" fullname="Dr. David von Oheimb">
      <organization showOnFrontPage="true">Siemens</organization>
      <address>
        <email>dev@ddvo.net</email>
      </address>
    </author>
    <author initials="D." surname="Harkins" fullname="Dan Harkins">
      <organization showOnFrontPage="true">The Industrial Lounge</organization>
      <address>
        <email>dharkins@lounge.org</email>
      </address>
    </author>
    <date month="01" year="2026"/>
    <area>SEC</area>
    <workgroup>lamps</workgroup>
    <keyword>SubjectAltName</keyword>
    <keyword>SAN</keyword>
    <keyword>Certificate Extensions</keyword>
    <keyword>Certificate Signing Request</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document updates RFC 7030, "Enrollment over Secure Transport" (EST), clarifying
how the Certificate Signing Request (CSR) Attributes Response can be used by an EST server to specify both CSR attribute Object Identifiers (OIDs) and CSR attribute values, particularly X.509 extension values, that the server expects the client to include in a subsequent CSR request.
RFC 9148 is derived from RFC 7030 and is also updated.</t>
      <t indent="0" pn="section-abstract-2">RFC 7030 is ambiguous in its specification of the CSR Attributes Response. This has resulted in implementation challenges and implementor confusion because there was no universal understanding of what was specified. This document clarifies the encoding rules.</t>
      <t indent="0" pn="section-abstract-3">This document also provides a new straightforward approach: using
a template for CSR contents that may be partially filled in by the server.
This also allows an EST server to specify a subject Distinguished Name (DN).</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9908" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2026 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-csr-attributes-handling">CSR Attributes Handling</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extensions-to-rfc-7030-sect">Extensions to RFC 7030, Section 2.6</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extensions-to-rfc-7030-secti">Extensions to RFC 7030, Section 4.5.2</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-update-to-rfc-9148">Update to RFC 9148</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-csr-templates">Use of CSR Templates</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-coexistence-with-existing-i">Coexistence with Existing Implementations</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-examples-using-the-original">Examples Using the Original Approach in RFC 7030</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-require-an-rfc-8994-acp-sub">Require an RFC 8994 / ACP subjectAltName with Specific otherName</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.1.2">
                  <li pn="section-toc.1-1.5.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.1.1"><xref derivedContent="5.1.1" format="counter" sectionFormat="of" target="section-5.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-base64-encoded-example">Base64-Encoded Example</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.1.2.2.1"><xref derivedContent="5.1.2" format="counter" sectionFormat="of" target="section-5.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-dump-output">ASN.1 DUMP Output</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-original-example-in-rfc-703">Original Example in RFC 7030</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.2.2">
                  <li pn="section-toc.1-1.5.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.2.2.1.1"><xref derivedContent="5.2.1" format="counter" sectionFormat="of" target="section-5.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-base64-encoded-example-2">Base64-Encoded Example</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.2.2.2.1"><xref derivedContent="5.2.2" format="counter" sectionFormat="of" target="section-5.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-dump-output-2">ASN.1 DUMP Output</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-require-a-specific-subjecta">Require a Specific subjectAltName Extension</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.3.2">
                  <li pn="section-toc.1-1.5.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.3.2.1.1"><xref derivedContent="5.3.1" format="counter" sectionFormat="of" target="section-5.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-base64-encoded-example-3">Base64-Encoded Example</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.3.2.2.1"><xref derivedContent="5.3.2" format="counter" sectionFormat="of" target="section-5.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-dump-output-3">ASN.1 DUMP Output</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.4">
                <t indent="0" pn="section-toc.1-1.5.2.4.1"><xref derivedContent="5.4" format="counter" sectionFormat="of" target="section-5.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-require-a-public-key-of-a-s">Require a Public Key of a Specific Size</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.4.2">
                  <li pn="section-toc.1-1.5.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.4.2.1.1"><xref derivedContent="5.4.1" format="counter" sectionFormat="of" target="section-5.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-base64-encoded-example-4">Base64-Encoded Example</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.4.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.4.2.2.1"><xref derivedContent="5.4.2" format="counter" sectionFormat="of" target="section-5.4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-dump-output-4">ASN.1 DUMP Output</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.5">
                <t indent="0" pn="section-toc.1-1.5.2.5.1"><xref derivedContent="5.5" format="counter" sectionFormat="of" target="section-5.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-require-a-public-key-of-a-sp">Require a Public Key of a Specific Curve</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.5.2">
                  <li pn="section-toc.1-1.5.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.5.2.1.1"><xref derivedContent="5.5.1" format="counter" sectionFormat="of" target="section-5.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-base64-encoded-example-5">Base64-Encoded Example</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.5.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.5.2.2.1"><xref derivedContent="5.5.2" format="counter" sectionFormat="of" target="section-5.5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-dump-output-5">ASN.1 DUMP Output</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.5.2.6">
                <t indent="0" pn="section-toc.1-1.5.2.6.1"><xref derivedContent="5.6" format="counter" sectionFormat="of" target="section-5.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-require-specific-extensions">Require Specific Extensions and Attributes</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.6.2">
                  <li pn="section-toc.1-1.5.2.6.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.6.2.1.1"><xref derivedContent="5.6.1" format="counter" sectionFormat="of" target="section-5.6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-base64-encoded-example-6">Base64-Encoded Example</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.6.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.6.2.2.1"><xref derivedContent="5.6.2" format="counter" sectionFormat="of" target="section-5.6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-dump-output-6">ASN.1 DUMP Output</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-identity-and-privacy-consid">Identity and Privacy Considerations</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-module">ASN.1 Module</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">This document updates RFC 7030 and clarifies
how the Certificate Signing Request (CSR) Attributes Response can be used by an EST server to specify both CSR attribute OIDs and CSR attribute values.
In particular, the server needs to be able to specify X.509 extension values that it expects the client to include in the subsequent CSR.</t>
      <t indent="0" pn="section-1-2">"Enrollment over Secure Transport" <xref target="RFC7030" format="default" sectionFormat="of" derivedContent="RFC7030"/> has been used in a wide variety of applications.
In particular, <xref target="RFC8994" format="default" sectionFormat="of" derivedContent="RFC8994"/> and <xref target="RFC8995" format="default" sectionFormat="of" derivedContent="RFC8995"/> describe a way to use it in order to build out an Autonomic Control Plane (ACP) <xref target="RFC8368" format="default" sectionFormat="of" derivedContent="RFC8368"/>.</t>
      <t indent="0" pn="section-1-3">When bootstrapping the ACP, there is a requirement that each node be given a very specific subjectAltName. In <xref target="RFC8994" format="default" sectionFormat="of" derivedContent="RFC8994"/>, the ACP specification, the EST server is specified to make use
of the CSR Attributes ("/csrattrs") Request (specified in <xref section="2.6" sectionFormat="comma" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-2.6" derivedContent="RFC7030"/>) to convey the actual subjectAltName to the EST client that needs to go
into its CSR and thus ultimately into its End Entity (EE) certificate.</t>
      <t indent="0" pn="section-1-4">As a result of some implementation challenges, it came to light that this particular way of using the CSR Attributes was not universally agreed upon, and it was suggested that it went contrary to <xref section="2.6" sectionFormat="comma" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-2.6" derivedContent="RFC7030"/>.</t>
      <t indent="0" pn="section-1-5"><xref section="2.6" sectionFormat="comma" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-2.6" derivedContent="RFC7030"/> says that the CSR Attributes "can provide additional
descriptive information that the EST server cannot access itself".
This is extended to describe how the EST server can provide values that it demands be used.</t>
      <t indent="0" pn="section-1-6">After significant discussion, it has been determined that
<xref section="4.5" sectionFormat="of" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-4.5" derivedContent="RFC7030"/> is sufficiently difficult
to read and ambiguous to interpret, so clarification is needed.</t>
      <t indent="0" pn="section-1-7">Also, <xref section="4.5.2" sectionFormat="comma" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-4.5.2" derivedContent="RFC7030"/> is extended to clarify the use of the existing ASN.1 syntax <xref target="X.680" format="default" sectionFormat="of" derivedContent="X.680"/> <xref target="X.690" format="default" sectionFormat="of" derivedContent="X.690"/>.</t>
      <t indent="0" pn="section-1-8">This covers all uses and is fully backward compatible with existing use,
including addressing the needs of <xref target="RFC8994" format="default" sectionFormat="of" derivedContent="RFC8994"/> and <xref target="RFC8995" format="default" sectionFormat="of" derivedContent="RFC8995"/>.</t>
    </section>
    <section anchor="terminology" numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <section anchor="csr-attributes-handling" numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-csr-attributes-handling">CSR Attributes Handling</name>
      <section anchor="extensions-to-rfc-7030-section-26" numbered="true" removeInRFC="false" toc="include" pn="section-3.1">
        <name slugifiedName="name-extensions-to-rfc-7030-sect">Extensions to RFC 7030, Section 2.6</name>
        <t indent="0" pn="section-3.1-1">This document replaces the second paragraph in <xref section="2.6" sectionFormat="of" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-2.6" derivedContent="RFC7030"/> with the following text:</t>
        <blockquote pn="section-3.1-2">These attributes can provide additional information that
   the EST server cannot access itself, such as the Media Access Control
   (MAC) address of an interface of the EST client. The EST server can
   also provide concrete values that it tells the client to include in
   the CSR, such as a specific X.509 Subject Alternative Name extension.
   Moreover, these attributes can indicate the type of the included
   public key or which crypto algorithms to use for the self-signature,
   such as a specific elliptic curve or a specific hash function that
   the client is expected to use when generating the CSR.</blockquote>
      </section>
      <section anchor="csrattrs" numbered="true" removeInRFC="false" toc="include" pn="section-3.2">
        <name slugifiedName="name-extensions-to-rfc-7030-secti">Extensions to RFC 7030, Section 4.5.2</name>
        <t indent="0" pn="section-3.2-1">The ASN.1 syntax for CSR Attributes as defined in EST (<xref section="4.5.2" sectionFormat="comma" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-4.5.2" derivedContent="RFC7030"/>) is as follows:</t>
        <sourcecode type="asn.1" markers="false" pn="section-3.2-2">
   CsrAttrs ::= SEQUENCE SIZE (0..MAX) OF AttrOrOID

   AttrOrOID ::= CHOICE (oid OBJECT IDENTIFIER, attribute Attribute }

   Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {
        type   ATTRIBUTE.&amp;id({IOSet}),
        values SET SIZE(1..MAX) OF ATTRIBUTE.&amp;Type({IOSet}{@type}) }</sourcecode>
        <t indent="0" pn="section-3.2-3">This remains unchanged, such that bits-on-the-wire compatibility is maintained.</t>
        <t indent="0" pn="section-3.2-4">Key parts that were unclear were which OID to use in the '<tt>type</tt>' field and
that the '<tt>values</tt>' field can contain an entire sequence of X.509 extensions.</t>
        <t indent="0" pn="section-3.2-5">The OID to use for such attributes in the '<tt>type</tt>' field <bcp14>MUST</bcp14> be <tt>id-ExtensionReq</tt>,
which has the value 1.2.840.113549.1.9.14.
Note that this is the same as <tt>pkcs-9-at-extensionRequest</tt> defined in PKCS#9 <xref target="RFC2985" format="default" sectionFormat="of" derivedContent="RFC2985"/>.
There <bcp14>MUST</bcp14> be only one such attribute.</t>
        <t indent="0" pn="section-3.2-6">The '<tt>values</tt>' field of this attribute <bcp14>MUST</bcp14> contain a set with exactly one element,
and this element <bcp14>MUST</bcp14> be of type <tt>Extensions</tt>, as per <xref section="4.1" sectionFormat="of" target="RFC5280" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5280#section-4.1" derivedContent="RFC5280"/>:</t>
        <sourcecode type="asn.1" markers="false" pn="section-3.2-7">
   Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension

   Extension  ::=  SEQUENCE  {
        extnID      OBJECT IDENTIFIER,
        critical    BOOLEAN DEFAULT FALSE,
        extnValue   OCTET STRING
                    -- contains the DER encoding of an ASN.1 value
                    -- corresponding to the extension type identified
                    -- by extnID
        }</sourcecode>
        <t indent="0" pn="section-3.2-8">An Extension comprises the OID of the specific X.509 extension (extnID),
optionally the 'critical' bit, and the extension value (extnValue).</t>
        <t indent="0" pn="section-3.2-9">An Extensions structure, which is a sequence of elements of type Extension,
<bcp14>MUST NOT</bcp14> include more than one element with a particular extnID.</t>
        <t indent="0" pn="section-3.2-10">When not using the template-based approach of <xref target="csrtemplate" format="default" sectionFormat="of" derivedContent="Section 3.4"/>,
specifying the requirement for a public key of a specific type
and optionally its size and other parameters <bcp14>MUST</bcp14> be done as follows:
Include exactly one Attribute with the <tt>type</tt> field being the OID specifying
the type of the key, such as <tt>ecPublicKey</tt> or <tt>rsaEncryption</tt>.
The '<tt>values</tt>' field <bcp14>MAY</bcp14> be empty to indicate no further requirements on the key. Otherwise, it <bcp14>MUST</bcp14> contain suitable parameters for the given key type, such as a singleton set containing the OID of an elliptic curve (EC) (e.g., <tt>secp384r1</tt>) or containing an integer value for the RSA key size (e.g., 4096). Many examples for this are given in <xref target="examples" format="default" sectionFormat="of" derivedContent="Section 5"/>.</t>
      </section>
      <section anchor="update-to-rfc9148" numbered="true" removeInRFC="false" toc="include" pn="section-3.3">
        <name slugifiedName="name-update-to-rfc-9148">Update to RFC 9148</name>
        <t indent="0" pn="section-3.3-1">The updates to EST in this document equally apply when using the 
Constrained Application Protocol (CoAP) as a transport mechanism as described in <xref target="RFC9148" format="default" sectionFormat="of" derivedContent="RFC9148"/>.
This document therefore adds the following paragraph after the second paragraph
of <xref section="1" sectionFormat="comma" target="RFC9148" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9148#section-1" derivedContent="RFC9148"/>:</t>
        <blockquote pn="section-3.3-2">EST over CoAP as specified in <xref target="RFC9148" format="default" sectionFormat="of" derivedContent="RFC9148"/>  applies unchanged to <xref target="RFC7030" format="default" sectionFormat="of" derivedContent="RFC7030"/>, which is updated by RFC 9908.  Hence, all references to <xref target="RFC7030" format="default" sectionFormat="of" derivedContent="RFC7030"/> in <xref target="RFC9148" format="default" sectionFormat="of" derivedContent="RFC9148"/> are assumed to indicate that <xref target="RFC7030" format="default" sectionFormat="of" derivedContent="RFC7030"/> is updated by RFC 9908.</blockquote>
      </section>
      <section anchor="csrtemplate" numbered="true" removeInRFC="false" toc="include" pn="section-3.4">
        <name slugifiedName="name-use-of-csr-templates">Use of CSR Templates</name>
        <t indent="0" pn="section-3.4-1">As an alternative to the unstructured inclusion of CSR Attributes
        specified in <xref section="4.5.2" sectionFormat="of" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-4.5.2" derivedContent="RFC7030"/> with its limitations and ambiguities, <xref section="B" sectionFormat="of" target="RFC8295" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8295#appendix-B" derivedContent="RFC8295"/> describes an
        approach using a CSR template.  An entire CSR object is returned with
        various fields filled out and other fields waiting to be filled in. In
        that approach, a pKCS7PDU attribute includes a PKIData content type
        <xref target="RFC5272" format="default" sectionFormat="of" derivedContent="RFC5272"/> and that, in turn, includes a CSR <xref target="RFC2986" format="default" sectionFormat="of" derivedContent="RFC2986"/> or a Certificate Request Message Format (CRMF)
        formatted request (for details, see <xref target="RFC6268" sectionFormat="bare" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6268#section-5" derivedContent="RFC6268"/> or <xref target="RFC6268" sectionFormat="bare" section="9" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6268#section-9" derivedContent="RFC6268"/> of <xref target="RFC6268" format="default" sectionFormat="of" derivedContent="RFC6268"/>,
        respectively).</t>
        <t indent="0" pn="section-3.4-2">One drawback to that approach, particularly for the CSR, is that some unused
fields have to be included; specifically, the '<tt>signature</tt>' field on
the CSR is faked with an empty bit string.</t>
        <t indent="0" pn="section-3.4-3">A similar method has been defined in "Internet X.509 Public Key
Infrastructure -- Certificate Management Protocol (CMP)" <xref target="RFC9810" format="default" sectionFormat="of" derivedContent="RFC9810"/>
and "Lightweight Certificate Management Protocol (CMP) Profile"
(<xref section="4.3.3" sectionFormat="comma" target="RFC9483" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9483#section-4.3.3" derivedContent="RFC9483"/>) using a CSR template as defined for CRMF <xref target="RFC4211" format="default" sectionFormat="of" derivedContent="RFC4211"/>. Like the approach mentioned before,
this method does not properly deal with absent Relative Distinguished Name (RDN) values, as it would encode them as invalid empty strings.
Also, encoding an absent '<tt>subjectPublicKey</tt>' value as an empty <tt>BIT STRING</tt>
and an absent X.509 extension value as an empty <tt>OCTET STRING</tt>
can cause issues with strict ASN.1 parsing and decoding.</t>
        <t indent="0" pn="section-3.4-4">These drawbacks are avoided as follows:</t>
        <t indent="0" pn="section-3.4-5">This specification defines a new Certificate Request Information Template attribute
for <tt>CsrAttrs</tt> (as given in <xref target="csrattrs" format="default" sectionFormat="of" derivedContent="Section 3.2"/>) that is essentially
a partially filled-in PKCS#10 CSR minus the signature wrapper:</t>
        <sourcecode type="" markers="false" pn="section-3.4-6">
  CertificationRequestInfoTemplate ::= SEQUENCE {
      version       INTEGER { v1(0) } (v1, ... ),
      subject       NameTemplate OPTIONAL,
      subjectPKInfo [0] SubjectPublicKeyInfoTemplate
                                {{ PKInfoAlgorithms }} OPTIONAL,
      attributes    [1] Attributes{{ CRIAttributes }}
  }</sourcecode>
        <t indent="0" pn="section-3.4-7"><xref target="app-asn1-module" format="default" sectionFormat="of" derivedContent="Appendix A"/> contains all details.</t>
        <t indent="0" pn="section-3.4-8">The CertificationRequestInfoTemplate closely resembles the CertificationRequestInfo
from <xref section="5" sectionFormat="comma" target="RFC5912" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5912#section-5" derivedContent="RFC5912"/>:</t>
        <sourcecode type="" markers="false" pn="section-3.4-9">
  CertificationRequestInfo ::= SEQUENCE {
    version       INTEGER { v1(0) } (v1,...),
    subject       Name,
    subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
    attributes    [0] Attributes{{ CRIAttributes }}
  }</sourcecode>
        <t indent="0" pn="section-3.4-10">with the following differences:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.4-11">
          <li pn="section-3.4-11.1">
            <t indent="0" pn="section-3.4-11.1.1">The '<tt>subject</tt>' field has been made <tt><bcp14>OPTIONAL</bcp14></tt>.
It <bcp14>MUST</bcp14> be present if the server places any requirements on the RDNs of the subject name; otherwise, it <bcp14>MUST</bcp14> be absent.</t>
          </li>
          <li pn="section-3.4-11.2">
            <t indent="0" pn="section-3.4-11.2.1">RDNs in the '<tt>subject</tt>' fields are allowed to have no value,
which has been achieved by adding <tt><bcp14>OPTIONAL</bcp14></tt> to the '<tt>value</tt>' field of <tt>SingleAttributeTemplate</tt>.
If the client is expected to provide an RDN of a certain type such as <tt>commonName</tt>,
the respective RDN <bcp14>MUST</bcp14> be present in the '<tt>subject</tt>' field; otherwise, it <bcp14>MUST</bcp14> be absent.
In addition, if the server gives an RDN value,
this means that the client is expected to use this value for the RDN; otherwise, the client is expected to fill in a suitable value.
The example at the end of this section has a '<tt>subject</tt>' field
that contains both forms of RDN specifications.</t>
          </li>
        </ul>
        <sourcecode type="" markers="false" pn="section-3.4-12">
  SingleAttributeTemplate {ATTRIBUTE:AttrSet} ::= SEQUENCE {
      type      ATTRIBUTE.&amp;id({AttrSet}),
      value     ATTRIBUTE.&amp;Type({AttrSet}{@type}) OPTIONAL
  }</sourcecode>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.4-13">
          <li pn="section-3.4-13.1">
            <t indent="0" pn="section-3.4-13.1.1">The '<tt>subjectPKInfo</tt>' field has been made <tt><bcp14>OPTIONAL</bcp14></tt>.
The field <bcp14>MUST</bcp14> be absent if the server places no requirements on the key; otherwise, it <bcp14>MUST</bcp14> be present, and the '<tt>algorithm</tt>' field
specifies the type of key pair the client is expected to use.</t>
          </li>
          <li pn="section-3.4-13.2">
            <t indent="0" pn="section-3.4-13.2.1">The '<tt>subjectPublicKey</tt>' field contained in <tt>SubjectPublicKeyInfoTemplate</tt>
has been made <tt><bcp14>OPTIONAL</bcp14></tt> because it is usually not needed.
In case the server requires use of an RSA key and needs to specify its size, the field
<bcp14>MUST</bcp14> be present and contain a placeholder public key value of the desired RSA modulus length; otherwise, the <tt>subjectPublicKey</tt> <bcp14>MUST</bcp14> be absent.</t>
          </li>
        </ul>
        <sourcecode markers="false" pn="section-3.4-14">
  SubjectPublicKeyInfoTemplate{PUBLIC-KEY:IOSet} ::= SEQUENCE {
      algorithm        AlgorithmIdentifier{PUBLIC-KEY, {IOSet}},
      subjectPublicKey BIT STRING OPTIONAL
  }</sourcecode>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.4-15">
          <li pn="section-3.4-15.1">
            <t indent="0" pn="section-3.4-15.1.1">A new OID <tt>id-aa-extensionReqTemplate</tt> and the related <tt>ExtensionTemplate</tt> structure
is defined where the '<tt>extnValue</tt>' field has been made <tt><bcp14>OPTIONAL</bcp14></tt>.
This is only needed to enable specifying partial extensions with values to be filled in
by the client; otherwise, the <tt>id-ExtensionReq</tt> OID and the respective value of type
<tt>ExtensionReq</tt> <bcp14>MUST</bcp14> be used for specifying requirements on X.509 extensions.</t>
          </li>
        </ul>
        <t indent="0" pn="section-3.4-16">For each extension of type <tt>Extension</tt> or <tt>ExtensionTemplate</tt> provided by the server,
the client is expected to include an extension of the type given by the <tt>extnID</tt>.
If the '<tt>critical</tt>' field is present, the client <bcp14>SHOULD</bcp14> use it in the extension as well.
If the '<tt>extnValue</tt>' is present (which is always the case when type <tt>Extension</tt> is used),
the client <bcp14>SHOULD</bcp14> use the given extension value in its CSR.
When the type <tt>ExtensionTemplate</tt> is used, the '<tt>extnValue</tt>' can be absent, and then the client <bcp14>SHOULD</bcp14> provide an extension value in an <tt>Extension</tt> with the given <tt>extnID</tt>.
For instance, if the server includes an <tt>ExtensionTemplate</tt>
with the <tt>extnID</tt> '<tt>subjectAltName</tt>' but without an <tt>extnValue</tt>,
the client <bcp14>SHOULD</bcp14> include a SAN extension with a suitable value.</t>
        <t indent="0" pn="section-3.4-17">In case the server includes an <tt>ExtensionTemplate</tt> with the <tt>extnID</tt> '<tt>subjectAltName</tt>'
and a partially filled-in <tt>extnValue</tt>, such as a '<tt>directoryName</tt>' choice containing the <tt>NULL-DN</tt>
(i.e., an empty sequence of RDNs) or the '<tt>iPAddress</tt>' choice with an empty <tt>OCTET STRING</tt>,
it means that the client <bcp14>SHOULD</bcp14> fill in the respective <tt>GeneralName</tt> value.</t>
        <sourcecode type="" markers="false" pn="section-3.4-18">
ExtensionTemplate {EXTENSION:ExtensionSet} ::= SEQUENCE {
   extnID      EXTENSION.&amp;id({ExtensionSet}),
   critical    BOOLEAN DEFAULT FALSE,
   extnValue   OCTET STRING (CONTAINING
               EXTENSION.&amp;ExtnType({ExtensionSet}{@extnID}) OPTIONAL
               --  contains the DER encoding of the ASN.1 value
               --  corresponding to the extension type identified
               --  by extnID when present
  }</sourcecode>
        <t indent="0" pn="section-3.4-19">The '<tt>version</tt>' field of the <tt>CertificationRequestInfoTemplate</tt> <bcp14>MUST</bcp14> contain v1 (0).</t>
        <t indent="0" pn="section-3.4-20">The '<tt>attributes</tt>' field <bcp14>MUST NOT</bcp14> contain multiple <tt>id-aa-extensionReqTemplate</tt> attributes
and <bcp14>MUST NOT</bcp14> contain both <tt>id-ExtensionReq</tt> and <tt>id-aa-extensionReqTemplate</tt> attributes.</t>
        <t indent="0" pn="section-3.4-21">The '<tt>values</tt>' field of an <tt>id-aa-extensionReqTemplate</tt> attribute
<bcp14>MUST</bcp14> contain a set with exactly one element,
and this element <bcp14>MUST</bcp14> be of type <tt>ExtensionTemplate</tt>.</t>
        <t indent="0" pn="section-3.4-22">Suppose the server requires that the CSR will contain:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.4-23">
          <li pn="section-3.4-23.1">
            <t indent="0" pn="section-3.4-23.1.1">the '<tt>subject</tt>' field with a common name to be filled in by the EE and
two organizational unit names with given values "myDept" and "myGroup",</t>
          </li>
          <li pn="section-3.4-23.2">
            <t indent="0" pn="section-3.4-23.2.1">the '<tt>publicKey</tt>' field with an
Elliptic Curve Cryptography (ECC) public key on curve <tt>secp256r1</tt>,</t>
          </li>
          <li pn="section-3.4-23.3">
            <t indent="0" pn="section-3.4-23.3.1">the 'subjectAltName' extension with two entries; one DNS entry with
name "www.myServer.com" and IP entry that is empty for the IP address
to be filled in,</t>
          </li>
          <li pn="section-3.4-23.4">
            <t indent="0" pn="section-3.4-23.4.1">the '<tt>keyUsage</tt>' extension marked critical
with the values digitalSignature and keyAgreement, and</t>
          </li>
          <li pn="section-3.4-23.5">
            <t indent="0" pn="section-3.4-23.5.1">the '<tt>extKeyUsage</tt>' extension with the value to be filled in by the EE.</t>
          </li>
        </ul>
        <t indent="0" pn="section-3.4-24">Then, the <tt>CertificationRequestInfo</tt> structure constructed by the server
will be as follows:</t>
        <sourcecode type="" markers="false" pn="section-3.4-25">
SEQUENCE {
  INTEGER 0
  SEQUENCE {
    SET {
      SEQUENCE {
        OBJECT IDENTIFIER commonName (2 5 4 3)
        }
      }
    SET {
      SEQUENCE {
        OBJECT IDENTIFIER organizationalUnitName (2 5 4 11)
        UTF8String "myDept"
        }
      }
    SET {
      SEQUENCE {
        OBJECT IDENTIFIER organizationalUnitName (2 5 4 11)
        UTF8String "myGroup"
        }
      }
    }
  [0] {
    SEQUENCE {
      OBJECT IDENTIFIER ecPublicKey (1 2 840 10045 2 1)
      OBJECT IDENTIFIER secp256r1 (1 2 840 10045 3 1 7)
      }
    }
  [1] {
    SEQUENCE {
      OBJECT IDENTIFIER id-aa-extensionReqTemplate
                        (1 2 840 113549 1 9 62)
      SET {
        SEQUENCE {
          SEQUENCE {
            OBJECT IDENTIFIER subjectAltName (2 5 29 17)
            OCTET STRING, encapsulates {
              SEQUENCE {
                [2] "www.myServer.com"
                [7] ""
                }
              }
            }
          SEQUENCE {
            OBJECT IDENTIFIER keyUsage (2 5 29 15)
            BOOLEAN TRUE
            OCTET STRING, encapsulates {
              BIT STRING 3 unused bits
                "10001"B
              }
            }
          SEQUENCE {
            OBJECT IDENTIFIER extKeyUsage (2 5 29 37)
            }
          }
        }
      }
    }
  }</sourcecode>
      </section>
    </section>
    <section anchor="co-existence-with-existing-implementations" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-coexistence-with-existing-i">Coexistence with Existing Implementations</name>
      <t indent="0" pn="section-4-1">EST servers with legacy clients <bcp14>MAY</bcp14> continue to use the  unstructured list of attribute/value pairs as described in <xref target="RFC7030" format="default" sectionFormat="of" derivedContent="RFC7030"/> and <bcp14>MAY</bcp14> also include the template style described in <xref target="csrtemplate" format="default" sectionFormat="of" derivedContent="Section 3.4"/> for newer clients.
Clients that understand both <bcp14>MUST</bcp14> use the template only, and
ignore all other <tt>CsrAttrs</tt> elements.
Older clients will ignore the new CertificationRequestInfoTemplate element.</t>
    </section>
    <section anchor="examples" numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-examples-using-the-original">Examples Using the Original Approach in RFC 7030</name>
      <t indent="0" pn="section-5-1">Each example has a high-level (English) explanation of what is expected.
Some mapping back to the Attribute and Extension definitions above are included.
The base64 DER encoding is then shown.
The output of "dumpasn1" <xref target="dumpasn1" format="default" sectionFormat="of" derivedContent="dumpasn1"/> is then provided to detail what the contents are.</t>
      <section anchor="acpNodeName" numbered="true" removeInRFC="false" toc="include" pn="section-5.1">
        <name slugifiedName="name-require-an-rfc-8994-acp-sub">Require an RFC 8994 / ACP subjectAltName with Specific otherName</name>
        <t indent="0" pn="section-5.1-1">A single subjectAltName extension is specified in a single <tt>CsrAttrs</tt>
attribute <xref target="RFC7030" format="default" sectionFormat="of" derivedContent="RFC7030"/> with an OID '<tt>id-ExtensionReq</tt>' indicating type <tt>Extensions</tt>.
This is what might be created by a Registrar <xref target="RFC8995" format="default" sectionFormat="of" derivedContent="RFC8995"/> that is asking for AcpNodeName <xref target="RFC8994" format="default" sectionFormat="of" derivedContent="RFC8994"/> with format '<tt>otherNames</tt>'.</t>
        <section anchor="base64-encoded-example" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.1">
          <name slugifiedName="name-base64-encoded-example">Base64-Encoded Example</name>
          <t indent="0" pn="section-5.1.1-1">The Base64:</t>
          <sourcecode type="base64" markers="false" pn="section-5.1.1-2">
MGgwZgYJKoZIhvcNAQkOMVkwVzBVBgNVHREBAf8ESzBJoEcG
CCsGAQUFBwgKoDsWOXJmYzg5OTQrZmQ3MzlmYzIzYzM0NDAx
MTIyMzM0NDU1MDAwMDAwMDArQGFjcC5leGFtcGxlLmNvbQ==</sourcecode>
        </section>
        <section anchor="asn1-dump-output" numbered="true" removeInRFC="false" toc="include" pn="section-5.1.2">
          <name slugifiedName="name-asn1-dump-output">ASN.1 DUMP Output</name>
          <t indent="0" pn="section-5.1.2-1">There is a single subjectAltName Extension with an Attribute with Extension type.</t>
          <sourcecode type="asn.1" markers="false" pn="section-5.1.2-2">
    &lt;30 68&gt;
  0 104: SEQUENCE {
    &lt;30 66&gt;
  2 102:   SEQUENCE {
    &lt;06 09&gt;
  4   9:     OBJECT IDENTIFIER
       :       extensionRequest (1 2 840 113549 1 9 14)
       :       (PKCS #9 via CRMF)
    &lt;31 59&gt;
 15  89:     SET {
    &lt;30 57&gt;
 17  87:       SEQUENCE {
    &lt;30 55&gt;
 19  85:         SEQUENCE {
    &lt;06 03&gt;
 21   3:           OBJECT IDENTIFIER
       :             subjectAltName (2 5 29 17)
       :             (X.509 extension)
    &lt;01 01&gt;
 26   1:           BOOLEAN TRUE
    &lt;04 4B&gt;
 29  75:           OCTET STRING, encapsulates {
    &lt;30 49&gt;
 31  73:             SEQUENCE {
    &lt;A0 47&gt;
 33  71:               [0] {
    &lt;06 08&gt;
 35   8:                 OBJECT IDENTIFIER '1 3 6 1 5 5 7 8 10'
    &lt;A0 3B&gt;
 45  59:                 [0] {
    &lt;16 39&gt;
 47  57:                   IA5String
       :                   'rfc8994+fd739fc23c34401122334455'
       :                   '00000000+@acp.example.com'
       :                   }
       :                 }
       :               }
       :             }
       :           }
       :         }
       :       }
       :     }
       :   }</sourcecode>
        </section>
      </section>
      <section anchor="rfc7030-original-example" numbered="true" removeInRFC="false" toc="include" pn="section-5.2">
        <name slugifiedName="name-original-example-in-rfc-703">Original Example in RFC 7030</name>
        <t indent="0" pn="section-5.2-1">In this example, taken from <xref section="4.5.2" sectionFormat="of" target="RFC7030" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-4.5.2" derivedContent="RFC7030"/>, a few different attributes are included.
The original encoding of the '<tt>macAddress</tt>' part in the example is NOT CORRECT.
It was not aligned with the definition of the Extension Request attribute as specified in <xref section="5.4.2" sectionFormat="of" target="RFC2985" format="default" derivedLink="https://rfc-editor.org/rfc/rfc2985#section-5.4.2" derivedContent="RFC2985"/>.
The revised encoding given here does not use an '<tt>id-ExtensionReq</tt>' attribute
because the MAC Address is not an X.509 certificate extension by itself
and because the server provides its OID without a value,
which is not allowed syntactically within a structure of type '<tt>Extension</tt>'.</t>
        <section anchor="base64-encoded-example-1" numbered="true" removeInRFC="false" toc="include" pn="section-5.2.1">
          <name slugifiedName="name-base64-encoded-example-2">Base64-Encoded Example</name>
          <t indent="0" pn="section-5.2.1-1">The Base64:</t>
          <sourcecode type="base64" markers="false" pn="section-5.2.1-2">
MDIGCSqGSIb3DQEJBzASBgcqhkjOPQIBMQcGBSuBBAAiBgcr
BgEBAQEWBggqhkjOPQQDAw==</sourcecode>
        </section>
        <section anchor="asn1-dump-output-1" numbered="true" removeInRFC="false" toc="include" pn="section-5.2.2">
          <name slugifiedName="name-asn1-dump-output-2">ASN.1 DUMP Output</name>
          <t indent="0" pn="section-5.2.2-1">The CsrAttrs structure contains:</t>
          <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-5.2.2-2"><li pn="section-5.2.2-2.1" derivedCounter="1.">
              <t indent="0" pn="section-5.2.2-2.1.1">The challengePassword attribute to indicate that the
CSR should include this value.</t>
            </li>
            <li pn="section-5.2.2-2.2" derivedCounter="2.">
              <t indent="0" pn="section-5.2.2-2.2.1">An ecPublicKey OID with the value secp384r1 to
indicate what kind of public key should be submitted.</t>
            </li>
            <li pn="section-5.2.2-2.3" derivedCounter="3.">
              <t indent="0" pn="section-5.2.2-2.3.1">The  macAddress OID 1.3.6.1.1.1.1.22 to
indicate that the CSR is expected to include
(in a subjectDirectoryAttributes extension) a MAC address value.</t>
            </li>
            <li pn="section-5.2.2-2.4" derivedCounter="4.">
              <t indent="0" pn="section-5.2.2-2.4.1">The ecdsaWithSHA384 OID to indicate what kind of hash
is expected to be used for the self-signature in the PKCS#10 CSR.</t>
            </li>
          </ol>
          <sourcecode type="" markers="false" pn="section-5.2.2-3">
    &lt;30 32&gt;
  0  50: SEQUENCE {
    &lt;06 09&gt;
  2   9:   OBJECT IDENTIFIER challengePassword (1 2 840 113549 1 9 7)
       :     (PKCS #9)
    &lt;30 12&gt;
 13  18:   SEQUENCE {
    &lt;06 07&gt;
 15   7:     OBJECT IDENTIFIER ecPublicKey (1 2 840 10045 2 1)
       :       (ANSI X9.62 public key type)
    &lt;31 07&gt;
 24   7:     SET {
    &lt;06 05&gt;
 26   5:       OBJECT IDENTIFIER secp384r1 (1 3 132 0 34)
       :         (SECG (Certicom) named elliptic curve)
       :       }
       :     }
    &lt;06 07&gt;
 33   7:   OBJECT IDENTIFIER '1 3 6 1 1 1 1 22'
    &lt;06 08&gt;
 42   8:   OBJECT IDENTIFIER ecdsaWithSHA384 (1 2 840 10045 4 3 3)
       :     (ANSI X9.62 ECDSA algorithm with SHA384)
       :   }</sourcecode>
        </section>
      </section>
      <section anchor="require-a-specific-subjectaltname-extension" numbered="true" removeInRFC="false" toc="include" pn="section-5.3">
        <name slugifiedName="name-require-a-specific-subjecta">Require a Specific subjectAltName Extension</name>
        <t indent="0" pn="section-5.3-1">This example is the same as the previous one except that instead of the OID
for a macAddress, a subjectAltName is specified as the only Extension element.</t>
        <section anchor="base64-encoded-example-2" numbered="true" removeInRFC="false" toc="include" pn="section-5.3.1">
          <name slugifiedName="name-base64-encoded-example-3">Base64-Encoded Example</name>
          <t indent="0" pn="section-5.3.1-1">The Base64:</t>
          <sourcecode type="base64" markers="false" pn="section-5.3.1-2">
MEUGCSqGSIb3DQEJBzASBgcqhkjOPQIBMQcGBSuBBAAjBgkq
hkiG9w0BCRQGCgmSJomT8ixkAQUGA1UEBQYIKoZIzj0EAwQ=</sourcecode>
        </section>
        <section anchor="asn1-dump-output-2" numbered="true" removeInRFC="false" toc="include" pn="section-5.3.2">
          <name slugifiedName="name-asn1-dump-output-3">ASN.1 DUMP Output</name>
          <t indent="0" pn="section-5.3.2-1">The CsrAttrs structure contains:</t>
          <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-5.3.2-2"><li pn="section-5.3.2-2.1" derivedCounter="1.">
              <t indent="0" pn="section-5.3.2-2.1.1">The challengePassword attribute to indicate that the CSR should include this value.</t>
            </li>
            <li pn="section-5.3.2-2.2" derivedCounter="2.">
              <t indent="0" pn="section-5.3.2-2.2.1">An ecPublicKey OID with the value secp521r1 to indicate what kind of public key should be submitted.</t>
            </li>
            <li pn="section-5.3.2-2.3" derivedCounter="3.">
              <t indent="0" pn="section-5.3.2-2.3.1">An extensionRequest container with a subjectAltName value containing the name potato@example.com.</t>
            </li>
            <li pn="section-5.3.2-2.4" derivedCounter="4.">
              <t indent="0" pn="section-5.3.2-2.4.1">The ecdsaWithSHA512 OID to indicate the SHA-512 hash is expected to be used for the self-signature in the PKCS#10 CSR.</t>
            </li>
          </ol>
          <sourcecode type="" markers="false" pn="section-5.3.2-3">
    &lt;30 45&gt;
  0  69: SEQUENCE {
    &lt;06 09&gt;
  2   9:   OBJECT IDENTIFIER challengePassword (1 2 840 113549 1 9 7)
       :     (PKCS #9)
    &lt;30 12&gt;
 13  18:   SEQUENCE {
    &lt;06 07&gt;
 15   7:     OBJECT IDENTIFIER ecPublicKey (1 2 840 10045 2 1)
       :       (ANSI X9.62 public key type)
    &lt;31 07&gt;
 24   7:     SET {
    &lt;06 05&gt;
 26   5:       OBJECT IDENTIFIER secp521r1 (1 3 132 0 35)
       :         (SECG (Certicom) named elliptic curve)
       :       }
       :     }
    &lt;06 09&gt;
 33   9:   OBJECT IDENTIFIER friendlyName (for PKCS #12)
                             (1 2 840 113549 1 9 20)
       :     (PKCS #9 via PKCS #12)
    &lt;06 0A&gt;
 44  10:   OBJECT IDENTIFIER '0 9 2342 19200300 100 1 5'
    &lt;06 03&gt;
 56   3:   OBJECT IDENTIFIER serialNumber (2 5 4 5)
       :     (X.520 DN component)
    &lt;06 08&gt;
 61   8:   OBJECT IDENTIFIER ecdsaWithSHA512 (1 2 840 10045 4 3 4)
       :     (ANSI X9.62 ECDSA algorithm with SHA512)
       :   }</sourcecode>
        </section>
      </section>
      <section anchor="require-a-public-key-of-a-specific-size" numbered="true" removeInRFC="false" toc="include" pn="section-5.4">
        <name slugifiedName="name-require-a-public-key-of-a-s">Require a Public Key of a Specific Size</name>
        <t indent="0" pn="section-5.4-1">The CSR requires an RSA public key of a specific size.</t>
        <section anchor="base64-encoded-example-3" numbered="true" removeInRFC="false" toc="include" pn="section-5.4.1">
          <name slugifiedName="name-base64-encoded-example-4">Base64-Encoded Example</name>
          <t indent="0" pn="section-5.4.1-1">The Base64:</t>
          <sourcecode type="base64" markers="false" pn="section-5.4.1-2">
MCkGCSqGSIb3DQEJBzARBgkqhkiG9w0BAQExBAICEAAGCSqG
SIb3DQEBCw==</sourcecode>
        </section>
        <section anchor="asn1-dump-output-3" numbered="true" removeInRFC="false" toc="include" pn="section-5.4.2">
          <name slugifiedName="name-asn1-dump-output-4">ASN.1 DUMP Output</name>
          <t indent="0" pn="section-5.4.2-1">Provide a CSR with an RSA key that's 4096 bits and use SHA256 as the hash algorithm within the signature.</t>
          <sourcecode type="asn.1" markers="false" pn="section-5.4.2-2">
    &lt;30 29&gt;
  0  41: SEQUENCE {
    &lt;06 09&gt;
  2   9:   OBJECT IDENTIFIER challengePassword (1 2 840 113549 1 9 7)
       :     (PKCS #9)
    &lt;30 11&gt;
 13  17:   SEQUENCE {
    &lt;06 09&gt;
 15   9:     OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
       :       (PKCS #1)
    &lt;31 04&gt;
 26   4:     SET {
    &lt;02 02&gt;
 28   2:       INTEGER 4096
       :       }
       :     }
    &lt;06 09&gt;
 32   9:   OBJECT IDENTIFIER sha256WithRSAEncryption
                             (1 2 840 113549 1 1 11)
       :     (PKCS #1)
       :   }</sourcecode>
        </section>
      </section>
      <section anchor="require-a-public-key-of-a-specific-curve" numbered="true" removeInRFC="false" toc="include" pn="section-5.5">
        <name slugifiedName="name-require-a-public-key-of-a-sp">Require a Public Key of a Specific Curve</name>
        <t indent="0" pn="section-5.5-1">The CSR requires an ECC public key with a specific curve.</t>
        <section anchor="base64-encoded-example-4" numbered="true" removeInRFC="false" toc="include" pn="section-5.5.1">
          <name slugifiedName="name-base64-encoded-example-5">Base64-Encoded Example</name>
          <t indent="0" pn="section-5.5.1-1">The Base64:</t>
          <sourcecode type="base64" markers="false" pn="section-5.5.1-2">
MC4GCSqGSIb3DQEJBzASBgcqhkjOPQIBMQcGBSuBBAAiBgNV
BAUGCCqGSM49BAMD</sourcecode>
        </section>
        <section anchor="asn1-dump-output-4" numbered="true" removeInRFC="false" toc="include" pn="section-5.5.2">
          <name slugifiedName="name-asn1-dump-output-5">ASN.1 DUMP Output</name>
          <t indent="0" pn="section-5.5.2-1">Provide a CSR with an ECC public key from p384, include your serial number, and
use SHA384 as the hash algorithm within the signature.</t>
          <sourcecode type="asn.1" markers="false" pn="section-5.5.2-2">
    &lt;30 2E&gt;
  0  46: SEQUENCE {
    &lt;06 09&gt;
  2   9:   OBJECT IDENTIFIER challengePassword (1 2 840 113549 1 9 7)
       :     (PKCS #9)
    &lt;30 12&gt;
 13  18:   SEQUENCE {
    &lt;06 07&gt;
 15   7:     OBJECT IDENTIFIER ecPublicKey (1 2 840 10045 2 1)
       :       (ANSI X9.62 public key type)
    &lt;31 07&gt;
 24   7:     SET {
    &lt;06 05&gt;
 26   5:       OBJECT IDENTIFIER secp384r1 (1 3 132 0 34)
       :         (SECG (Certicom) named elliptic curve)
       :       }
       :     }
    &lt;06 03&gt;
 33   3:   OBJECT IDENTIFIER serialNumber (2 5 4 5)
       :     (X.520 DN component)
    &lt;06 08&gt;
 38   8:   OBJECT IDENTIFIER ecdsaWithSHA384 (1 2 840 10045 4 3 3)
       :     (ANSI X9.62 ECDSA algorithm with SHA384)
       :   }</sourcecode>
        </section>
      </section>
      <section anchor="require-specific-extensions-and-attributes" numbered="true" removeInRFC="false" toc="include" pn="section-5.6">
        <name slugifiedName="name-require-specific-extensions">Require Specific Extensions and Attributes</name>
        <t indent="0" pn="section-5.6-1">The CSR is required to have an ECC public key, include a serial number, include a friendly name, include a favorite drink <xref target="favoritedrink" format="default" sectionFormat="of" derivedContent="favoritedrink"/> [OID 0.9.2342.19200300.100.1.5], and
use SHA512 as the hash algorithm within the signature.</t>
        <section anchor="base64-encoded-example-5" numbered="true" removeInRFC="false" toc="include" pn="section-5.6.1">
          <name slugifiedName="name-base64-encoded-example-6">Base64-Encoded Example</name>
          <t indent="0" pn="section-5.6.1-1">The Base64:</t>
          <sourcecode type="base64" markers="false" pn="section-5.6.1-2">
MEUGCSqGSIb3DQEJBzASBgcqhkjOPQIBMQcGBSuBBAAjBgkq
hkiG9w0BCRQGCgmSJomT8ixkAQUGA1UEBQYIKoZIzj0EAwQ=</sourcecode>
        </section>
        <section anchor="asn1-dump-output-5" numbered="true" removeInRFC="false" toc="include" pn="section-5.6.2">
          <name slugifiedName="name-asn1-dump-output-6">ASN.1 DUMP Output</name>
          <t indent="0" pn="section-5.6.2-1">Provide a CSR with an ECC public key from sha521 and include your serial number,
friendly name, and favorite drink, and hash it with SHA512.</t>
          <sourcecode type="asn.1" markers="false" pn="section-5.6.2-2">
    &lt;30 45&gt;
  0  69: SEQUENCE {
    &lt;06 09&gt;
  2   9:   OBJECT IDENTIFIER challengePassword (1 2 840 113549 1 9 7)
       :     (PKCS #9)
    &lt;30 12&gt;
 13  18:   SEQUENCE {
    &lt;06 07&gt;
 15   7:     OBJECT IDENTIFIER ecPublicKey (1 2 840 10045 2 1)
       :       (ANSI X9.62 public key type)
    &lt;31 07&gt;
 24   7:     SET {
    &lt;06 05&gt;
 26   5:       OBJECT IDENTIFIER secp521r1 (1 3 132 0 35)
       :         (SECG (Certicom) named elliptic curve)
       :       }
       :     }
    &lt;06 09&gt;
 33   9:   OBJECT IDENTIFIER friendlyName (for PKCS #12)
                             (1 2 840 113549 1 9 20)
       :     (PKCS #9 via PKCS #12)
    &lt;06 0A&gt;
 44  10:   OBJECT IDENTIFIER '0 9 2342 19200300 100 1 5'
    &lt;06 03&gt;
 56   3:   OBJECT IDENTIFIER serialNumber (2 5 4 5)
       :     (X.520 DN component)
    &lt;06 08&gt;
 61   8:   OBJECT IDENTIFIER ecdsaWithSHA512 (1 2 840 10045 4 3 4)
       :     (ANSI X9.62 ECDSA algorithm with SHA512)
       :   }</sourcecode>
        </section>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-6-1">The security considerations from <xref target="RFC7030" sectionFormat="comma" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7030#section-6" derivedContent="RFC7030"/> are unchanged.</t>
      <section anchor="identity-and-privacy-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-6.1">
        <name slugifiedName="name-identity-and-privacy-consid">Identity and Privacy Considerations</name>
        <t indent="0" pn="section-6.1-1">An EST server may use this mechanism to instruct the EST client about the identities it should include in the CSR it sends as part of enrollment.
The client may only be aware of its Initial Device
   Identifier (IDevID) Subject, which includes a manufacturer serial number.
The EST server can use this mechanism to tell the client to include a specific fully qualified domain name in the CSR in order to complete domain ownership proofs required by the CA.
Additionally, the EST server may deem the manufacturer serial number in an IDevID as personally identifiable information and may want to specify a new random opaque identifier that the pledge should use in its CSR.
This may be desirable if the CA and EST server have different operators.</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-7-1">
For the ASN.1 module in <xref target="app-asn1-module" format="default" sectionFormat="of" derivedContent="Appendix A"/>, IANA has assigned the following OID in the "SMI Security for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)" registry:
</t>
      <table anchor="table_1" align="center" pn="table-1">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Decimal</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">82</td>
            <td align="left" colspan="1" rowspan="1">id-mod-critemplate</td>
            <td align="left" colspan="1" rowspan="1">RFC 9908</td>
          </tr>
        </tbody>
      </table>
      <t indent="0" pn="section-7-3">
For the Certification Request Information Template and Extension Request Template attributes in <xref target="app-asn1-module" format="default" sectionFormat="of" derivedContent="Appendix A"/>, IANA has assigned the following OIDs in the "SMI Security for S/MIME Attributes (1.2.840.113549.1.9.16.2)" registry:
</t>
      <table anchor="table_2" align="center" pn="table-2">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Decimal</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
            <th align="left" colspan="1" rowspan="1">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">61</td>
            <td align="left" colspan="1" rowspan="1">id-aa-certificationRequestInfoTemplate</td>
            <td align="left" colspan="1" rowspan="1">RFC 9908</td>
          </tr>
          <tr>
            <td align="left" colspan="1" rowspan="1">62</td>
            <td align="left" colspan="1" rowspan="1">id-aa-extensionReqTemplate</td>
            <td align="left" colspan="1" rowspan="1">RFC 9908</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references" pn="section-8">
      <name slugifiedName="name-references">References</name>
      <references anchor="sec-normative-references" pn="section-8.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <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 indent="0">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="RFC2986" target="https://www.rfc-editor.org/info/rfc2986" quoteTitle="true" derivedAnchor="RFC2986">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t indent="0">This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC5911" target="https://www.rfc-editor.org/info/rfc5911" quoteTitle="true" derivedAnchor="RFC5911">
          <front>
            <title>New ASN.1 Modules for Cryptographic Message Syntax (CMS) and S/MIME</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t indent="0">The Cryptographic Message Syntax (CMS) format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5911"/>
          <seriesInfo name="DOI" value="10.17487/RFC5911"/>
        </reference>
        <reference anchor="RFC5912" target="https://www.rfc-editor.org/info/rfc5912" quoteTitle="true" derivedAnchor="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t indent="0">The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="RFC6268" target="https://www.rfc-editor.org/info/rfc6268" quoteTitle="true" derivedAnchor="RFC6268">
          <front>
            <title>Additional New ASN.1 Modules for the Cryptographic Message Syntax (CMS) and the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="July" year="2011"/>
            <abstract>
              <t indent="0">The Cryptographic Message Syntax (CMS) format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates some auxiliary ASN.1 modules to conform to the 2008 version of ASN.1; the 1988 ASN.1 modules remain the normative version. There are no bits- on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6268"/>
          <seriesInfo name="DOI" value="10.17487/RFC6268"/>
        </reference>
        <reference anchor="RFC7030" target="https://www.rfc-editor.org/info/rfc7030" quoteTitle="true" derivedAnchor="RFC7030">
          <front>
            <title>Enrollment over Secure Transport</title>
            <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin"/>
            <author fullname="P. Yee" initials="P." role="editor" surname="Yee"/>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
            <date month="October" year="2013"/>
            <abstract>
              <t indent="0">This document profiles certificate enrollment for clients using Certificate Management over CMS (CMC) messages over a secure transport. This profile, called Enrollment over Secure Transport (EST), describes a simple, yet functional, certificate management protocol targeting Public Key Infrastructure (PKI) clients that need to acquire client certificates and associated Certification Authority (CA) certificates. It also supports client-generated public/private key pairs as well as key pairs generated by the CA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7030"/>
          <seriesInfo name="DOI" value="10.17487/RFC7030"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <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 indent="0">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>
        <reference anchor="RFC9148" target="https://www.rfc-editor.org/info/rfc9148" quoteTitle="true" derivedAnchor="RFC9148">
          <front>
            <title>EST-coaps: Enrollment over Secure Transport with the Secure Constrained Application Protocol</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="S. Raza" initials="S." surname="Raza"/>
            <date month="April" year="2022"/>
            <abstract>
              <t indent="0">Enrollment over Secure Transport (EST) is used as a certificate provisioning protocol over HTTPS. Low-resource devices often use the lightweight Constrained Application Protocol (CoAP) for message exchanges. This document defines how to transport EST payloads over secure CoAP (EST-coaps), which allows constrained devices to use existing EST functionality for provisioning certificates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9148"/>
          <seriesInfo name="DOI" value="10.17487/RFC9148"/>
        </reference>
        <reference anchor="X.680" target="https://www.itu.int/rec/T-REC-X.680" quoteTitle="true" derivedAnchor="X.680">
          <front>
            <title>Information technology -- Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </reference>
        <reference anchor="X.690" target="https://www.itu.int/rec/T-REC-X.690" quoteTitle="true" derivedAnchor="X.690">
          <front>
            <title>Information technology -- ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1:2021"/>
        </reference>
      </references>
      <references anchor="sec-informative-references" pn="section-8.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="dumpasn1" target="https://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c" quoteTitle="true" derivedAnchor="dumpasn1">
          <front>
            <title>Dump ASN</title>
            <author initials="P." surname="Gutmann" fullname="Peter Gutmann">
              <organization showOnFrontPage="true"/>
            </author>
            <date day="22" month="4" year="2021"/>
          </front>
        </reference>
        <reference anchor="favoritedrink" target="https://oid-base.com/get/0.9.2342.19200300.100.1.5" quoteTitle="true" derivedAnchor="favoritedrink">
          <front>
            <title>drink(5) [other identifier: favouriteDrink]</title>
            <author>
              <organization showOnFrontPage="true">OID Repository</organization>
            </author>
            <date day="4" month="July" year="2019"/>
          </front>
          <refcontent>OID 0.9.2342.19200300.100.1.5</refcontent>
        </reference>
        <reference anchor="RFC2985" target="https://www.rfc-editor.org/info/rfc2985" quoteTitle="true" derivedAnchor="RFC2985">
          <front>
            <title>PKCS #9: Selected Object Classes and Attribute Types Version 2.0</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t indent="0">This memo represents a republication of PKCS #9 v2.0 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from that specification. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2985"/>
          <seriesInfo name="DOI" value="10.17487/RFC2985"/>
        </reference>
        <reference anchor="RFC4211" target="https://www.rfc-editor.org/info/rfc4211" quoteTitle="true" derivedAnchor="RFC4211">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="September" year="2005"/>
            <abstract>
              <t indent="0">This document describes the Certificate Request Message Format (CRMF) syntax and semantics. This syntax is used to convey a request for a certificate to a Certification Authority (CA), possibly via a Registration Authority (RA), for the purposes of X.509 certificate production. The request will typically include a public key and the associated registration information. This document does not define a certificate request protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4211"/>
          <seriesInfo name="DOI" value="10.17487/RFC4211"/>
        </reference>
        <reference anchor="RFC5272" target="https://www.rfc-editor.org/info/rfc5272" quoteTitle="true" derivedAnchor="RFC5272">
          <front>
            <title>Certificate Management over CMS (CMC)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <date month="June" year="2008"/>
            <abstract>
              <t indent="0">This document defines the base syntax for CMC, a Certificate Management protocol using the Cryptographic Message Syntax (CMS). This protocol addresses two immediate needs within the Internet Public Key Infrastructure (PKI) community:</t>
              <t indent="0">1. The need for an interface to public key certification products and services based on CMS and PKCS #10 (Public Key Cryptography Standard), and</t>
              <t indent="0">2. The need for a PKI enrollment protocol for encryption only keys due to algorithm or hardware design.</t>
              <t indent="0">CMC also requires the use of the transport document and the requirements usage document along with this document for a full definition. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5272"/>
          <seriesInfo name="DOI" value="10.17487/RFC5272"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" quoteTitle="true" derivedAnchor="RFC5280">
          <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 indent="0">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="RFC8295" target="https://www.rfc-editor.org/info/rfc8295" quoteTitle="true" derivedAnchor="RFC8295">
          <front>
            <title>EST (Enrollment over Secure Transport) Extensions</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2018"/>
            <abstract>
              <t indent="0">The EST (Enrollment over Secure Transport) protocol defines the Well-Known URI (Uniform Resource Identifier) -- /.well-known/est -- along with a number of other path components that clients use for PKI (Public Key Infrastructure) services, namely certificate enrollment (e.g., /simpleenroll). This document defines a number of other PKI services as additional path components -- specifically, firmware and trust anchors as well as symmetric, asymmetric, and encrypted keys. This document also specifies the PAL (Package Availability List), which is an XML (Extensible Markup Language) file or JSON (JavaScript Object Notation) object that clients use to retrieve packages available and authorized for them. This document extends the EST server path components to provide these additional services.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8295"/>
          <seriesInfo name="DOI" value="10.17487/RFC8295"/>
        </reference>
        <reference anchor="RFC8368" target="https://www.rfc-editor.org/info/rfc8368" quoteTitle="true" derivedAnchor="RFC8368">
          <front>
            <title>Using an Autonomic Control Plane for Stable Connectivity of Network Operations, Administration, and Maintenance (OAM)</title>
            <author fullname="T. Eckert" initials="T." role="editor" surname="Eckert"/>
            <author fullname="M. Behringer" initials="M." surname="Behringer"/>
            <date month="May" year="2018"/>
            <abstract>
              <t indent="0">Operations, Administration, and Maintenance (OAM), as per BCP 161, for data networks is often subject to the problem of circular dependencies when relying on connectivity provided by the network to be managed for the OAM purposes.</t>
              <t indent="0">Provisioning while bringing up devices and networks tends to be more difficult to automate than service provisioning later on. Changes in core network functions impacting reachability cannot be automated because of ongoing connectivity requirements for the OAM equipment itself, and widely used OAM protocols are not secure enough to be carried across the network without security concerns.</t>
              <t indent="0">This document describes how to integrate OAM processes with an autonomic control plane in order to provide stable and secure connectivity for those OAM processes. This connectivity is not subject to the aforementioned circular dependencies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8368"/>
          <seriesInfo name="DOI" value="10.17487/RFC8368"/>
        </reference>
        <reference anchor="RFC8994" target="https://www.rfc-editor.org/info/rfc8994" quoteTitle="true" derivedAnchor="RFC8994">
          <front>
            <title>An Autonomic Control Plane (ACP)</title>
            <author fullname="T. Eckert" initials="T." role="editor" surname="Eckert"/>
            <author fullname="M. Behringer" initials="M." role="editor" surname="Behringer"/>
            <author fullname="S. Bjarnason" initials="S." surname="Bjarnason"/>
            <date month="May" year="2021"/>
            <abstract>
              <t indent="0">Autonomic functions need a control plane to communicate, which depends on some addressing and routing. This Autonomic Control Plane should ideally be self-managing and be as independent as possible of configuration. This document defines such a plane and calls it the "Autonomic Control Plane", with the primary use as a control plane for autonomic functions. It also serves as a "virtual out-of-band channel" for Operations, Administration, and Management (OAM) communications over a network that provides automatically configured, hop-by-hop authenticated and encrypted communications via automatically configured IPv6 even when the network is not configured or is misconfigured.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8994"/>
          <seriesInfo name="DOI" value="10.17487/RFC8994"/>
        </reference>
        <reference anchor="RFC8995" target="https://www.rfc-editor.org/info/rfc8995" quoteTitle="true" derivedAnchor="RFC8995">
          <front>
            <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title>
            <author fullname="M. Pritikin" initials="M." surname="Pritikin"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="T. Eckert" initials="T." surname="Eckert"/>
            <author fullname="M. Behringer" initials="M." surname="Behringer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="May" year="2021"/>
            <abstract>
              <t indent="0">This document specifies automated bootstrapping of an Autonomic Control Plane. To do this, a Secure Key Infrastructure is bootstrapped. This is done using manufacturer-installed X.509 certificates, in combination with a manufacturer's authorizing service, both online and offline. We call this process the Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol. Bootstrapping a new device can occur when using a routable address and a cloud service, only link-local connectivity, or limited/disconnected networks. Support for deployment models with less stringent security requirements is included. Bootstrapping is complete when the cryptographic identity of the new key infrastructure is successfully deployed to the device. The established secure connection can be used to deploy a locally issued certificate to the device as well.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8995"/>
          <seriesInfo name="DOI" value="10.17487/RFC8995"/>
        </reference>
        <reference anchor="RFC9483" target="https://www.rfc-editor.org/info/rfc9483" quoteTitle="true" derivedAnchor="RFC9483">
          <front>
            <title>Lightweight Certificate Management Protocol (CMP) Profile</title>
            <author fullname="H. Brockhaus" initials="H." surname="Brockhaus"/>
            <author fullname="D. von Oheimb" initials="D." surname="von Oheimb"/>
            <author fullname="S. Fries" initials="S." surname="Fries"/>
            <date month="November" year="2023"/>
            <abstract>
              <t indent="0">This document aims at simple, interoperable, and automated PKI management operations covering typical use cases of industrial and Internet of Things (IoT) scenarios. This is achieved by profiling the Certificate Management Protocol (CMP), the related Certificate Request Message Format (CRMF), and transfer based on HTTP or Constrained Application Protocol (CoAP) in a succinct but sufficiently detailed and self-contained way. To make secure certificate management for simple scenarios and constrained devices as lightweight as possible, only the most crucial types of operations and options are specified as mandatory. More specialized or complex use cases are supported with optional features.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9483"/>
          <seriesInfo name="DOI" value="10.17487/RFC9483"/>
        </reference>
        <reference anchor="RFC9810" target="https://www.rfc-editor.org/info/rfc9810" quoteTitle="true" derivedAnchor="RFC9810">
          <front>
            <title>Internet X.509 Public Key Infrastructure -- Certificate Management Protocol (CMP)</title>
            <author fullname="H. Brockhaus" initials="H." surname="Brockhaus"/>
            <author fullname="D. von Oheimb" initials="D." surname="von Oheimb"/>
            <author fullname="M. Ounsworth" initials="M." surname="Ounsworth"/>
            <author fullname="J. Gray" initials="J." surname="Gray"/>
            <date month="July" year="2025"/>
            <abstract>
              <t indent="0">This document describes the Internet X.509 Public Key Infrastructure (PKI) Certificate Management Protocol (CMP). Protocol messages are defined for X.509v3 certificate creation and management. CMP provides interactions between client systems and PKI components such as a Registration Authority (RA) and a Certification Authority (CA).</t>
              <t indent="0">This document adds support for management of certificates containing a Key Encapsulation Mechanism (KEM) public key and uses EnvelopedData instead of EncryptedValue. This document also includes the updates specified in Section 2 and Appendix A.2 of RFC 9480.</t>
              <t indent="0">This document obsoletes RFC 4210, and together with RFC 9811, it also obsoletes RFC 9480. Appendix F of this document updates Section 9 of RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9810"/>
          <seriesInfo name="DOI" value="10.17487/RFC9810"/>
        </reference>
      </references>
    </references>
    <section anchor="app-asn1-module" numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-asn1-module">ASN.1 Module</name>
      <t indent="0" pn="section-appendix.a-1">This appendix provides an ASN.1 module <xref target="X.680" format="default" sectionFormat="of" derivedContent="X.680"/> for the Certification Request Information Template attribute and its sub-template structures. It follows the conventions
established in <xref target="RFC5911" format="default" sectionFormat="of" derivedContent="RFC5911"/>, <xref target="RFC5912" format="default" sectionFormat="of" derivedContent="RFC5912"/>, and <xref target="RFC6268" format="default" sectionFormat="of" derivedContent="RFC6268"/>.</t>
      <sourcecode type="asn.1" markers="false" pn="section-appendix.a-2">
CRITemplateModule
  { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    pkcs-9(9) smime(16) modules(0) id-mod-critemplate(82) }

DEFINITIONS IMPLICIT TAGS ::=

BEGIN

IMPORTS -- from [RFC5912]

SupportedAttributes
 FROM PKIX1Explicit-2009
  { iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-explicit-02(51)}

ATTRIBUTE, EXTENSION
 FROM PKIX-CommonTypes-2009
  { iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) id-mod(0) id-mod-pkixCommon-02(57) }

PUBLIC-KEY, AlgorithmIdentifier{}
 FROM AlgorithmInformation-2009
  { iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) id-mod(0)
    id-mod-algorithmInformation-02(58)}

CertExtensions
 FROM PKIX1Implicit-2009
  { iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-implicit-02(59)}

Attributes{}, CRIAttributes, PKInfoAlgorithms
 FROM PKCS-10
  { iso(1) identified-organization(3) dod(6) internet(1)
    security(5) mechanisms(5) pkix(7)
    id-mod(0) id-mod-pkcs10-2009(69) }
;

aa-certificationRequestInfoTemplate ATTRIBUTE ::=
  { TYPE CertificationRequestInfoTemplate IDENTIFIED BY
    id-aa-certificationRequestInfoTemplate }

id-aa-certificationRequestInfoTemplate OBJECT IDENTIFIER ::=
  { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
    smime(16) aa(2) id-aa-certificationRequestInfoTemplate(61) }

--  like CertificationRequestInfo but OPTIONAL subject, subjectPKInfo
CertificationRequestInfoTemplate ::= SEQUENCE {
    version       INTEGER { v1(0) } (v1, ... ),
    subject       NameTemplate OPTIONAL,
    subjectPKInfo [0] SubjectPublicKeyInfoTemplate
                              {{ PKInfoAlgorithms }} OPTIONAL,
    attributes    [1] Attributes{{ CRIAttributes }}
}


--  like Name, but with OPTIONAL RDN values
NameTemplate ::= CHOICE { -- only one possibility for now --
    rdnSequence  RDNSequenceTemplate }

RDNSequenceTemplate ::= SEQUENCE OF RelativeDistinguishedNameTemplate

RelativeDistinguishedNameTemplate  ::= SET SIZE (1 .. MAX)
    OF SingleAttributeTemplate { {SupportedAttributes} }

--  like Attributes, but with OPTIONAL value
SingleAttributeTemplates{ATTRIBUTE:AttrSet} ::= SEQUENCE OF
    SingleAttributeTemplates{ {AttrSet} }

--  like SingleAttribute, but with OPTIONAL value
SingleAttributeTemplate{ATTRIBUTE:AttrSet} ::= SEQUENCE {
    type      ATTRIBUTE.&amp;id({AttrSet}),
    value     ATTRIBUTE.&amp;Type({AttrSet}{@type}) OPTIONAL
}

--  like SubjectPublicKeyInfo, but with OPTIONAL subjectPublicKey
SubjectPublicKeyInfoTemplate{PUBLIC-KEY:IOSet} ::= SEQUENCE {
    algorithm        AlgorithmIdentifier{PUBLIC-KEY, {IOSet}},
    subjectPublicKey BIT STRING OPTIONAL
}

id-aa-extensionReqTemplate OBJECT IDENTIFIER ::=
{ iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
  smime(16) aa(2) id-aa-extensionReqTemplate(62) }

--  like extensionRequest, but with OPTIONAL Extension extnValues
--  original definition was in PKCS#9 RFC 2985, Section 5.4.2
at-extensionReqTemplate ATTRIBUTE ::= {
    TYPE ExtensionReqTemplate IDENTIFIED BY
                 id-aa-extensionReqTemplate }

ExtensionReqTemplate ::= ExtensionTemplates{{CertExtensions}}

--  like Extensions, but with OPTIONAL extnValue
ExtensionTemplates{EXTENSION:ExtensionSet} ::=
    SEQUENCE SIZE (1..MAX) OF ExtensionTemplate{{ExtensionSet}}

--  like Extension, but with OPTIONAL extnValue
ExtensionTemplate{EXTENSION:ExtensionSet} ::= SEQUENCE {
    extnID    EXTENSION.&amp;id({ExtensionSet}),
    critical  BOOLEAN
  --                   (EXTENSION.&amp;Critical({ExtensionSet}{@extnID}))
                     DEFAULT FALSE,
    extnValue OCTET STRING (CONTAINING
              EXTENSION.&amp;ExtnType({ExtensionSet}{@extnID})) OPTIONAL
              --  contains the DER encoding of the ASN.1 value
              --  corresponding to the extension type identified
              --  by extnID when present
}

END</sourcecode>
    </section>
    <section anchor="acknowledgments" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.b-1"><contact fullname="Corey Bonnell"/> crafted Example 2 using a different tool, and    
this helped debug other running code.</t>
      <t indent="0" pn="section-appendix.b-2"><contact fullname="Carl Wallace"/> provided major parts of the                       
CertificationRequestInfoTemplate syntax declaration.</t>
      <t indent="0" pn="section-appendix.b-3"><contact fullname="Russ Housley"/> conducted many reviews of the ASN.1 module and suggested many 
fixes.</t>
      <t indent="0" pn="section-appendix.b-4"><contact fullname="Deb Cooley"/> conducted the usual Area Director Review.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="M." surname="Richardson" fullname="Michael Richardson" role="editor">
        <organization showOnFrontPage="true">Sandelman Software Works</organization>
        <address>
          <email>mcr+ietf@sandelman.ca</email>
        </address>
      </author>
      <author initials="O." surname="Friel" fullname="Owen Friel">
        <organization showOnFrontPage="true">Cisco</organization>
        <address>
          <email>ofriel@cisco.com</email>
        </address>
      </author>
      <author initials="D." surname="von Oheimb" fullname="Dr. David von Oheimb">
        <organization showOnFrontPage="true">Siemens</organization>
        <address>
          <email>dev@ddvo.net</email>
        </address>
      </author>
      <author initials="D." surname="Harkins" fullname="Dan Harkins">
        <organization showOnFrontPage="true">The Industrial Lounge</organization>
        <address>
          <email>dharkins@lounge.org</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
