<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-deeglaze-amd-sev-snp-corim-profile-02" category="std" consensus="true" submissionType="IETF" tocDepth="6" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="CoRIM-SEV">CoRIM profile for AMD SEV-SNP attestation report</title>
    <seriesInfo name="Internet-Draft" value="draft-deeglaze-amd-sev-snp-corim-profile-02"/>
    <author initials="D." surname="Glaze" fullname="Dionna Glaze">
      <organization>Google LLC</organization>
      <address>
        <email>dionnaglaze@google.com</email>
      </address>
    </author>
    <date year="2024" month="December" day="10"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>RIM, RATS, attestation, verifier, supply chain</keyword>
    <abstract>
      <?line 91?>

<t>AMD Secure Encrypted Virtualization with Secure Nested Pages (SEV-SNP) attestation reports comprise of reference values and cryptographic key material that a Verifier needs in order to appraise Attestation Evidence produced by an AMD SEV-SNP virtual machine.
This document specifies the information elements for representing SEV-SNP Reference Values in CoRIM format.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/deeglaze/draft-deeglaze-amd-sev-snp-corim-profile"/>.</t>
    </note>
  </front>
  <middle>
    <?line 96?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t>This profile describes the extensions and restrictions placed on Reference Values, Endorsements, and Evidence that support the attestation capabilities of AMD products that provide Securet Encrypted Virtualization with Secure Nested Pages (SEV-SNP).</t>
      <t>CoRIM (<xref target="I-D.ietf-rats-corim"/>) defines a baseline CDDL for Reference Values and Endorsements that this profile extends.
Some measurement types of the baseline CDDL are not used in this profile.
The AMD SEV-SNP attestation report byte format is specified by AMD.
The profile defines a transformation from the AMD byte format into a CoMID representation for use in appraisal.</t>
      <t>This profile is meant for expressing reference values and endorsements of specific environments. It is not meant to encode complex policy decisions about the acceptability of measurements. The accepted claim set construction (ACS) this profile enables does lay a foundation for policy engines that enable further evaluation over complete ACS constructions.</t>
      <t>This profile extends the <tt>flags-map</tt> to represent the guest policy and host platform info that are unique to AMD SEV-SNP.
The profile extends the <tt>$crypto-key-type-choice</tt> to represent the SHA-384 digest of a key in AMD format from Appendix: Digital Signatures of <xref target="SEV-SNP.API"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC8174">RFC2119</xref> when, and only when, they appear in all capitals, as shown here.</t>
      <t>The reader is assumed to be familiar with the terms defined in <xref target="I-D.ietf-rats-corim"/> and Section 4 of <xref target="RFC9334"/>.
The syntax of data descriptions is CDDL as specified in <xref target="RFC8610"/>.
Fields of the AMD SEV-SNP <tt>ATTESTATION_REPORT</tt> are referred to by their assigned names in <xref target="SEV-SNP.API"/>.</t>
    </section>
    <section anchor="amd-sev-snp-attestation-reports">
      <name>AMD SEV-SNP Attestation Reports</name>
      <t>The AMD SEV-SNP attestation scheme in <xref target="SEV-SNP.API"/> contains measurements of security-relevant configuration of the host environment and the launch configuration of a SEV-SNP VM.
This draft documents the normative representation of attestation report Evidence as a CoRIM profile.</t>
      <t>AMD-SP:
  AMD Secure Processor.
  A separate core that provides the confidentiality and integrity properties of AMD SEV-SNP.
  The function that is relevant to this document is its construction of signed virtual machine attestation reports.</t>
      <t><xref target="VCEK"/>:
  Versioned Chip Endorsement Key.
  A key for signing the SEV-SNP Attestation Report.
  The key is derived from a unique device secret as well as the security patch levels of relevant host components.</t>
      <t><xref target="VLEK"/>:
  Version Loaded Endorsement Key.
  An alternative SEV-SNP Attestation Report signing key that is derived from a secret shared between AMD and a Cloud Service Provider.
  The key is encrypted with a per-device per-version wrapping key that is then decrypted and stored by the AMD-SP.</t>
      <t>VEK:
  Either a VCEK or VLEK.</t>
      <section anchor="amd-sev-snp-corim-profile">
        <name>AMD SEV-SNP CoRIM Profile</name>
        <t>AMD SEV-SNP launch endorsements are carried in one or more CoMIDs inside a CoRIM.</t>
        <t>The profile attribute in the CoRIM MAY be present to specify a further restriction on this profile.
The base requirements of this profile MAY be specified by <tt>tag:amd.com,2024:snp-corim-profile</tt> <xref target="_figure-profile"/>.</t>
        <figure anchor="_figure-profile">
          <name>SEV-SNP attestation profile version 1, CoRIM profile</name>
          <sourcecode type="cbor-diag"><![CDATA[
/ corim-map / {
  / corim.profile / 3: [
    32("tag:amd.com,2024/snp-corim-profile")
  ]
  / ... /
}
]]></sourcecode>
        </figure>
        <section anchor="amd-sev-snp-target-environment">
          <name>AMD SEV-SNP Target Environment</name>
          <t>The <tt>ATTESTATION_REPORT</tt> structure as understood in the RATS Architecture <xref target="RFC9334"/> is a signed collection of Claims that constitute Evidence about the Target Environment.
The Attester for the <tt>ATTESTATION_REPORT</tt> is specialized hardware that will only run AMD-signed firmware.</t>
          <t>The instance identifier can be argued as any of <tt>REPORT_ID</tt>, <tt>REPORT_ID_MA</tt> when non-zero, <tt>CHIP_ID</tt> (for VCEK), or <tt>CSP_ID</tt> (for VLEK).
Given that <tt>REPORT_ID</tt> and <tt>REPORT_ID_MA</tt> are more ephemeral measured values and not the instance of the AMD-SP as the attesting environment, they are relegated to measurements.
Any endorsement of VM instances specific to either the <tt>REPORT_ID</tt> or <tt>REPORT_ID_MA</tt> values SHOULD use a conditional endorsement triple.</t>
          <t>The different notions of identity induce different classes of attestation to identify target environments.
The different classes of attestation are</t>
          <ul spacing="normal">
            <li>
              <t>By chip: The <tt>environment-map / instance</tt> is <tt>560(CHIP_ID)</tt>.</t>
            </li>
            <li>
              <t>By CSP: The <tt>environment-map / instance</tt> is <tt>560(CSP_ID)</tt>.</t>
            </li>
          </ul>
          <t>The <tt>CSP_ID</tt> is only evident from the <tt>VLEK</tt> certificate, which uses the ASN.1 IA5String encoding.
For the <tt>tagged-bytes</tt> representation, however, the <tt>CSP_ID</tt> SHALL be the UTF-8 encoding of the text string.</t>
          <t>The <tt>class-id</tt> for the Target Environment measured by the AMD-SP is a tagged OID that corresponds to the attestation class:</t>
          <ul spacing="normal">
            <li>
              <t>By chip: 1.3.6.1.4.1.3704.3.1 (<tt>111(h'06092b060104019c780301')</tt>)</t>
            </li>
            <li>
              <t>By CSP: 1.3.6.1.4.1.3704.3.2 (<tt>111(h'06092b060104019c780302')</tt>)</t>
            </li>
          </ul>
          <t>The <tt>model</tt> field MUST NOT be present in the <tt>environment-map</tt>, as it is error-prone to determine for VERSION 2, and redundant with fields added in VERSION 3.</t>
          <t>The rest of the <tt>class-map</tt> MUST remain empty, since <tt>class</tt> is compared for deterministic CBOR binary encoding equality.</t>
          <t>The <tt>group</tt> is free for a CoRIM issuer to assign.</t>
          <t>If the <tt>SIGNING_KEY</tt> bit of the attestation report is 1 indicating VLEK use, then the <tt>class-id</tt> MUST NOT be by chip.</t>
          <sourcecode type="cbor-diag"><![CDATA[
/ environment-map / {
  / class-map / {
    / class-id: / 0 => #6.111(h'06092b060104019c780301')
  }
  / instance: / 1 => #6.560(CHIP_ID)
}
]]></sourcecode>
        </section>
        <section anchor="amd-sev-snp-attestation-report-measurements">
          <name>AMD SEV-SNP Attestation Report measurements</name>
          <t>The fields of an attestation report are named by <tt>mkey</tt> numbers that map to appropriate <tt>measurement-values-map</tt> values.
This profile defines no new <tt>measurement-values-map</tt> extensions for the <tt>$$measurement-values-map-extensions</tt> socket.
Flag-like values are delegated to the <tt>raw-value</tt> and <tt>raw-value-mask</tt> measurement values.</t>
          <section anchor="amd-sev-snp-measurements">
            <name>AMD SEV-SNP measurements</name>
            <t>The measurements in an ATTESTATION_REPORT are each assigned an <tt>mkey</tt> value and the field value is translated to an appropriate <tt>measurement-values-map</tt> entry.
The convention for <tt>mkey</tt> value assignment is to sequential ordering when there are no reserved bits.
The <tt>mkey</tt> following a reserved bit is the bit position in the report of the start of the value.
The <tt>R[lo:hi]</tt> notation will reference the attestation report byte slice from offset <tt>lo</tt> inclusive to <tt>hi</tt> exclusive.
The <tt>leuintN</tt> type is another name for a byte string, but with the interpretation that it represents an unsigned integer with <tt>N</tt> bit width.</t>
            <t><strong>mkey 0</strong>: VERSION.
Expressed as <tt>&amp;(raw-value: 4): tagged-leuint32</tt>.</t>
            <t><strong>mkey 1</strong>: GUEST_SVN.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes4</tt>.</t>
            <t><strong>mkey 2</strong>: POLICY.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes8</tt> with optional <tt>&amp;(raw-value-mask: 5): tagged-bytes8</tt> to restrict the reference value to the masked bits.</t>
            <t><strong>mkey 3</strong>: FAMILY_ID.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes16</tt>.</t>
            <t><strong>mkey 4</strong>: IMAGE_ID.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes16</tt>.</t>
            <t><strong>mkey 5</strong>: VMPL.
Expressed as <tt>&amp;(raw-value: 4): tagged-leuint32</tt>.</t>
            <t><strong>SIGNATURE_ALGO skipped</strong>: <tt>R[0x034:0x38]</tt> only needed for signature verification.</t>
            <t><strong>mkey 6</strong>: CURRENT_TCB.
Expressed as <tt>&amp;(svn: 1): svn-type .and svn64-type</tt></t>
            <t><strong>mkey 7</strong>: PLATFORM_INFO.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes8</tt> with optional <tt>&amp;(raw-value-mask: 5): tagged-bytes8</tt> to restrict the reference value to the masked bits.</t>
            <t><strong>AUTHOR_KEY_EN skipped</strong>: AUTHOR_KEY_DIGEST will be present in evidence if and only if this bit is 1.
<strong>MASK_CHIP_KEY skipped</strong>: CHIP_ID will be present in evidence if and only if this bit is 0.
<strong>SIGNING_KEY skipped</strong>: The environment's class is determined by the attestation key kind.</t>
            <t><strong>mkey 640</strong>: REPORT_DATA.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes64</tt>.</t>
            <t><strong>mkey 641</strong>: MEASUREMENT.
Expressed as <tt>&amp;(digests: 2): [[7, bytes48]]</tt>.</t>
            <t><strong>mkey 642</strong>: HOST_DATA.
Expressed as <tt>&amp;(digests: 2): [[7, bytes48]]</tt>.</t>
            <t><strong>mkey 643</strong>: ID_KEY_DIGEST.
Expressed as <tt>&amp;(digests: 2): [[7, bytes48]]</tt>.</t>
            <t><strong>mkey 644</strong>: AUTHOR_KEY_DIGEST.
Expressed as <tt>&amp;(digests: 2): [[7, bytes48]]</tt>.</t>
            <t><strong>mkey 645</strong>: REPORT_ID.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes32</tt></t>
            <t><strong>mkey 646</strong>: REPORT_ID_MA.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes32</tt></t>
            <t><strong>mkey 647</strong>: REPORTED_TCB
Expressed as <tt>&amp;(svn: 1): svn64-type</tt>.</t>
            <t><strong>mkey 648</strong>: CPUID_FAM_ID.
Expressed as <tt>&amp;(raw-value: 4): tagged-byte</tt>.</t>
            <t><strong>mkey 649</strong>: CPUID_MOD_ID.
Expressed as <tt>&amp;(raw-value: 4): tagged-byte</tt>.</t>
            <t><strong>mkey 650</strong>: CPUID_STEP.
Expressed as <tt>&amp;(raw-value: 4): tagged-byte</tt>.</t>
            <t><strong>mkey 3328</strong>: CHIP_ID.
Expressed as <tt>&amp;(raw-value: 4): tagged-bytes64</tt>.</t>
            <t><strong>mkey 3329</strong>: COMMITTED_TCB:
Expressed as <tt>&amp;(svn: 1): svn64-type</tt>.</t>
            <t><strong>mkey 3330</strong>: CurrentVersion.
Expressed as <tt>&amp;(version: 0): semver-version-map</tt></t>
            <t><strong>mkey 3936</strong>: CommittedVersion.
Expressed as <tt>&amp;(version: 0): semver-version-map</tt></t>
            <t><strong>mkey 3968</strong>: LAUNCH_TCB.
Expressed as <tt>&amp;(svn: 1): svn64-type</tt>.</t>
          </section>
        </section>
        <section anchor="amd-sev-snp-evidence-translation-to-reference-triple-record">
          <name>AMD SEV-SNP Evidence Translation to <tt>reference-triple-record</tt></name>
          <t>The <tt>ATTESTATION_REPORT</tt> Evidence is converted into a CoRIM internal representation given the canonical translation from a <tt>reference-triple-record</tt> as evidence conceptual message.</t>
          <section anchor="environment">
            <name><tt>environment</tt></name>
            <t>If <tt>SIGNING_KEY</tt> is 0</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>environment-map / class / class-id</tt> field SHALL be set to <tt>111(h'06092b060104019c780301')</tt>.</t>
              </li>
              <li>
                <t>The <tt>environment-map / instance </tt> field
                </t>
                <ul spacing="normal">
                  <li>
                    <t>MAY be <tt>560(CHIP_ID)</tt> only if <tt>MASK_CHIP_KEY</tt> is 0, or</t>
                  </li>
                  <li>
                    <t>MAY be <tt>560(hwid)</tt> where <tt>hwid</tt> is from the VCEK certificate extension value of <tt>1.3.6.1.4.1.3704.1.4</tt>.</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>If <tt>SIGNING_KEY</tt> is 1</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>environment-map / class / class-id</tt> field SHALL be set to <tt>111(h'06092b060104019c780302')</tt>.</t>
              </li>
              <li>
                <t>The <tt>environment-map / instance </tt> field SHALL be <tt>560(CSP_ID)</tt>.</t>
              </li>
            </ul>
            <t>The Verifier is free add a <tt>group</tt> according to vendor-defined rules.</t>
          </section>
          <section anchor="measurement-map">
            <name><tt>measurement-map</tt></name>
            <t>The translation makes use of the following metafunctions:</t>
            <ul spacing="normal">
              <li>
                <t>The function <tt>dec(b)</tt> represents a byte in its decimal string rendering.</t>
              </li>
            </ul>
            <t>Juxtaposition of expressions with string literals is interpreted with string concatenation.</t>
            <t>Note: A value of <tt>0</tt> is not treated the same as unset given the semantics for matching <tt>flags-map</tt>.</t>
            <t><strong>no mkey</strong>:</t>
            <t>The <tt>&amp;(flags: 3)</tt> codepoint SHALL be set to a <tt>flags-map</tt> with the following construction:</t>
            <ul spacing="normal">
              <li>
                <t><tt>is-confidentiality-protected</tt> MAY be set to true.</t>
              </li>
              <li>
                <t><tt>is-integrity-protected</tt> MAY be set to true.</t>
              </li>
              <li>
                <t><tt>is-replay-protected</tt> MAY be set to true.</t>
              </li>
              <li>
                <t><tt>is-debug</tt> SHALL be set to the truth value of bit 19 of <tt>POLICY</tt>.</t>
              </li>
            </ul>
            <t><strong>mkey 0</strong>: VERSION.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x000:0x004])</tt>.</t>
            <t><strong>mkey 1</strong>: GUEST_SVN.
4 bytes.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x004:0x008])</tt>.</t>
            <t><strong>mkey 2</strong>: POLICY.
8 bytes.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560:(R[0x008:0x010])</tt> with optional <tt>&amp;(raw-value-mask: 5): tagged-bytes</tt> to restrict the reference value to the masked bits.</t>
            <t><strong>mkey 3</strong>: FAMILY_ID.
16 bytes.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560:(R[0x010:0x020])</tt>.</t>
            <t><strong>mkey 4</strong>: IMAGE_ID.
16 bytes.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560:(R[0x020:0x030])</tt>.</t>
            <t><strong>mkey 5</strong>: VMPL.
4 bytes.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560:(R[0x030:0x034])</tt>.</t>
            <t><strong>SIGNATURE_ALGO skipped</strong>: <tt>R[0x034:0x38]</tt> only needed for signature verification.</t>
            <t><strong>mkey 6</strong>: CURRENT_TCB.
The codepoint <tt>&amp;(svn: 1)</tt> SHALL be set to <tt>552(current_tcb)</tt> where <tt>current_tcb</tt> is <tt>R[0x038:0x40]</tt> translated to <tt>uint</tt> from its little-endian representation.</t>
            <t><strong>mkey 7</strong>: PLATFORM_INFO.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x040:0x048])</tt>.</t>
            <t><strong>AUTHOR_KEY_EN skipped</strong>: AUTHOR_KEY_DIGEST will be present in evidence if and only if this bit is 1.
<strong>MASK_CHIP_KEY skipped</strong>: CHIP_ID will be present in evidence if and only if this bit is 0.
<strong>SIGNING_KEY skipped</strong>: The environment's class is determined by the attestation key kind.</t>
            <t><strong>mkey 640</strong>: REPORT_DATA.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x050:0x090])</tt>.</t>
            <t><strong>mkey 641</strong>: MEASUREMENT.
The codepoint <tt>&amp;(digests: 2)</tt> SHALL be set to <tt>[[7, R[0x090:0x0C0]]]</tt>.</t>
            <t>**mkey 642: HOST_DATA.
The codepoint <tt>&amp;(digests: 2)</tt> SHALL be set to <tt>[[7, R[0x0C0:0x0E0]]]</tt>.</t>
            <t><strong>mkey 643</strong>: ID_KEY_DIGEST.
The codepoint <tt>&amp;(digests: 2): [[7, R[0x0E0:0x110]]]</tt> SHALL be set.</t>
            <t><strong>mkey 644</strong>: AUTHOR_KEY_DIGEST.
The codepoint <tt>&amp;(digests: 2)</tt> SHALL be set to <tt>[[7, R[0x110:0x140]]]</tt> only if AUTHOR_KEY_EN (<tt>R[0x048] &amp; 1</tt>) is 1.</t>
            <t><strong>mkey 645</strong>: REPORT_ID.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x140:0x160])</tt></t>
            <t><strong>mkey 646</strong>: REPORT_ID_MA.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x160:0x180])</tt> only if non-zero.</t>
            <t><strong>mkey 647</strong>: REPORTED_TCB
The codepoint <tt>&amp;(svn: 1)</tt> SHALL be set to <tt>552(reported_tcb)</tt> where <tt>reported_tcb</tt> is <tt>REPORTED_TCB</tt> (<tt>R[0x180:0x188]</tt>) translated to <tt>uint</tt> from its little-endian representation.</t>
            <t><strong>mkey 648</strong>: CPUID_FAM_ID.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x188:0x189])</tt> only if VERSION (little endian <tt>R[0x000:0x004]</tt>) is at least 3.</t>
            <t><strong>mkey 649</strong>: CPUID_MOD_ID.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x189:0x18A])</tt> only if VERSION (little endian <tt>R[0x000:0x004]</tt>) is at least 3.</t>
            <t><strong>mkey 650</strong>: CPUID_STEP.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x18A:0x18B])</tt> only if VERSION (little endian <tt>R[0x000:0x004]</tt>) is at least 3.</t>
            <t><strong>mkey 3328</strong>: CHIP_ID.
The codepoint <tt>&amp;(raw-value: 4)</tt> SHALL be set to <tt>560(R[0x1A0:0x1E0])</tt> only if MASK_CHIP_KEY (<tt>R[0x048] &amp; 2</tt>) is 0.</t>
            <t><strong>mkey 3329</strong>: COMMITTED_TCB.
The codepoint <tt>&amp;(svn: 1)</tt> SHALL be set to <tt>552(committed_tcb)</tt> where <tt>committed_tcb</tt> is <tt>REPORTED_TCB</tt> (<tt>R[0x1E0:0x1E8]</tt>) translated to <tt>uint</tt> from its little-endian representation.</t>
            <t><strong>mkey 3330</strong>: CurrentVersion.
The <tt>&amp;(version: 0)</tt> codepoint SHALL be set to</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ version-map / {
  / version: 0 / vstr
  / version-scheme: / 1: 16384
}
]]></sourcecode>
            <t>The version string <tt>vstr</tt> is constructed as <tt>dec(R[0x1EA]) '.' dec(R[0x1E9]) '.' dec(R[0x1E8])</tt>.</t>
            <t><strong>mkey 3936</strong>: CommittedVersion.
The <tt>&amp;(version: 0)</tt> codepoint SHALL be set to</t>
            <sourcecode type="cbor-diag"><![CDATA[
/ version-map / {
  / version: 0 / vstr
  / version-scheme: / 1: 16384
}
]]></sourcecode>
            <t>The version string <tt>vstr</tt> is constructed as <tt>dec(R[0x1EE]) '.' dec(R[0x1ED]) '.' dec(R[0x1EC])</tt>.</t>
            <t><strong>mkey 3968</strong>: LAUNCH_TCB.
The codepoint <tt>&amp;(svn: 1)</tt> SHALL be set to <tt>552(launch_tcb)</tt> where <tt>launch_tcb</tt> is <tt>LAUNCH_TCB</tt> (<tt>R[0x1F0:0x1F8]</tt>) translated to <tt>uint</tt> from its little-endian representation.</t>
          </section>
          <section anchor="cmtype">
            <name><tt>cmtype</tt></name>
            <t>The <tt>cmtype</tt> SHALL be <tt>evidence: 2</tt>.</t>
          </section>
          <section anchor="optional-id-block-as-reference-value">
            <name>Optional: ID block as reference value</name>
            <t>If an ID block is provided at VM launch, it is authenticated by an ID key.
The ID block authentication is checked by the AMD-SP firmware.
The firmware will only launch the VM if the authenticated policy matches.
The firmware indicates that the authentication passed by populating fields of the attestation report to bind the evidence to the authentication key(s) <tt>ID_KEY_DIGEST</tt> and/or <tt>AUTHOR_KEY_DIGEST</tt>.
The ID block authentication as reference value SHALL NOT be retained by the Verifier to apply to another appraisal session.
The reference value qualification is meant to be considered valid only for the duration of the appraisal session.</t>
            <t>The Verifier MAY allocate an <tt>rv</tt> for an addition ECT to represent the authentication at <tt>SNP_LAUNCH_FINISH</tt>.</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>environment</tt> SHALL be equal to the <tt>environment</tt> of the evidence ECT.</t>
              </li>
              <li>
                <t>The <tt>element-list</tt> SHALL contain two <tt>element-map</tt> entries
                </t>
                <ul spacing="normal">
                  <li>
                    <t>The first <tt>element-map</tt> SHALL set <tt>element-id</tt> to 0 and the <tt>element-claims</tt> to a copy of the evidence claims for <tt>element-id: 0</tt>.</t>
                  </li>
                  <li>
                    <t>The second <tt>element-map</tt> SHALL set <tt>element-id</tt> to 1 and the <tt>element-claims</tt> to a copy of the evidence claims for <tt>element-id: 1</tt>.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The <tt>authority</tt> SHALL be an array containing <tt>#6.TBD(ID_KEY_DIGEST)</tt> and <tt>#6.TBD(AUTHOR_KEY_DIGEST)</tt> if nonzero. The Verifier MAY add more encodings of the same keys.</t>
              </li>
              <li>
                <t>The <tt>cmtype</tt> SHALL be set to <tt>reference-values: 0</tt></t>
              </li>
            </ul>
          </section>
          <section anchor="vek-certificate-attest-key-triple-record">
            <name>VEK Certificate <tt>attest-key-triple-record</tt></name>
            <t>Each VEK Certificate from AMD's Key Distribution Service (KDS) contains extensions that associate the key to its target environment.
There is no condition on <tt>REPORTED_TCB</tt> to form this association, since the keys will only ever verify evidence that corresponds the the <tt>REPORTED_TCB</tt> they were derived from.</t>
            <t>To allow for certificates to be reissued, the keys associated to an environment use only the <tt>SubjectPublicKeyInfo</tt>.
For consistent comparison, the <tt>$crypto-key-type-choice</tt> encoding is a #6.557-tagged SHA256 digest (<tt>alg: 1</tt>) of the ASN.1 encoding as defined in [RFC5280].
Let <tt>vcek_pk</tt> represent the tagged key identifier of the <tt>VCEK</tt> public key.</t>
            <t>A <xref target="VCEK"/> certificate may be interpreted with <tt>hwid</tt> as the octet-string value from X.509 extension 1.3.6.1.4.1.3704.1.4 as</t>
            <sourcecode type="cbor-diag"><![CDATA[
[ / environment-map / {
    &(class: 0): / class-map / {
      &(class-id: 0): 111(h'06092b060104019c780301'),
    },
    &(instance: 2): 560(hwid)
  },
  [ vcek_pk ]
]
]]></sourcecode>
            <t>Note: KDS may not encode the <tt>hwid</tt> with the octet string type tag <tt>0x04</tt> and length information (definite, short, 64) <tt>0x40</tt> of the x.509 extension value.
If the length is 64 bytes, then that is the exact <tt>hwid</tt>.</t>
            <t>Let <tt>vlek_pk</tt> be the encoded VLEK public key.
A <xref target="VLEK"/> certificate SHALL be associated with an environment with a "by CSP" <tt>class-id</tt> and instance value as a <tt>tagged-bytes</tt> of the UTF-8 encoded <tt>csp_id</tt> string from X.509 extension 1.3.6.1.4.1.3704.1.5 as</t>
            <sourcecode type="cbor-diag"><![CDATA[
[ / environment-map / {
    &(class: 0): / class-map / {
      &(class-id: 0): 111(h'06092b060104019c780302'),
    },
    &(instance: 2): 560(csp_id)
  },
  [ vlek_pk ]
]
]]></sourcecode>
            <t>It is expected that the Verifier will require or admit a trust anchor that associates the AMD root key and AMD SEV key certificates for a <tt>product_name</tt> (from KDS endpoint <tt>vcek/v1/{product_name}/cert_chain</tt> or <tt>vlek/v1/{product_name}/cert_chain</tt>) with the appropriate environment class in order to validate the attestation key certificates.
If using a CoTS <xref target="I-D.ietf-rats-concise-ta-stores"/> tag for trust anchor specification, an appropriate <tt>purpose</tt> for verifying a VEK cerificate is <tt>"eat"</tt>.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-cbor-tags">
        <name>New CBOR Tags</name>
        <t>IANA is requested to allocate the following tags in the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>.</t>
        <table anchor="cbor-tags">
          <name>Added CBOR tags</name>
          <thead>
            <tr>
              <th align="left">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">32780</td>
              <td align="left">
                <tt>bytes</tt></td>
              <td align="left">A digest of an AMD public key format.</td>
              <td align="left">RFCthis</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="new-media-types">
        <name>New media types</name>
        <section anchor="applicationvndamdsev-snpattestation-report">
          <name><tt>application/vnd.amd.sev-snp.attestation-report</tt></name>
          <t>A byte string that is expected to be interpreted as an AMD SEV-SNP ATTESTATION_REPORT.</t>
        </section>
        <section anchor="applicationvndamdghcbguid-table">
          <name><tt>application/vnd.amd.ghcb.guid-table</tt></name>
          <t>An byte string that follows the <xref target="GHCB"/>'s GUID table ABI, which is the same as the <xref target="SVSM"/> service manifest ABI, recounted here.
A GUID table is a header followed by an byte string body.
The header is a sequence of entries described in <xref target="guid_table_entry"/> terminated by an all zero entry.
After the all zero entry are the bytes that the header entries index into.</t>
          <table anchor="guid_table_entry">
            <name>guid_table_entry type description</name>
            <thead>
              <tr>
                <th align="left">Type</th>
                <th align="left">Name</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>UUID</tt></td>
                <td align="left">GUID</td>
                <td align="left">An <xref target="RFC4122"/> byte format UUID</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>LE_UINT32</tt></td>
                <td align="left">Offset</td>
                <td align="left">An offset into the the GUID table</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>LE_UINT32</tt></td>
                <td align="left">Length</td>
                <td align="left">A byte length of the span</td>
              </tr>
            </tbody>
          </table>
          <t>An <tt>LE_UINT32</tt> is a 4 byte byte string that represents a nonnegative integer in little-endian order.</t>
          <t>Note that an offset is from the start of the byte string, and not from the start of the octets following the zero entry of the header.
A header entry is valid if its Offset+Length is less than or equal to the size of the entire GUID table.</t>
        </section>
      </section>
      <section anchor="new-coap-content-formats-entries">
        <name>New CoAP Content-Formats entries</name>
        <t>The content types application/vnd.amd.sev-snp.attestation-report<tt> and </tt>application/vnd.amd.ghcb.guid-table<tt> need Content-Formats IDs to be used in the EAT </tt>measurements` claim.
Requesting 10572 and 10573 respectively.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="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>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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="I-D.ietf-rats-corim">
          <front>
            <title>Concise Reference Integrity Manifest</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>arm</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Intel</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="18" month="October" year="2024"/>
            <abstract>
              <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether or not to engage in secure interactions with it.  Evidence
   about trustworthiness can be rather complex and it is deemed
   unrealistic that every Relying Party is capable of the appraisal of
   Evidence.  Therefore that burden is typically offloaded to a
   Verifier.  In order to conduct Evidence appraisal, a Verifier
   requires not only fresh Evidence from an Attester, but also trusted
   Endorsements and Reference Values from Endorsers and Reference Value
   Providers, such as manufacturers, distributors, or device owners.
   This document specifies the information elements for representing
   Endorsements and Reference Values in CBOR format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-corim-06"/>
        </reference>
        <reference anchor="IANA.named-information" target="https://www.iana.org/assignments/named-information">
          <front>
            <title>Named Information</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SEV-SNP.API" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/56860.pdf">
          <front>
            <title>SEV Secure Nested Paging Firmware ABI Specification</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="September"/>
          </front>
          <seriesInfo name="Revision 1.55" value=""/>
        </reference>
        <reference anchor="GHCB" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/56421.pdf">
          <front>
            <title>SEV-ES Guest-Hypervisor Communication Block Standardization</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="July"/>
          </front>
          <seriesInfo name="Revision 2.03" value=""/>
        </reference>
        <reference anchor="SVSM" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/58019.pdf">
          <front>
            <title>Secure VM Services Module</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="July"/>
          </front>
          <seriesInfo name="Revision 1.00" value=""/>
        </reference>
        <reference anchor="VCEK" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/specifications/57230.pdf">
          <front>
            <title>Versioned Chip Endorsement Key (VCEK) Certificate and KDS Interface Specification</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="January"/>
          </front>
          <seriesInfo name="Revision 0.51" value=""/>
        </reference>
        <reference anchor="VLEK" target="https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/user-guides/58369-010-versioned-loaded-endorsement-key-certificate-definition.pdf">
          <front>
            <title>Versioned Loaded Endorsement Key (VLEK) Certificate Definition</title>
            <author>
              <organization>Advanced Micro Devices Inc.</organization>
            </author>
            <date year="2023" month="October"/>
          </front>
          <seriesInfo name="Revision 0.10" value=""/>
        </reference>
        <reference anchor="I-D.ietf-rats-concise-ta-stores">
          <front>
            <title>Concise TA Stores (CoTS)</title>
            <author fullname="Carl Wallace" initials="C." surname="Wallace">
              <organization>Red Hound Software</organization>
            </author>
            <author fullname="Russ Housley" initials="R." surname="Housley">
              <organization>Vigil Security, LLC</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>arm</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>arm</organization>
            </author>
            <date day="5" month="December" year="2023"/>
            <abstract>
              <t>   Trust anchor (TA) stores may be used for several purposes in the
   Remote Attestation Procedures (RATS) architecture including verifying
   endorsements, reference values, digital letters of approval,
   attestations, or public key certificates.  This document describes a
   Concise Reference Integrity Manifest (CoRIM) extension that may be
   used to convey optionally constrained trust anchor stores containing
   optionally constrained trust anchors in support of these purposes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-concise-ta-stores-02"/>
        </reference>
      </references>
    </references>
    <?line 535?>

<section anchor="sec-corim-cddl">
      <name>CoRIM Extensions CDDL</name>
      <sourcecode type="cddl"><![CDATA[
$crypto-key-type-choice /= #6.32780(bytes .size 48)

digest = [
  alg: (int / text),
  val: bytes
]

non-empty<M> = (M) .and ({ + any => any })

semver-version-map = {
  &(version: 0): version-core-text,
  &(version-scheme: 1): &(semver: 16384)
}
version-core-text = tstr .regexp "[0-9]+\\.[0-9]+\\.[0-9]+"

$$flags-map-extension //= &(
  sevsnpvm-policy-smt-allowed: -1,
  sevsnpvm-policy-migration-agent-allowed: -2,
  sevsnpvm-policy-debug-allowed: -3,
  sevsnpvm-policy-single-socket-only: -4,
  sevsnpvm-policy-cxl-allowed: -5,
  sevsnpvm-policy-mem-aes-256-xts-required: -6,
  sevsnpvm-policy-rapl-must-be-disabled: -7,
  sevsnpvm-policy-ciphertext-hiding-must-be-enabled: -8,
  sevsnpvm-policy-reserved: -47..-9,
)

$version-scheme /= &(sevsnpvm-familyimageid-hex: -1)

$raw-value-type-choice /= uint

$$flags-map-extension //= &(
  sevsnphost-smt-enabled: -49,
  sevsnphost-tsme-enabled: -50,
  sevsnphost-ecc-mem-reported-enabled:-51,
  sevsnphost-rapl-disabled: -52,
  sevsnphost-ciphertext-hiding-enabled: -53
  sevsnphost-reserved: -112..-49
)

tagged-byte = #6.560(bytes1)
tagged-leuint32 = #6.560(bytes4)
tagged-leuint64 = #6.560(bytes8)
tagged-bytes4   = #6.560(bytes4)
tagged-bytes8   = #6.560(bytes8)
tagged-bytes32  = #6.560(bytes16)
tagged-bytes32  = #6.560(bytes32)
tagged-bytes64  = #6.560(bytes64)
bytes1  = bytes .size 1
bytes2  = bytes .size 2
bytes4  = bytes .size 4
bytes8  = bytes .size 8
bytes16 = bytes .size 16
bytes32 = bytes .size 32
bytes48 = bytes .size 48
bytes64 = bytes .size 64

svn-type = uint
svn = svn-type
min-svn = svn-type
tagged-svn = #6.552(svn)
tagged-min-svn = #6.553(min-svn)
svn-type-choice = tagged-svn / tagged-min-svn

svn64-type = tagged-svn64 / tagged-min-svn64
tagged-svn64 = #6.552(uint64)
tagged-min-svn64 = #6.553(uint64)

uint16 = 0..65535

uint32 = 0..4294967295

uint64 = 0..18446744073709551615

]]></sourcecode>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="Y." surname="Deshpande" fullname="Yogesh Deshpande">
        <organization>arm</organization>
        <address>
          <email>yogesh.deshpande@arm.com</email>
        </address>
      </contact>
      <t>Yogesh Deshpande contributed to the data model by providing advice about CoRIM founding principles.</t>
      <contact initials="B." surname="Jacobs" fullname="Bill Jacobs">
        <organization>Advanced Micro Devices</organization>
        <address>
      </address>
      </contact>
      <t>Bill contributed a review and the OID assignments on behalf of AMD.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+08a3PbOJLf9StwnqkZe0ak9bJsq26mVrHlxBu/zrJdN5V1
mRQJSdxQpJak/BjH+9uvHwAJUrIncTK7d1WXqiQUCTS6G92N7kYDlmXVbnui
XatlQRbKntiLzw+PxTyJx0EoxThORP94XwwHV9bw5Ey4WSbTzM2COBKJnMdJ
VnNHo0Teqo4WNKz5sRe5M4DlJ+44s3wpJ6H7u7TcmW+l8tZKo7nlxUkws9Qw
VqNV89xMTuLkoSfSzK95cZTKKF2kPZElC1lLF6NZkKYwbPYwB8iHg4uDWi2Y
J/Q9zVqNxi4AcRPp9sTaUHqLJMge1mp3cfJxksSLObw9l7M4k6J/UZBwlsSe
9BeJHK7VPsoHaO33BJBRF+f9i2HdJLcubmUSjAOZ1EW6mM/DB+FN3SCq1aBB
5N+4YRxJhe086NWEyGKvJx5kCo8pMCqR4zT//TAzf0JLX86zaU90azV3kU3j
pFezRBBBi31bvEXuQTNm6j4gE7n5yziZ9MTbOJ7AbB0d7cEbOXODEJhP7Yjz
f5nQd9uLZzVkbZYEo0VmDPKbLfZlOp0DIcVAv8UTeFf6AIO5UfA7MaQn3GRW
DPdArW1ft/4LfKUBhchHpF6/whv8UwVfNJM+cERkUyl8N3PFLPZlKEYPKJS3
gR9EE+H6t4EnhTuKF5mS2HG8iOjbPAkiL5iHMrU1eW9s8VfXi0dpTtubIAyL
d2Wy+v6tG4FYiOPAS2JAEMdKn6WDQJm4u6AZt4G8E0AVUXF6uC9cEN5JNJNR
lgoQvJGcuuFYxGPULrtWi+JkBsPfShSc84O9TrPVUo87ze2Ofuw2Gz3h+X7I
v3fb7U5PJG6WWm7iTeHlobVvBzIbW/SSlEw1oGds0T/p28gE3wqiMQ+L5BSv
QK/0B8ZHKb/dPzvsEdHKVMB7QaomxQmoCZB+5k5wCg6CZHYHuij6bw7FcC49
0BuPxqHuWsKZfyTAq3kuDiPPpmYp6J5MES/QT/iIlkA07a0t+gpiguiACsnZ
SCai1Wi1GVE3mcisJ6ZZNk97m5t3d3c2WCGUy02cMpiOTd+dbcK7TRltguFa
0BRtyvmDZ2XSm0aAeGjBh3QzNQlJN7e6O92GPffHMNLbd3tvqqyxBkPxdgF8
sd6ByUoAZ7Cle/FstogUDPEmjL2PYoj2w018JYDflEUtu9E2WPTXBZitfxF3
Oq2m4s7wanhc5g4LzdUxPCVMxnHsL0L5jcWj0fj30L7TaO4q2q/2Bu9LtF/J
BLEDWvamwVwMIj9OUomwxXv5INaxw4bYk0nGECWZkff7Q6A2k8nYBbv356lU
w95qmjxzo4Wb/KvYtt1qa4W6OnqWbUex68N/y4w7qjJuX46DKPgTeNQ05erU
y+I/z+gsAAVrsghgXQW5and3rUazYd1qblghccOSBTcscGQsr2AD+F+aDYq5
1UUClstUWplrpeATSHS51GOtBvDAj+JF4OgAnaiDvWwapGu1mmVZsACnWeJ6
Wa1GTiKr9SDykoc5LgdXQZIt3FAZNnEXZNPlBQP4va5WmI0V/mUKa+sM1vRU
4moJXpNMJEyZuHVDMK6kHDRcPEnc+TTwBJAvYO2CmXNDWH7dDBbkK+W6iUhK
PwWnAKbfh5/gZrjzeeIi9L4x9AD8DBoFXA5/gQIC7ocblVzhWyYOxvKmQSTt
2gXwRejZFEq4AUV0AYylVshQsh+AzjUQCSxHNsO6qUGf51ReMZWAsPZyEIrN
3J8F4AnAJH2HpoEQJfiP36XSg5UcXj3VGCvtzoMUeeCmKKTkPcgiyhGzEfAA
H4ZgQI/QRbIBXBWZuql68Au75vwifqN7DDNHY5gT6rlzdxSEIIqAALs+isFZ
yj3Zw5NKSLKvESXgEbNs/fHR8IaenjYEKQTKjhi5qQzhWezt7x/RfCyxnsgz
CGZEM5OrxEcf3M1hPJNiJt0U0CIhwGCFSEVWlAdD9yiKMwEK7uP8mhBRluQf
xF0gkZlU8iCgq5Y3ElVyKhFGMfGaZNDXKC2EcZzEM8IORyuBjFA5QOyOwXvN
pVR1AkYB3oi2Uh83tCuiBo/ACeABNpb32D9FGV+pwdJkMLBLrwzwAdQsZr/Z
FodEKXKNQQOGACmm2GEGHv+9mMdh4D0AuV6gBJtCBJJEzwMHkQXwAQcxJgpg
X+RNgIVe6AYzsP4ZOvagFUqz1vt7w43K3EfuCEIN0Hv4J3TBSnAkUjBKoSSj
Cc0AiQ/3EuNFApgBe5AV3CMG066owVh1b1jCIK1yWYkeEeiMQ3eSWjN37iBn
8jmjjxP0RDUuyPJpjL9DN8P5JvukjCXIJXio/1hIBGLIYFmgSgN/zxaYVh4U
ecubxrCQrkBj+K5vtXc6EJxOEB+YBZcMdsC2VckeCWV/PocRgnuMeCdBBpZ2
CBGUm8GUkYw8PhpxydOTjXYQxDW6RWOqbVrhAqQ1wh8HwzA/FWvHl8OLtTr/
L05O6fl88F+Xh+eDfXwGXI+O8gfdYvju9PJov3gqeu6dHh8PTva5M7wVlVfH
/d/W2FyunZ5dHJ6e9I/Wcs3P1w3kP7BthNoFixgwj2LKNLfdZC3e7J2JZkd8
gOW41WzuXtMTRorX4m4qIx4mjsDj5Z/A+wfUVekmpLUYsrpz5CpacLAe0/gu
EiCL0mY+JdLFBRIwg8gVMPMVUmN3BgoEUMgC45QCkrNUGRjCrWJvCRUw1STe
HZ45K49ZceJwvPQBjMs9fqWYn4md80QCEmwyTSvHA2EsjCAOAhn6uaU1LafT
v7gYDC/6yPCb88HZ6fmFQ0wmQ5Qowh6wX5CoMB1eYjhM6+4HQ8quSchM6KbT
cM7+Su1F4516U7A4S4ApgeAGUVqySmQKVS7LSsBvuEWrB03HwWSRKIPBJJM6
G9YyTz6E7iLypsud3By9q2Ptu2C6LpdE1u08MVFdAxDE8qKUOwJuSouHkUu0
yUm0hmfoTRruIuXgUgiO0eXuA71zN0HvHcRHlrwCRogI8VHHXTLkSCdqygSZ
hE3n6PoWDkZuvQSZ+DFwgxAmyEB0zlZKOZmaCM8BuZ/GCoATwgJScf9Wea5A
8eMjxnNPT0jzy5EfU4/mCRcNHARXS7KZz8qaJoosKOpgAhPls/l0tRX3KahB
OUKPCublToL2u8xNLV1i7mYgJcAKGabsaCu2kGDhggSYR5qmowpNzwRlRBNa
G7AREUvR88TkNCM1enYqJCki0qmLijuS2Z2UvHKgGIDAhfHC10kFlCyUm6TC
Jpk7lWTDXAESYyku4aMKrsQdBBTzKkLAtAjdCwUBh6VQyVc2RLCMA5uuOIId
BLTEu5QJgLCDQlu0I2VDwqpyxqqiwin1SWlwyUdCA+a5SaIsIcwNgp6hypDH
hqYrRU9aKaGy6nr1BmHlbCWvP1INDysU2vh8wY6VvSWvRvkqRpQg4lVuK7q5
0Oofi8CwYiWfSQ1T8lidzJ30VJRch1C601vaJXDA4JMNk/oNrfr//Oc/hTeK
YQoDd1LbFNwHvCCxKR5hAtQbW4++Kdo98YEi9XZrfa067ubSuGsb0PiaINm2
LTZrTzhm7bEnviujw7mKX9ZW2X3dRAtXs162jmviCWWiLBQXlEkArcrNOk/j
yjWNjRRaVNBt8EBhoCyOfT3DuKEh+rDiBpnkZh9UBvmaVnlt17w4DGVu7PbQ
EVZOKxnCIEOpKcx87l4v46qiGGICCA6atew55HUAgxEeIAH67VMCmQa+www7
OTPJgrTdUriOVZ5ZSTeIfIbpHMHrAwX8novJdtAXcIDJjXIjcv4dHvnmcN+p
Gz9ujvsOuUyw8EXW7zKJ4eveu8MzbCjWkQZK0NVR3Zy9ofke80927S3YK7W6
GGOQoagMg/SRxso5+gQJLia8+PtmbIThTmZSVzg5YGi0IWdZQ2tlOAHa7yNv
J5QTV22tlCKfWj96MI0Lwr86zodLi2AMwy22ZjSPBnXIjDJxigDlI2Ow6KIA
+eSLA6XmgGBP5qGeRD8YU4CYIeHk/gE+PKEZxgmYjjEaQaSWprzam+oGqCoh
eFD5uHIoWRnqGSgupsB+EuIN7vUF8x6tIo4BSJkZzSuSY2er21hXIrPh2Ko/
iMqXdB/q3qzvWtCClPVAkv5lRfTuoPQ5wkj71UGMA1g2FqlynPrDE7spDvtb
Q+A3yQlEzvAAzrPWTLCFE+lbmAZInYrDVwdP4A7cg6TObTVKHByNJL29vDiw
dnLIWlIzCBbRPNFgTBAx3Ap8JzcLy/aj0IbS0srWilGlrTVlnMCXT8FJwZg0
Xk494Xi98mQ27bbdtZt2B/62txsd+NkU606z2Vyf/tjoNnZbI/i32eg0mrve
9k6j3Wj+uOFsmBO6AkTrZRAtAsFMoI1N4ADGLkJHoeYCrEx3VWQcCtkC8kcg
hIGlDxaRiMJGX2I4hv4omaTB+RCsrGjVVYLPx8xElLHjM+aYyfV9diJ063Ye
AnKEnhUTRrkFwjTBbd9IyNk8e6jD2oGGiRuRlKLDSD4aoqGRCsBAeWLvzem5
GAUR7ivkkgLuArnzWj5oz54gjRPJxOhwIoB4VKVuKViDLocKyeHh25PDk7c3
7we/OTBEjv2KQAUgN9Ga0O4DIID6g7pSZw8vKwupOTkjlp8VnseyZiv/Q/NO
vSneBX4Pnhvil1/FdyBHL0oedHwicNpcYNem6mraHOWfLHkTK1xucyFgzo/z
QBoWzhV8o7QlbhWT0zYD19gR0QJ3XZWXgGSqtHo8TwKM5BxjGIsXBpYkfrar
OWpOVUaxiOTd852N7HXuWnz//erWVtEYHKXY+yjBOzkI3YkVBh+LTGSCoxvr
JMFM3DuGpBbx/DcATj86pXyvJgh5X2b+MqdLgT7mZMC1WfKMCCcJIWaRmYB2
iu80Wh7osxnhdxioYJ431JS40efNCPxOHnh19PJUGvG3PGZezUBDQZwACswx
Oe+soErdKUVCj5SS3WhRIDRD2Qn0GqzAjsHrjO+otKPUSoVc9DiPU/IetFlU
Eql0HOS0+EFYqgHOP4RxbxpcO+hQ6N0DcCiLRPQzJoKy4WmIYSGts/F4jBlh
J4zBMEVeuEgxoAXinWmA4qjeqGFDuQii7MShPQBas2B49J1Qe5RB4xFoYawL
CMeKpFqe+3ONZEVWLMkIDpx8JRKU/5AqJ+ecsO27C/xsCqL400/IYtH46aee
NvF2bcAJeXaJnR/Wc6Huic5GT62uFtPQbjkFmCaCeXsJYnozvPpsQORRdAww
LQRzdnp0uPfbF8HYcZjIeK78SLM5KWRPbC33oTw0x61KdEqbEFrXsX8unRrV
NqJ60D8+PPoNrOsXYdvsGiR3EM7hcf/t4KvAbNE8Hp8dvW4ScYnsX1yeD276
R29PRfoxmM+ljzBBURr3jXan17hv74C2kKOJ+6VqFU919l0VwvG2fYFYF4Hs
XZ6fD04ubi723izjl95G4DIBZvBA+wTCpvzJbdTt0G8nB7ZN8nHUvzg4PT++
OTw5OP1fLCb9y4t3p+foddwMTkyWGh/2D9+CzrDlKXt4UsfSwbjI2gcqZaJM
YBPCiJ+O+8P3N7TIA0BzGLXwvxZ4w1ZyoVwnEzSaMsOt+TFlx4VTc8rVzP1z
04biJH4E/8qQjw6ZIBUm7vcv+l80pV3TfHQ7ZIeOB/0hiPIxSNwyLN5iSnui
BZA+fNiuC7ZCO9fXJUhkit6dDp/D6XPhkJ2A6LeY7dfD6qyUntfD2zI4/4XG
BwyHAahbAgSR/lfA2i5gDfbRYrxoMLSJMMnaIek/uwRMwEB/IWUlSLsFpOPT
/a+AtNUoIA0vBmevhNNut3YM1X69pgAgpu30+PjwQjG694WcbrfbTNYiwXSJ
SvovI6WSmz3RQEhydltk08m9LADutnm5iGezAKyG/y1AdoljR/3Lk713f7wA
GVRWffU8u3mhfGiVUXLy9cDilJWVSA/cXeeFrGwOi4Ji8KiTjB22uAhoI9oe
Cas7bBOVScRMfxRTTVju1eelG+7zWCHRuf3HKi855x0rYIk7kTpKMbMLDsXS
5TgaVwhKnDyTveIFoYhodUIjTwyh04zc+4PEiv3CGHnuUwHHINrS+wjlhFu+
xDml9ZLpwLTtct8puMoblPYF58bBXyrzoJJrtHNjpNaK0FP5BZhPXkoFwaNj
r+Zn88/mZ+sL+VkAX5V+zKvndDrG9XGzTSdpXA/FjXYrY/ANMbFr6XKAZBEW
8XAp6iTlReimSM/cjxCHL9I8yV3EhTOIhfTmrcrklfZzHV9666MNpxQjcYQF
fhBu5GJR0AzknwMuaBdxoAro/XVxn7l5fAlj64IlzC6QJ6k6hUGGiXpygMz6
DLMNqhpISaT945MYy0T7hqw0HF3HlCWSQ3SMYDEwpL0bnOFC+8HquRBae5zn
mOFGLQ5jlPuQpYb4Gg0h2EBljn5YpxY90QauYJXUPAaUl+TILRUO5RFowXlz
A5wZ7wRUNmruw2MKEjeWJGbL1P4ew8cTMbbule/Uf2Z7mMzQ/dzGvhwtJs4S
gZSCThZAVz4D6Pk2d2kuOAh1nguUOROieVddeJcHI/2hSKrR6OG/neuNF8Ln
DjtsXzVOh8bZKY1Tiq93vmaQnhplB0dpNq43XhFafdsAvNn9BvQ0aXZajRLX
KiH6NxmoRQO1ywMZQfxXSYAao81j5KL2rwzyl9BWTtYqhLda6x67kDeZNyqW
XOMl74ExlihynQZgWc5lOpjPcHh5RrsO5icDrweLBd2o4kTZL2YUXq90HeJ4
J1e6/08BvDYF8Po52KI52C1r1qrMwNIQRti8YgCKo2mEXRphr3FdTRmUEgav
Br9H4AdL4FdlEl4aRIX+BHOAMJtNglka+3PSC6+lpEnWtNnhUbWAlXVinZUa
VEb8IJrOhpLp53MUrxaMJilns4uC8XLq4vVDdGmIHVoONb26YsR+McfxhfaS
9yKkXzaY5ltlMY0xHMVswI+wBEO/8U1s6MqMy+uZuLND6O2aTNSb0OuMkVAY
OWWXisXHzUQIEUVGO9YvpXK+AsVdQrH/TVFczhF9BYJ9QvDNt0RwKfn0evT6
JIGDkp6UF7GSXWgxUo0/yF99udeh80wVv8N8/YIesVEdfDM9ei6fpsI2I+f1
QuC2XH9g5MXy2oMCFv4AD9x8a3E1OhUSAPe67Z2OKh5ATHSpogprHeytijtU
QKgSaxh5M59AT8SP9o+ieLO79KYcqDyfCfw/z4zBEun7S2/2KsxYzmF+oaRz
sXBZzIt3LOMF+FzCD0jCD75ewjnR483Udh4Xe/EvI8mkfVJwLJB87nWqIkr0
fcSIjsa7aTVSpIQaDJw34coRhOejMbs6VvXSdVUghad+MUvhEUF8jBM6f5Sq
zKEYq2hIRQYwtVPpfVwqPyuKTrleRl11UBSpqnptyhwes6ctK2ioc1iUy9Gx
Xw5JVSXJ/KihrOI2dympjVdixPNFyBVM49IRmBX1DHjOJVDFInlQoGvlygMA
d9bTDeGUnFCqf9nEUpAl19F5mZfL0yjyM1UoD1jnYEYRecKRC4mAp1TCwvUT
+YlDkPu0MBXVAaigbGzMZn5kcETZcKyOV5W2gQqKdBmRXzlbs2LEcl4Uc1Ju
CJTzcX3wz265sBHLbnyueRWDvYvl83BVRoGGD0/ObpSGHhyeHA7fkYFYyuQa
6kTFc3m9UqmNoiCfbkDCzoHxOWQrDNIcmjqGJLK7uGiQVwYFdA3Kz0KJK3gN
5TYMg4pk9HvMXwNmjbxMKf9CZyw5NYSlwfOHJWS5BVcfFfDAejt2jkYqsar4
s/Fofks8mk7OS75bIMgejGnByU8S90EzldaN77r2xZv99ZJibajKMvVtSbvg
O4cXFF2IZdHzfVVIrsopcytAKWVQ5jRHdMkW68Wj2EXiejBkszLMV4P3pXsV
HDYufNyzshE2wFq1agc+z3m8/2NKVzXsB2l+j05+WGf9/f5wozgGZ1T38bHU
NI09ql1DuuhETkzr0XJ1N9mDRHKKvSg6x9MqFfcOQNDpV0qF6BGo1pkLWtVQ
qWHcsQKac2MPhhFdqkCeSrNGPh8Pq/HvJJUZFuea0JrEZD/uSMaMnaZU2atE
UtWrXy9Qyhmi6/vMw3+0g4LoclnsYvR36WVnixGsOjABh9E4drjsmwxhmlEN
PJXsBmkc1f/gVG9etUuV2Fh9urVtqYJskKvWVlef71133HDSo3Bfn1qgKvQc
gls6OYonUrZaEFXbtSNU3ltPfryZf3QqRlMNRce5ipMeulIZd+scMSdieZmv
9cUHfHtd2sSbgWZWTtly/RxvAKpzFTE4dpmlvD5eWUia/9veauwaG4Grtv8A
RtUv/SCeKxMW4od1rlKnre5VVcN5E7aC0OrlLdU69XqqK+hF3TCmjPKNz5pq
8kEodovr2jVXEPPOFd49g8zC/Sp13J4YzXzKN4yIU9o/puoumCfhYGzH9i2U
0QTamldhrKu7SWQdTyAnWR3i9w3s02nka9d9hdOqtlPVfGugKfTkTHpewZ0f
2IPOrpcphEEcWLZCJVvq6AJT5nMhuCk9KDxHVeEpjHyhhnyasKyI6oTh2ogO
DKyZNeV8cFXtw+qyWtyNK++cKC4YJytgKMdL5zcIRLH7c0Vy698qkq3PEEkm
zBTKsCKUfAmEvJ/ThmDhI+dLoqrupQOIeDLJ9SGypJsvFimeiwYzllQWlTQ/
Np7EIOVoWXB6VFEI/S5ZZS7fddTlJTdY0ounwHAWUFsgOFLhGqrU5m1z89Fs
+rSJwG7o+kA+O4VEvtxso1A0s5DblDWVljfutiHfVq+Z1dS8SRCp0yLl+uu9
+GKIZ+v1LUBPT6TJ5B2bLCxd31RfKjGfL5J5nEp2hHnFZPhXXE2hVQkj0jXp
ZmtUikP30+E1DuSfu+rmBnBCTuQdHx25cCfwhprR8e1/LPj+lywufPDyBjZg
n+qi8bUcxhr0naAn8gDE/gddi0dKga3pYOknbAZi+kns45UEh5mcwfMw341/
8c8n4yaZTwAK7+vBt5b+U3r+A1BGJwDVboE2wVtHWQhs0Tdv1OAT0YUN07cG
YcPHxx/wJieY0090gjUnWR9e7dNxIOISvl57yrk/k2Av+EobrplyMDZT8795
G/l0y5W64NM2xM3iANTBhdgoec9NdKHLq+69qFy7tFxkZb+AzWTqjWy8Pgto
HIWYkehHyziwqLAReHzEy/yensBXfXuJp8voppb+m0N9oE6tKbpaA58/4A13
13hbGLmyICDBGCeDeqFrvIiQGL5eo2/CJQ9qyndtMBZ5ksLEchT7Kl0xLe7l
UIcu+ESoCs/Kt4Q8PiLpNzTUDR3tQF2mLTsjG4KXgWBkoQ9/9MeZOuJZ/sJX
k+BhjIdSckKhpDEIIl/eU4Ub6xB6Ap/ECbLrE972qe/10GqhNYF+O5eXeKjw
E/PoE94e8EFdh3ldup7okr5jj6PBzeXhyUW7hd1O+YwGdVTnNajWTjvkBuuX
Ox+xL4HaREMp30LHUnM3UkpT5arWneX3SLxxlwlqE2BmDkszya7LsmCWapkg
AIzwbBKeOtEnPmCSywk5sv2q6EgtcgUnjJq20nGZ0jkUfeZ4dVPy8lLTuMJL
Q0b0dSQkEyjshnTQ7Qucb4F4FoM3nq6fj3InLpQpSRYSUs5rpMHveVUY+vyJ
OZl2sUTEfbxMgW7Zsw5IVtI8d6HPNWXF3VxfaMI4UP8cS0NVFUuY4M0MbOWK
e7+kGPQvSsVxYNQp52DXznl5Q0Y3G1vbLRofn9pYT4NmE6QhfFAXwo1c7yOu
oVxXOihCaLo+h++F46sN6N4c5QnidbLPxHpi8xeM72jFWWe1t2kiOjsbtZpa
cn6h2xQo0FtHp2eTDvySq3eL2VzqB95bDTdI6cDofx7/Cr3Wjzf4AMj6o/iZ
zuX/8iv99wSwl0t9oQf6nJWSYN0Ab4uxcNy62SbP6WPR7w/rDFQl9/Gc5FJv
GCQDRRA2+AawLIm1Dw1r9/rnv/3Nrjys1Wrff5/XzRXnC8UmsOyHdbzjWd6C
EN3OLE72Wukss1y28D1hNesrmsyCCbs8ljtBqSmat1Y1p3o3o1F7VSN06sA8
8KFHC5MC0LKzqqV3HxrAtlYiKGeWK1MLQnzrPsPyPPKysX13VfvEnYfWDHxG
ayQh2khRM7Dx9srxg/kUy6PvM2tK1zznPfm6NOy4s3IUdWAQCdu2bWu3XgMJ
+r4sA4LmJe9K91g9BDNgNKjsVN7jnGCvopatoge4D/KZk4535tB8F4h3duvl
z1k6MwnbalS+S88jduut/ryttdWsNCUuG9zdalUaLHPWGLhdAVYws9lsATc7
u8hNIygVv+gTx3w6baNWOWlWadCpNIBAvdxgZ6NWOicIHu1zELj9UoMKBECh
imT3j1q0W+UWgGWlRRfQYGD4xbSGTX7fqr5v1TRB5fedmqaj/H5Hwe9W4Xdr
Guvyh7YeYac6ggJFvDY/dDtgW/XxOyXU8Bse9dsaeIdW5ZViDL+lhF8L9yFz
jhVd6GN7Xb3YyMfSivSLMGBtinJ/Qk0dzCi1BDKqbYGQ0vccLxaxKmpFi3be
ooYPxOyGbXfhyxa/IjbDq05rt7Pb3W7tqvcEA943dzqd7nan09hubzd2t7aa
3eYWraW1/wHw0lPgTmEAAA==

-->

</rfc>
