<?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.29 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bradleylundberg-cfrg-arkg-07" category="info" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="ARKG">The Asynchronous Remote Key Generation (ARKG) algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-bradleylundberg-cfrg-arkg-07"/>
    <author fullname="Emil Lundberg" role="editor">
      <organization>Yubico</organization>
      <address>
        <postal>
          <street>Gävlegatan 22</street>
          <city>Stockholm</city>
          <country>SE</country>
        </postal>
        <email>emil@emlun.se</email>
      </address>
    </author>
    <author fullname="John Bradley">
      <organization>Yubico</organization>
      <address>
        <email>ve7jtb@ve7jtb.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="22"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>KDF</keyword>
    <abstract>
      <?line 142?>

<t>Asynchronous Remote Key Generation (ARKG) is an abstract algorithm
that enables delegation of asymmetric public key generation without giving access to the corresponding private keys.
This capability enables a variety of applications:
a user agent can generate pseudonymous public keys to prevent tracking;
a message sender can generate ephemeral recipient public keys to enhance forward secrecy;
two paired authentication devices can each have their own private keys while each can register public keys on behalf of the other.</t>
      <t>This document provides three main contributions:
a specification of the generic ARKG algorithm using abstract primitives;
a set of formulae for instantiating the abstract primitives using concrete primitives;
and an initial set of fully specified concrete ARKG instances.
We expect that additional instances will be defined in the future.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bradleylundberg-cfrg-arkg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/Yubico/arkg-rfc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 159?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Asynchronous Remote Key Generation (ARKG) introduces a mechanism
to generate public keys without access to the corresponding private keys.
Such a mechanism is useful for many scenarios when a new public key is needed
but the private key holder is not available to perform the key generation.
This may occur when private keys are stored in a hardware security device,
which may be unavailable or locked at the time a new public key is needed.</t>
      <t>Some motivating use cases of ARKG include:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Single-use asymmetric keys</strong>:
Envisioned for the European Union's digital identity framework,
which is set to use single-use asymmetric keys to prevent colluding verifiers from using public keys as correlation handles.
Each digital identity credential would thus be issued with a single-use proof-of-possession key,
used only once to present the credential to a verifier.
ARKG empowers both online and offline usage scenarios:
for offline scenarios, ARKG enables pre-generation of public keys for single-use credentials
without needing to access the hardware security device that holds the private keys.
For online scenarios, ARKG gives the credential issuer assurance
that all derived private keys are bound to the same secure hardware element.
In both cases, application performance may be improved
since public keys can be generated in a general-purpose execution environment instead of a secure enclave.</t>
        </li>
        <li>
          <t><strong>Enhanced forward secrecy</strong>:
The use of ARKG can facilitate forward secrecy in certain contexts.
For instance, <eref target="https://www.rfc-editor.org/rfc/rfc9052.html#name-direct-key-agreement">section 8.5.4 of RFC 9052</eref> notes that
"Since COSE is designed for a store-and-forward environment rather than an online environment,
[...] forward secrecy (see <xref target="RFC4949"/>) is not achievable. A static key will always be used for the receiver of the COSE object."
As opposed to workarounds like exchanging a large number of keys in advance,
ARKG enables the the sender to generate ephemeral recipient public keys on demand.</t>
        </li>
        <li>
          <t><strong>Backup key generation</strong>:
For example, the W3C Web Authentication API [WebAuthn] (WebAuthn) generates a new key pair for each account on each web site.
ARKG could allow for simultaneously generating a backup public key when registering a new public key.
A primary authenticator could generate both a key pair for itself and a public key for a paired backup authenticator.
The backup authenticator only needs to be paired with the primary authenticator once,
and can then be safely stored until it is needed.</t>
        </li>
      </ul>
      <t>ARKG consists of three procedures:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Initialization</strong>:
The <em>delegating party</em> generates a <em>seed pair</em> and discloses the <em>public seed</em> to a <em>subordinate party</em>,
while securely retaining the <em>private seed</em>.</t>
        </li>
        <li>
          <t><strong>Public key generation</strong>:
The subordinate party uses the public seed to autonomously generate a new public key
along with a unique <em>key handle</em> for the public key.
This can be repeated any number of times.</t>
        </li>
        <li>
          <t><strong>Private key derivation</strong>:
The delegating party uses a key handle and the private seed
to derive the private key corresponding to the public key generated along with the key handle.
This can be repeated with any number of key handles.</t>
        </li>
      </ul>
      <t>Notably, ARKG can be built entirely using established cryptographic primitives.
The required primitives are a public key blinding scheme and a key encapsulation mechanism (KEM),
which may in turn use a key derivation function (KDF) and a message authentication code (MAC) scheme.
Both conventional primitives and quantum-resistant alternatives exist that meet these requirements. <xref target="Wilson"/></t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="notation">
        <name>Notation</name>
        <t>The following notation is used throughout this document:</t>
        <ul spacing="normal">
          <li>
            <t>The symbol <tt>||</tt> represents octet string concatenation.</t>
          </li>
          <li>
            <t>Literal text strings and octet strings are denoted
using the CDDL syntax defined in <xref section="3.1" sectionFormat="of" target="RFC8610"/>.</t>
          </li>
          <li>
            <t>Elliptic curve operations are written in additive notation:
<tt>+</tt> denotes point addition, i.e., the curve group operation;
<tt>*</tt> denotes point multiplication, i.e., repeated point addition;
and <tt>+</tt> also denotes scalar addition modulo the curve order.
<tt>*</tt> has higher precedence than <tt>+</tt>, i.e., <tt>a + b * C</tt> is equivalent to <tt>a + (b * C)</tt>.</t>
          </li>
          <li>
            <t><tt>LEN(x)</tt> is the length, in octets, of the octet string <tt>x</tt>.</t>
          </li>
          <li>
            <t>The function <tt>I2OSP</tt> converts a nonnegative integer into an octet string as defined in <xref section="4.1" sectionFormat="of" target="RFC8017"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="arkg">
      <name>The Asynchronous Remote Key Generation (ARKG) algorithm</name>
      <t>The ARKG algorithm consists of three functions, each performed by one of two participants:
the <em>delegating party</em> or the <em>subordinate party</em>.
The delegating party generates an ARKG <em>seed pair</em> and emits the <em>public seed</em> to the subordinate party
while keeping the <em>private seed</em> secret.
The subordinate party can then use the public seed to generate derived public keys and <em>key handles</em>,
and the delegating party can use the private seed and a key handle to derive the corresponding private key.</t>
      <t>This construction of ARKG is fully deterministic, extracting input entropy as explicit parameters,
as opposed to the internal random sampling typically used in the academic literature <xref target="Frymann2020"/> <xref target="Wilson"/> <xref target="Clermont"/>.
Implementations <bcp14>MAY</bcp14> choose to instead implement the <tt>ARKG-Derive-Seed</tt> and <tt>KEM-Encaps</tt> functions
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameters
and sampling random entropy internally;
this choice does not affect interoperability.</t>
      <t>The following subsections define the abstract instance parameters used to construct the three ARKG functions,
followed by the definitions of the three ARKG functions.</t>
      <section anchor="arkg-params">
        <name>Instance parameters</name>
        <t>ARKG is composed of a suite of other algorithms.
The parameters of an ARKG instance are:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: An asymmetric key blinding scheme <xref target="Wilson"/>, consisting of:
            </t>
            <ul spacing="normal">
              <li>
                <t>Function <tt>BL-Derive-Key-Pair(ikm) -&gt; (pk, sk)</tt>: Derive a blinding key pair.      </t>
                <t>
Input consists of input keying material entropy <tt>ikm</tt>.      </t>
                <t>
Output consists of a blinding public key <tt>pk</tt> and a blinding private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t>Function <tt>BL-Blind-Public-Key(pk, tau, ctx) -&gt; pk_tau</tt>: Deterministically compute a blinded public key.      </t>
                <t>
Input consists of a blinding public key <tt>pk</tt>,
a blinding factor <tt>tau</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of the blinded public key <tt>pk_tau</tt>.</t>
              </li>
              <li>
                <t>Function <tt>BL-Blind-Private-Key(sk, tau, ctx) -&gt; sk_tau</tt>: Deterministically compute a blinded private key.      </t>
                <t>
Input consists of a blinding private key <tt>sk</tt>,
a blinding factor <tt>tau</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of the blinded private key <tt>sk_tau</tt>.</t>
              </li>
            </ul>
            <t>
<tt>ikm</tt> is an opaque octet string of a suitable length as defined by the ARKG instance.
<tt>tau</tt> and <tt>ctx</tt> are opaque octet strings of arbitrary length.
The representations of <tt>pk</tt> and <tt>pk_tau</tt> are defined by the protocol that invokes ARKG.
The representations of <tt>sk</tt> and <tt>sk_tau</tt> are an undefined implementation detail.  </t>
            <t>
See <xref target="Wilson"/> for definitions of security properties required of the key blinding scheme <tt>BL</tt>.</t>
          </li>
          <li>
            <t><tt>KEM</tt>: A key encapsulation mechanism <xref target="Shoup"/>, consisting of the functions:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>KEM-Derive-Key-Pair(ikm) -&gt; (pk, sk)</tt>: Derive a key encapsulation key pair.      </t>
                <t>
Input consists of input keying material entropy <tt>ikm</tt>.      </t>
                <t>
Output consists of public key <tt>pk</tt> and private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>KEM-Encaps(pk, ikm, ctx) -&gt; (k, c)</tt>: Derive a key encapsulation.      </t>
                <t>
Input consists of an encapsulation public key <tt>pk</tt>,
input entropy <tt>ikm</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of a shared secret <tt>k</tt> and an encapsulation ciphertext <tt>c</tt>.</t>
              </li>
              <li>
                <t><tt>KEM-Decaps(sk, c, ctx) -&gt; k</tt>: Decapsulate a shared secret.      </t>
                <t>
Input consists of encapsulation private key <tt>sk</tt>, encapsulation ciphertext <tt>c</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of the shared secret <tt>k</tt> on success, or an error otherwise.</t>
              </li>
            </ul>
            <t>
<tt>ikm</tt> is an opaque octet string of a suitable length as defined by the ARKG instance.
<tt>k</tt>, <tt>c</tt> and <tt>ctx</tt> are opaque octet strings of arbitrary length.
The representation of <tt>pk</tt> is defined by the protocol that invokes ARKG.
The representation of <tt>sk</tt> is an undefined implementation detail.  </t>
            <t>
The KEM <bcp14>MUST</bcp14> guarantee integrity of the ciphertext,
meaning that knowledge of the public key <tt>pk</tt> and the domain separation parameter <tt>ctx</tt>
is required in order to create any ciphertext <tt>c</tt> that can be successfully decapsulated by the corresponding private key <tt>sk</tt>.
<xref target="hmac-kem"/> describes a general formula for how any KEM can be adapted to include this guarantee.
<xref target="design-rationale-mac"/> discusses the reasons for this requirement.  </t>
            <t>
See <xref target="Wilson"/> for definitions of additional security properties required of the key encapsulation mechanism <tt>KEM</tt>.</t>
          </li>
        </ul>
        <t>A concrete ARKG instantiation <bcp14>MUST</bcp14> specify the instantiation
of each of the above functions.</t>
        <t>The output keys of the <tt>BL</tt> scheme are also the output keys of the ARKG instance as a whole.
For example, if <tt>BL-Blind-Public-Key</tt> and <tt>BL-Blind-Private-Key</tt> output ECDSA keys,
then the ARKG instance will also output ECDSA keys.</t>
        <t>We denote a concrete ARKG instance by the pattern <tt>ARKG-NAME</tt>,
substituting for <tt>NAME</tt> some description of the chosen instantiation for <tt>BL</tt> and <tt>KEM</tt>.
Note that this pattern cannot in general be unambiguously parsed;
implementations <bcp14>MUST NOT</bcp14> attempt to construct an ARKG instance by parsing such a pattern string.
Concrete ARKG instances <bcp14>MUST</bcp14> always be identified by lookup in a registry of fully specified ARKG instances.
This is to prevent usage of algorithm combinations that may be incompatible or insecure.</t>
      </section>
      <section anchor="the-function-arkg-derive-seed">
        <name>The function ARKG-Derive-Seed</name>
        <t>This function is performed by the delegating party.
The delegating party derives the ARKG seed pair <tt>(pk, sk)</tt>
and keeps the private seed <tt>sk</tt> secret, while the public seed <tt>pk</tt> is provided to the subordinate party.
The subordinate party will then be able to derive public keys on behalf of the delegating party.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Seed(ikm_bl, ikm_kem) -> (pk, sk)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        ikm_bl    Input keying material entropy for BL.
        ikm_kem   Input keying material entropy for KEM.

    Output:
        (pk, sk)  An ARKG seed pair with public seed pk
                    and private seed sk.

    The output (pk, sk) is calculated as follows:

    (pk_kem, sk_kem) = KEM-Derive-Key-Pair(ikm_bl)
    (pk_bl,  sk_bl)  = BL-Derive-Key-Pair(ikm_kem)
    pk = (pk_bl, pk_kem)
    sk = (sk_bl, sk_kem)
]]></sourcecode>
        <section anchor="nondeterministic-variants">
          <name>Nondeterministic variants</name>
          <t>Applications that do not need a deterministic interface <bcp14>MAY</bcp14> choose
to instead implement <tt>ARKG-Derive-Seed</tt>, <tt>KEM-Derive-Key-Pair</tt> and <tt>BL-Derive-Key-Pair</tt>
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameters
and sampling random entropy internally;
this choice does not affect interoperability.</t>
        </section>
      </section>
      <section anchor="the-function-arkg-derive-public-key">
        <name>The function ARKG-Derive-Public-Key</name>
        <t>This function is performed by the subordinate party, which holds the ARKG public seed <tt>pk = (pk_bl, pk_kem)</tt>.
The resulting public key <tt>pk'</tt> can be provided to external parties to use in asymmetric cryptography protocols,
and the resulting key handle <tt>kh</tt> can be used by the delegating party to derive the private key corresponding to <tt>pk'</tt>.</t>
        <t>This function may be invoked any number of times with the same public seed,
using different <tt>ikm</tt> or <tt>ctx</tt> arguments,
in order to generate any number of public keys.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Public-Key((pk_bl, pk_kem), ikm, ctx) -> (pk', kh)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        pk_bl     A key blinding public key.
        pk_kem    A key encapsulation public key.
        ikm       Input entropy for KEM encapsulation.
        ctx       An octet string of length at most 64,
                    containing optional context and
                    application specific information
                    (can be a zero-length string).

    Output:
        pk'       A blinded public key.
        kh        A key handle for deriving the blinded
                    private key sk' corresponding to pk'.

    The output (pk', kh) is calculated as follows:

    if LEN(ctx) > 64:
        Abort with an error.

    ctx'    = I2OSP(LEN(ctx), 1) || ctx
    ctx_bl  = 'ARKG-Derive-Key-BL.'  || ctx'
    ctx_kem = 'ARKG-Derive-Key-KEM.' || ctx'

    (tau, c) = KEM-Encaps(pk_kem, ikm, ctx_kem)
    pk' = BL-Blind-Public-Key(pk_bl, tau, ctx_bl)

    kh = c
]]></sourcecode>
        <t>If this procedure aborts due to an error,
the procedure can safely be retried with the same <tt>(pk_bl, pk_kem)</tt> and <tt>ctx</tt> arguments but a new <tt>ikm</tt> argument.</t>
        <t>See <xref target="long-ctx"/> for guidance on using <tt>ctx</tt> arguments longer than 64 bytes.</t>
        <section anchor="nondeterministic-variants-1">
          <name>Nondeterministic variants</name>
          <t>Applications that do not need a deterministic interface <bcp14>MAY</bcp14> choose
to instead implement <tt>ARKG-Derive-Public-Key</tt> and <tt>KEM-Encaps</tt>
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameter
and sampling random entropy internally;
this choice does not affect interoperability.</t>
          <t><tt>BL-Blind-Public-Key</tt> must always be deterministic for compatibility with <tt>ARKG-Derive-Private-Key</tt>.</t>
        </section>
      </section>
      <section anchor="the-function-arkg-derive-private-key">
        <name>The function ARKG-Derive-Private-Key</name>
        <t>This function is performed by the delegating party, which holds the ARKG private seed <tt>(sk_bl, sk_kem)</tt>.
The resulting private key <tt>sk'</tt> can be used in asymmetric cryptography protocols
to prove possession of <tt>sk'</tt> to an external party that has the corresponding public key.</t>
        <t>This function may be invoked any number of times with the same private seed,
in order to derive the same or different private keys any number of times.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Private-Key((sk_bl, sk_kem), kh, ctx) -> sk'
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        sk_bl     A key blinding private key.
        sk_kem    A key encapsulation private key.
        kh        A key handle output from ARKG-Derive-Public-Key.
        ctx       An octet string of length at most 64,
                    containing optional context and
                    application specific information
                    (can be a zero-length string).

    Output:
        sk'       A blinded private key.

    The output sk' is calculated as follows:

    if LEN(ctx) > 64:
        Abort with an error.

    ctx'    = I2OSP(LEN(ctx), 1) || ctx
    ctx_bl  = 'ARKG-Derive-Key-BL.'  || ctx'
    ctx_kem = 'ARKG-Derive-Key-KEM.' || ctx'

    tau = KEM-Decaps(sk_kem, kh, ctx_kem)
    If decapsulation failed:
        Abort with an error.

    sk' = BL-Blind-Private-Key(sk_bl, tau, ctx_bl)
]]></sourcecode>
        <t>Errors in this procedure are typically unrecoverable.
For example, <tt>KEM-Decaps</tt> may fail to decapsulate the KEM ciphertext <tt>kh</tt> if it fails an integrity check.
ARKG instantiations <bcp14>SHOULD</bcp14> be chosen in a way that such errors are impossible
if <tt>kh</tt> was generated by an honest and correct implementation of <tt>ARKG-Derive-Public-Key</tt>.
Incorrect or malicious implementations of <tt>ARKG-Derive-Public-Key</tt> do not degrade the security
of an honest and correct implementation of <tt>ARKG-Derive-Private-Key</tt>.
See also <xref target="design-rationale-mac"/>.</t>
        <t>See <xref target="long-ctx"/> for guidance on using <tt>ctx</tt> arguments longer than 64 bytes.</t>
      </section>
      <section anchor="long-ctx">
        <name>Using <tt>ctx</tt> values longer than 64 bytes</name>
        <t>The <tt>ctx</tt> parameter of <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt>
is limited to a length of at most 64 bytes.
This is because this value needs to be communicated from the <em>subordinate party</em> to the <em>delegating party</em>
to use the same argument value in both functions,
therefore it is necessary in some contexts to limit the size of this parameter
in order to limit the size of overall protocol messages.</t>
        <t>If applications require <tt>ctx</tt> values longer than 64 bytes,
implementors <bcp14>MAY</bcp14> use techniques such as that described in <xref section="5.3.3" sectionFormat="of" target="RFC9380"/>.
Precise procedure definitions are left as an application-specific implementation detail.</t>
      </section>
    </section>
    <section anchor="generic-arkg-instantiations">
      <name>Generic ARKG instantiations</name>
      <t>This section defines generic formulae for instantiating the individual ARKG parameters,
which can be used to define concrete ARKG instantiations.</t>
      <section anchor="blinding-ec">
        <name>Using elliptic curve addition for key blinding</name>
        <t>Instantiations of ARKG whose output keys are elliptic curve keys
can use elliptic curve addition as the key blinding scheme <tt>BL</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>BL</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: An elliptic curve.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation tag.</t>
          </li>
        </ul>
        <t>Then the <tt>BL</tt> parameter of ARKG may be instantiated as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>N</tt> is the order of <tt>G</tt>.</t>
          </li>
          <li>
            <t>The function <tt>hash_to_field</tt> is defined in <xref section="5" sectionFormat="of" target="RFC9380"/>.</t>
          </li>
        </ul>
        <sourcecode type="pseudocode"><![CDATA[
BL-Derive-Key-Pair(ikm) -> (pk, sk)

    sk = hash_to_field(ikm, 1) with the parameters:
        DST: 'ARKG-BL-EC-KG.' || DST_ext
        F: GF(N), the scalar field
           of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    pk = sk * G


BL-Blind-Public-Key(pk, tau, ctx) -> pk_tau

    tau' = hash_to_field(tau, 1) with the parameters:
        DST: 'ARKG-BL-EC.' || DST_ext || ctx
        F: GF(N), the scalar field
           of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    pk_tau = pk + tau' * G


BL-Blind-Private-Key(sk, tau, ctx) -> sk_tau

    tau' = hash_to_field(tau, 1) with the parameters:
        DST: 'ARKG-BL-EC.' || DST_ext || ctx
        F: GF(N), the scalar field
           of the prime order subgroup of crv.
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    sk_tau_tmp = sk + tau'
    If sk_tau_tmp = 0, abort with an error.
    sk_tau = sk_tau_tmp
]]></sourcecode>
      </section>
      <section anchor="hmac-kem">
        <name>Using HMAC to adapt a KEM without ciphertext integrity</name>
        <t>Not all key encapsulation mechanisms guarantee ciphertext integrity,
meaning that a valid KEM ciphertext can be created only with knowledge of the KEM public key.
This section defines a general formula for adapting any KEM to guarantee ciphertext integrity
by prepending a MAC to the KEM ciphertext.</t>
        <t>For example, ECDH does not guarantee ciphertext integrity - any elliptic curve point is a valid ECDH ciphertext
and can be successfully decapsulated using any elliptic curve private scalar.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: A cryptographic hash function.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: A key encapsulation mechanism as described for the <tt>KEM</tt> parameter in <xref target="arkg-params"/>,
except <tt>Sub-Kem</tt> <bcp14>MAY</bcp14> ignore the <tt>ctx</tt> parameter and <bcp14>MAY</bcp14> not guarantee ciphertext integrity.
<tt>Sub-Kem</tt> defines the functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt>.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated using <tt>Sub-Kem</tt>,
HMAC <xref target="RFC2104"/> and HKDF <xref target="RFC5869"/> as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>L</tt> is the output length of <tt>Hash</tt> in octets.</t>
          </li>
          <li>
            <t><tt>LEFT(X, n)</tt> is the first <tt>n</tt> bytes of the byte array <tt>X</tt>.</t>
          </li>
          <li>
            <t><tt>DROP_LEFT(X, n)</tt> is the byte array <tt>X</tt> without the first <tt>n</tt> bytes.</t>
          </li>
        </ul>
        <t>We truncate the HMAC output to 128 bits (16 octets)
because as described in <xref target="design-rationale-mac"/>,
ARKG needs ciphertext integrity only to ensure correctness, not for security.
Extendable-output functions used as the <tt>Hash</tt> parameter <bcp14>SHOULD</bcp14> still be instantiated
with an output length appropriate for the desired security level,
in order to not leak information about the <tt>Sub-KEM</tt> shared secret key.</t>
        <sourcecode type="pseudocode"><![CDATA[
KEM-Derive-Key-Pair(ikm) -> (pk, sk)

    (pk, sk) = Sub-Kem-Derive-Key-Pair(ikm)


KEM-Encaps(pk, ikm, ctx) -> (k, c)

    ctx_sub = 'ARKG-KEM-HMAC.' || DST_ext || ctx
    (k', c') = Sub-Kem-Encaps(pk, ikm, ctx_sub)

    prk = HKDF-Extract with the arguments:
        Hash: Hash
        salt: not set
        IKM: k'

    mk = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: 'ARKG-KEM-HMAC-mac.' || DST_ext || ctx
        L: L
    t = HMAC-Hash-128(K=mk, text=c')

    k = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: 'ARKG-KEM-HMAC-shared.' || DST_ext || ctx
        L: The length of k' in octets.
    c = t || c'


KEM-Decaps(sk, c, ctx) -> k

    t = LEFT(c, 16)
    c' = DROP_LEFT(c, 16)
    ctx_sub = 'ARKG-KEM-HMAC.' || DST_ext || ctx
    k' = Sub-Kem-Decaps(sk, c', ctx_sub)

    prk = HKDF-Extract with the arguments:
        Hash: Hash
        salt: not set
        IKM: k'

    mk = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: 'ARKG-KEM-HMAC-mac.' || DST_ext || ctx
        L: L

    t' = HMAC-Hash-128(K=mk, text=c')
    If t = t':
        k = HKDF-Expand with the arguments:
            Hash: Hash
            PRK: prk
            info: 'ARKG-KEM-HMAC-shared.' || DST_ext || ctx
            L: The length of k' in octets.
    Else:
        Abort with an error.
]]></sourcecode>
      </section>
      <section anchor="kem-ecdh">
        <name>Using ECDH as the KEM</name>
        <t>Instantiations of ARKG can use ECDH <xref target="RFC6090"/> as the key encapsulation mechanism <tt>KEM</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: an elliptic curve valid for use with ECDH <xref target="RFC6090"/>.</t>
          </li>
          <li>
            <t><tt>Hash</tt>: A cryptographic hash function.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
        </ul>
        <t>The above parameters define the following intermediate value:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DST_aug</tt>: <tt>'ARKG-ECDH.' || DST_ext</tt>.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated as described in section <xref target="hmac-kem"/> with the parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: <tt>Hash</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: <tt>DST_aug</tt>.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: The functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>Elliptic-Curve-Point-to-Octet-String</tt> and <tt>Octet-String-to-Elliptic-Curve-Point</tt>
are the conversion routines defined in sections 2.3.3 and 2.3.4 of <xref target="SEC1"/>,
without point compression.</t>
              </li>
              <li>
                <t><tt>ECDH(pk, sk)</tt> represents the compact output of ECDH <xref target="RFC6090"/>
using public key (curve point) <tt>pk</tt> and private key (exponent) <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
              </li>
              <li>
                <t><tt>N</tt> is the order of <tt>G</tt>.</t>
              </li>
            </ul>
            <sourcecode type="pseudocode"><![CDATA[
Sub-Kem-Derive-Key-Pair(ikm) -> (pk, sk)

    sk = hash_to_field(ikm, 1) with the parameters:
        DST: 'ARKG-KEM-ECDH-KG.' || DST_aug
        F: GF(N), the scalar field
          of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    pk = sk * G


Sub-Kem-Encaps(pk, ikm, ctx) -> (k, c)

    (pk', sk') = Sub-Kem-Derive-Key-Pair(ikm)

    k = ECDH(pk, sk')
    c = Elliptic-Curve-Point-to-Octet-String(pk')


Sub-Kem-Decaps(sk, c, ctx) -> k

    pk' = Octet-String-to-Elliptic-Curve-Point(c)
    k = ECDH(pk', sk)
]]></sourcecode>
          </li>
        </ul>
      </section>
      <section anchor="kem-x25519-x448">
        <name>Using X25519 or X448 as the KEM</name>
        <t>Instantiations of ARKG can use X25519 or X448 <xref target="RFC7748"/> as the key encapsulation mechanism <tt>KEM</tt>.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DH-Function</tt>: the function X25519 or the function X448 <xref target="RFC7748"/>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated as described in section <xref target="hmac-kem"/> with the parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: SHA-512 [FIPS 180-4] if <tt>DH-Function</tt> is X25519,
or SHAKE256 [FIPS 202] with output length 64 octets if <tt>DH-Function</tt> is X448.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: <tt>'ARKG-ECDHX.' || DST_ext</tt>.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: The functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>G</tt> is the octet string <tt>h'0900000000000000 0000000000000000 0000000000000000 0000000000000000'</tt>
if <tt>DH-Function</tt> is X25519,
or the octet string <tt>h'0500000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000'</tt>
if <tt>DH-Function</tt> is X448.      </t>
                <t>
These are the little-endian encodings of the integers 9 and 5,
which is the u-coordinate of the generator point of the respective curve group.</t>
              </li>
            </ul>
            <sourcecode type="pseudocode"><![CDATA[
Sub-Kem-Derive-Key-Pair(ikm) -> (pk, sk)

    sk = ikm
    pk = DH-Function(sk, G)


Sub-Kem-Encaps(pk, ikm, ctx) -> (k, c)

    (pk', sk') = Sub-Kem-Derive-Key-Pair(ikm)

    k = DH-Function(sk', pk)
    c = pk'


Sub-Kem-Decaps(sk, c, ctx) -> k

    k = DH-Function(sk, c)
]]></sourcecode>
          </li>
        </ul>
      </section>
      <section anchor="blinding-kem-same-key">
        <name>Using the same key for both key blinding and KEM</name>
        <t>When an ARKG instance uses the same type of key for both the key blinding and the KEM -
for example, if elliptic curve arithmetic is used for key blinding as described in <xref target="blinding-ec"/>
and ECDH is used as the KEM as described in <xref target="kem-ecdh"/> <xref target="Frymann2020"/> -
then the two keys <bcp14>MAY</bcp14> be the same key.
Representations of such an ARKG seed <bcp14>MAY</bcp14> allow for omitting the second copy of the constituent key,
but such representations <bcp14>MUST</bcp14> clearly identify that the single constituent key is to be used
both as the key blinding key and the KEM key.</t>
      </section>
    </section>
    <section anchor="concrete-arkg-instantiations">
      <name>Concrete ARKG instantiations</name>
      <t>This section defines an initial set of concrete ARKG instantiations.</t>
      <t>TODO: IANA registry? COSE/JOSE?</t>
      <section anchor="ARKG-P256">
        <name>ARKG-P256</name>
        <t>The identifier <tt>ARKG-P256</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P384">
        <name>ARKG-P384</name>
        <t>The identifier <tt>ARKG-P384</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-384 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 384 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P521">
        <name>ARKG-P521</name>
        <t>The identifier <tt>ARKG-P521</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-512 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 512 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P256k">
        <name>ARKG-P256k</name>
        <t>The identifier <tt>ARKG-P256k</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
    </section>
    <section anchor="cose">
      <name>COSE bindings</name>
      <t>This section proposes additions to COSE <xref target="RFC9052"/> to support ARKG use cases.
These consist of new key type definitions to represent ARKG public seeds
and references <xref target="I-D.lundberg-cose-2p-algs"/> to private keys derived using ARKG.</t>
      <section anchor="cose-arkg-pub-seed">
        <name>COSE key type: ARKG public seed</name>
        <t>An ARKG public seed is represented as a COSE_Key structure <xref target="RFC9052"/>
with <tt>kty</tt> value TBD (placeholder value -65537).
<xref target="tbl-arkg-pub-params"/> defines key type parameters <tt>pkbl</tt> (-1) and <tt>pkkem</tt> (-2) for the <tt>BL</tt> and <tt>KEM</tt> public key, respectively,
as well as key type parameter <tt>dkalg</tt> (-3), representing the algorithm that derived public and private keys are to be used with.</t>
        <table anchor="tbl-arkg-pub-params">
          <name>COSE key type parameters for the ARKG-pub key type.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Value type</th>
              <th align="left">Required?</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">pkbl</td>
              <td align="left">-1</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">BL key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">pkkem</td>
              <td align="left">-2</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">KEM key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">dkalg</td>
              <td align="left">-3</td>
              <td align="left">int / tstr</td>
              <td align="left">Optional</td>
              <td align="left">
                <tt>alg</tt> parameter of public and private keys derived from this ARKG public seed</td>
            </tr>
          </tbody>
        </table>
        <t>When <tt>dkalg</tt> (-3) is present in an ARKG public seed,
the <tt>alg</tt> (3) parameter of public keys derived using <tt>ARKG-Derive-Public-Key</tt> with that seed
<bcp14>SHOULD</bcp14> be set to the <tt>dkalg</tt> (-3) value of the seed.</t>
        <t>The <tt>alg</tt> (3) parameter, when present,
identifies the ARKG instance this public seed is to be used with.
<xref target="tbl-arkg-pub-algs"/> defines an initial set of COSE algorithm identifiers for this purpose.</t>
        <table anchor="tbl-arkg-pub-algs">
          <name>COSE algorithm identifiers to represent ARKG instances.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ARKG-P256</td>
              <td align="left">TBD (placeholder -65700)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P256"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P384</td>
              <td align="left">TBD (placeholder -65701)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P384"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P521</td>
              <td align="left">TBD (placeholder -65702)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P521"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P256k</td>
              <td align="left">TBD (placeholder -65703)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P256k"/> of this document</td>
            </tr>
          </tbody>
        </table>
        <t>The following CDDL <xref target="RFC8610"/> example represents an <tt>ARKG-P256</tt> public seed
restricted to generating derived keys for use with the ESP256 <xref target="I-D.jose-fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65537,   ; kty: ARKG-pub (placeholder value)
               ; kid: Opaque identifier
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65700,   ; alg: ARKG-P256 (placeholder value)

  -1: {        ; BL public key
    1: 2,      ; kty: EC2
    -1: 1,     ; crv: P256
    -2: h'69380FC1C3B09652134FEEFBA61776F9
          7AF875CE46CA20252C4165102966EBC5',
    -3: h'8B515831462CCB0BD55CBA04BFD50DA6
          3FAF18BD845433622DAF97C06A10D0F1',
  },

  -2: {        ; KEM public key
    1: 2,      ; kty: EC2
    -1: 1,     ; crv: P256
    -2: h'5C099BEC31FAA581D14E208250D3FFDA
          9EC7F543043008BC84967A8D875B5D78',
    -3: h'539D57429FCB1C138DA29010A155DCA1
          4566A8F55AC2F1780810C49D4ED72D58',
  },

  -3: -9       ; Derived key algorithm: ESP256
}
]]></sourcecode>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a6013a0001000002582060b6dfddd31659598ae5de49acb220d8704949e84d48
  4b68344340e2565337d2033a000100a320a40102200121582069380fc1c3b096
  52134feefba61776f97af875ce46ca20252c4165102966ebc52258208b515831
  462ccb0bd55cba04bfd50da63faf18bd845433622daf97c06a10d0f121a40102
  20012158205c099bec31faa581d14e208250d3ffda9ec7f543043008bc84967a
  8d875b5d78225820539d57429fcb1c138da29010a155dca14566a8f55ac2f178
  0810c49d4ed72d582228'
]]></artwork>
      </section>
      <section anchor="cose-arkg-derived-refs">
        <name>COSE key reference type: ARKG derived private key</name>
        <t>A reference to a private key derived using ARKG
may be represented as a <tt>COSE_Key_Ref</tt> structure <xref target="I-D.lundberg-cose-2p-algs"/>
whose <tt>kty</tt> is <tt>TBD</tt> (Ref-ARKG-derived, placeholder -65538).
This key reference type defines key type parameters -1 and -2 respectively
for the <tt>kh</tt> and <tt>ctx</tt> parameters of <tt>ARKG-Derive-Private-Key</tt>.
The <tt>kid</tt> (2) parameter identifies the ARKG private seed <tt>sk</tt>.
Thus the <tt>COSE_Key_Ref</tt> structure conveys all arguments to use in <tt>ARKG-Derive-Private-Key</tt>
to derive the referenced private key.</t>
        <t><xref target="tbl-ref-arkg-params"/> defines key type parameters for the Ref-ARKG-derived key type.
A <tt>COSE_Key_Ref</tt> structure whose <tt>kty</tt> is TBD (Ref-ARKG-derived, placeholder -65538)
<bcp14>MUST</bcp14> include the parameters <tt>kh</tt> (-1) and <tt>ctx</tt> (-2).
The <tt>inst</tt> (-3) parameter <bcp14>MAY</bcp14> be used to indicate the ARKG instance
whose <tt>ARKG-Derive-Private-Key</tt> procedure to use to derive the private key;
its value is taken from the IANA "COSE Algorithms" registry <xref target="IANA.cose"/>
and an initial set of values is defined in <xref target="tbl-arkg-pub-params"/>.</t>
        <t>If <tt>dkalg</tt> (-3) is present in the ARKG public seed used in <tt>ARKG-Derive-Public-Key</tt> to generate the <tt>kh</tt> value,
then the <tt>alg</tt> (3) parameter of the COSE_Key_Ref <bcp14>SHOULD</bcp14> be set to the <tt>dkalg</tt> (-3) value of the seed.
If <tt>alg</tt> (3) is present in the seed,
then the <tt>inst</tt> (-3) parameter of the COSE_Key_Ref <bcp14>SHOULD</bcp14> be set to the <tt>alg</tt> (3) value of the seed.</t>
        <table anchor="tbl-ref-arkg-params">
          <name>COSE key type parameters for the Ref-ARKG-derived type.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Value type</th>
              <th align="left">Required?</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">kh</td>
              <td align="left">-1</td>
              <td align="left">bstr</td>
              <td align="left">Required</td>
              <td align="left">
                <tt>kh</tt> argument to <tt>ARKG-Derive-Private-Key</tt></td>
            </tr>
            <tr>
              <td align="left">ctx</td>
              <td align="left">-2</td>
              <td align="left">bstr</td>
              <td align="left">Required</td>
              <td align="left">
                <tt>ctx</tt> argument to <tt>ARKG-Derive-Private-Key</tt></td>
            </tr>
            <tr>
              <td align="left">inst</td>
              <td align="left">-3</td>
              <td align="left">int / tstr</td>
              <td align="left">Optional</td>
              <td align="left">COSE algorithm identifier of ARKG instance</td>
            </tr>
          </tbody>
        </table>
        <t>The following CDDL example represents a reference to a key derived using <tt>ARKG-P256</tt>
and restricted for use with the ESP256 <xref target="I-D.jose-fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65538,   ; kty: Ref-ARKG-derived
               ; kid: Opaque identifier of ARKG-pub
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -9,       ; alg: ESP256

               ; ARKG-P256 key handle
               ; (HMAC-SHA-256-128 followed by
                  SEC1 uncompressed ECDH public key)
  -1: h'ae079e9c52212860678a7cee25b6a6d4
        048219d973768f8e1adb8eb84b220b0ee3
          a2532828b9aa65254fe3717a29499e9b
          aee70cea75b5c8a2ec2eb737834f7467
          e37b3254776f65f4cfc81e2bc4747a84',

               ; ctx argument to ARKG-Derive-Private-Key
  -2: 'Example application info',

  -3: -65700   ; inst: ARKG-P256 (placeholder value)
}
]]></sourcecode>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a6013a0001000102582060b6dfddd31659598ae5de49acb220d8704949e84d48
  4b68344340e2565337d20328205851ae079e9c52212860678a7cee25b6a6d404
  8219d973768f8e1adb8eb84b220b0ee3a2532828b9aa65254fe3717a29499e9b
  aee70cea75b5c8a2ec2eb737834f7467e37b3254776f65f4cfc81e2bc4747a84
  2158184578616d706c65206170706c69636174696f6e20696e666f223a000100
  a3'
]]></artwork>
      </section>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="Privacy">
      <name>Privacy Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <section anchor="cose-key-types-registrations">
        <name>COSE Key Types Registrations</name>
        <t>This section registers the following values in the IANA "COSE Key Types" registry <xref target="IANA.cose"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Name: ARKG-pub
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65537)</t>
              </li>
              <li>
                <t>Description: ARKG public seed</t>
              </li>
              <li>
                <t>Capabilities: [kty(-65537), pk_bl, pk_kem]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-arkg-pub-seed"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ref-ARKG-derived
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65538)</t>
              </li>
              <li>
                <t>Description: Reference to private key derived by ARKG</t>
              </li>
              <li>
                <t>Capabilities: [kty(-65538), kh, ctx]</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-2p-algs"/>, <xref target="cose-arkg-derived-refs"/> of this document</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>These registrations add the following choices to the CDDL <xref target="RFC8610"/> type socket <tt>$COSE_kty_ref</tt> <xref target="I-D.lundberg-cose-2p-algs"/>:</t>
        <sourcecode type="cddl"><![CDATA[
$COSE_kty_ref /= -65538   ; Placeholder value
]]></sourcecode>
      </section>
      <section anchor="cose-key-type-parameters-registrations">
        <name>COSE Key Type Parameters Registrations</name>
        <t>This section registers the following values in the IANA "COSE Key Type Parameters" registry <xref target="IANA.cose"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Key Type: TBD (ARKG-pub, placeholder -65537)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: pk_bl</t>
              </li>
              <li>
                <t>Label: -1</t>
              </li>
              <li>
                <t>CBOR Type: COSE_Key</t>
              </li>
              <li>
                <t>Description: ARKG key blinding public key</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-arkg-pub-seed"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Key Type: TBD (ARKG-pub, placeholder -65537)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: pk_kem</t>
              </li>
              <li>
                <t>Label: -2</t>
              </li>
              <li>
                <t>CBOR Type: COSE_Key</t>
              </li>
              <li>
                <t>Description: ARKG key encapsulation public key</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-arkg-pub-seed"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Key Type: TBD (Ref-ARKG-derived, placeholder -65538)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: kh</t>
              </li>
              <li>
                <t>Label: -1</t>
              </li>
              <li>
                <t>CBOR Type: bstr</t>
              </li>
              <li>
                <t>Description: kh argument to ARKG-Derive-Private-Key</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-2p-algs"/>, <xref target="cose-arkg-derived-refs"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Key Type: TBD (Ref-ARKG-derived, placeholder -65538)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: ctx</t>
              </li>
              <li>
                <t>Label: -2</t>
              </li>
              <li>
                <t>CBOR Type: bstr</t>
              </li>
              <li>
                <t>Description: ctx argument to ARKG-Derive-Private-Key</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-2p-algs"/>, <xref target="cose-arkg-derived-refs"/> of this document</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="cose-algorithms-registrations">
        <name>COSE Algorithms Registrations</name>
        <t>This section registers the following values in the IANA "COSE Algorithms" registry <xref target="IANA.cose"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Name: ARKG-P256
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65700)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp256r1</t>
              </li>
              <li>
                <t>Reference: <xref target="ARKG-P256"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ARKG-P384
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65701)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp384r1</t>
              </li>
              <li>
                <t>Reference: <xref target="ARKG-P384"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ARKG-P521
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65702)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp521r1</t>
              </li>
              <li>
                <t>Reference: <xref target="ARKG-P521"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ARKG-P256k
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65703)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp256k1</t>
              </li>
              <li>
                <t>Reference: <xref target="ARKG-P256k"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="design-rationale">
      <name>Design rationale</name>
      <section anchor="design-rationale-mac">
        <name>Using a MAC</name>
        <t>The ARKG construction by Wilson <xref target="Wilson"/> omits the MAC and instead encodes application context in the PRF labels,
arguing that this leads to invalid keys/signatures in cases that would have a bad MAC.
We choose to keep the MAC from the construction by Frymann et al. <xref target="Frymann2020"/>,
but allow it to be omitted in case the chosen KEM already guarantees ciphertext integrity.</t>
        <t>The reason for this is to ensure that the delegating party can distinguish key handles that belong to its ARKG seed.
For example, this is important for applications using the W3C Web Authentication API [WebAuthn],
which do not know beforehand which authenticators are connected and available.
Instead, authentication requests may include references to several eligible authenticators,
and the one to use is chosen opportunistically by the WebAuthn client depending on which are available at the time.
Consider using ARKG in such a scenario to sign some data with a derived private key:
a user may have several authenticators and thus several ARKG seeds,
so the signing request might include several well-formed ARKG key handles,
but only one of them belongs to the ARKG seed of the authenticator that is currently connected.
Without an integrity check,
choosing the wrong key handle might cause the <tt>ARKG-Derive-Private-Key</tt> procedure to silently derive the wrong key
instead of returning an explicit error, which would in turn lead to an invalid signature or similar final output.
This would make it difficult or impossible to diagnose the root cause of the issue and present actionable user feedback.
For this reason, we require the KEM to guarantee ciphertext integrity
so that <tt>ARKG-Derive-Private-Key</tt> can fail early if the key handle belongs to a different ARKG seed.</t>
        <t>It is straightforward to see that adding the MAC to the construction by Wilson
does not weaken the security properties defined by Frymann et al. <xref target="Frymann2020"/>:
the construction by Frymann et al. can be reduced to the ARKG construction in this document
by instantiating <tt>BL</tt> as described in <xref target="blinding-ec"/>
and <tt>KEM</tt> as described in <xref target="kem-ecdh"/>.
The use of hash_to_field in <xref target="blinding-ec"/> corresponds to the KDF<sub>1</sub> parameter in <xref target="Frymann2020"/>,
and the use of HMAC and HKDF in <xref target="hmac-kem"/> corresponds to the MAC and KDF<sub>2</sub> parameters in <xref target="Frymann2020"/>.
Hence if one can break PK-unlinkability or SK-security of the ARKG construction in this document,
one can also break the same property of the construction by Frymann et al.</t>
      </section>
      <section anchor="implementation-status">
        <name>Implementation Status</name>
        <t>TODO</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.jose-fully-spec-algs">
          <front>
            <title>Fully-Specified Algorithms for JOSE and COSE</title>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <date day="2" month="April" year="2025"/>
            <abstract>
              <t>   This specification refers to cryptographic algorithm identifiers that
   fully specify the cryptographic operations to be performed, including
   any curve, key derivation function (KDF), hash functions, etc., as
   being "fully specified".  Whereas, it refers to cryptographic
   algorithm identifiers that require additional information beyond the
   algorithm identifier to determine the cryptographic operations to be
   performed as being "polymorphic".  This specification creates fully-
   specified algorithm identifiers for registered JOSE and COSE
   polymorphic algorithm identifiers, enabling applications to use only
   fully-specified algorithm identifiers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jose-fully-specified-algorithms-09"/>
        </reference>
        <reference anchor="I-D.lundberg-cose-2p-algs">
          <front>
            <title>COSE Algorithms for Two-Party Signing</title>
            <author fullname="Emil Lundberg" initials="E." surname="Lundberg">
              <organization>Yubico</organization>
            </author>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   This specification defines COSE algorithm identifiers used when the
   signing operation is performed cooperatively between two parties.
   When performing two-party signing, the first party typically hashes
   the data to be signed and the second party signs the hashed data
   computed by the first party.  This can be useful when communication
   with the party holding the signing private key occurs over a limited-
   bandwidth channel, such as NFC or Bluetooth Low Energy (BLE), in
   which it is infeasible to send the complete set of data to be signed.
   The resulting signatures are identical in structure to those computed
   by a single party, and can be verified using the same verification
   procedure without additional steps to preprocess the signed data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lundberg-cose-two-party-signing-algs-01"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC6090">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </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="RFC8812">
          <front>
            <title>CBOR Object Signing and Encryption (COSE) and JSON Object Signing and Encryption (JOSE) Registrations for Web Authentication (WebAuthn) Algorithms</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>The W3C Web Authentication (WebAuthn) specification and the FIDO Alliance FIDO2 Client to Authenticator Protocol (CTAP) specification use CBOR Object Signing and Encryption (COSE) algorithm identifiers. This specification registers the following algorithms (which are used by WebAuthn and CTAP implementations) in the IANA "COSE Algorithms" registry: RSASSA-PKCS1-v1_5 using SHA-256, SHA-384, SHA-512, and SHA-1; and Elliptic Curve Digital Signature Algorithm (ECDSA) using the secp256k1 curve and SHA-256. It registers the secp256k1 elliptic curve in the IANA "COSE Elliptic Curves" registry. Also, for use with JSON Object Signing and Encryption (JOSE), it registers the algorithm ECDSA using the secp256k1 curve and SHA-256 in the IANA "JSON Web Signature and Encryption Algorithms" registry and the secp256k1 elliptic curve in the IANA "JSON Web Key Elliptic Curve" registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8812"/>
          <seriesInfo name="DOI" value="10.17487/RFC8812"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9380">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="S. Scott" initials="S." surname="Scott"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9380"/>
          <seriesInfo name="DOI" value="10.17487/RFC9380"/>
        </reference>
        <reference anchor="SEC1" target="http://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="SEC2" target="http://www.secg.org/sec2-v2.pdf">
          <front>
            <title>SEC 2: Recommended Elliptic Curve Domain Parameters</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="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>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BIP32" target="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki">
          <front>
            <title>BIP 32 Hierarchical Deterministic Wallets</title>
            <author initials="P." surname="Wuille" fullname="Pieter Wuille">
              <organization/>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="Clermont" target="https://www.cryptoplexity.informatik.tu-darmstadt.de/media/crypt/teaching_1/theses_1/Sebastian_Clermont_Thesis.pdf">
          <front>
            <title>Post Quantum Asynchronous Remote Key Generation. Master's thesis</title>
            <author initials="S. A." surname="Clermont" fullname="Sebastian A. Clermont">
              <organization>Technische Universität Darmstadt</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="WebAuthn-Recovery" target="https://github.com/Yubico/webauthn-recovery-extension">
          <front>
            <title>WebAuthn recovery extension: Asynchronous delegated key generation without shared secrets. GitHub</title>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="Frymann2020" target="https://eprint.iacr.org/2020/1004">
          <front>
            <title>Asynchronous Remote Key Generation: An Analysis of Yubico's Proposal for W3C WebAuthn. CCS '20: Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="F." surname="Kiefer" fullname="Franziskus Kiefer">
              <organization/>
            </author>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="Frymann2023" target="https://eprint.iacr.org/2023/419">
          <front>
            <title>Asynchronous Remote Key Generation for Post-Quantum Cryptosystems from Lattices. 2023 IEEE 8th European Symposium on Security and Privacy</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Shoup" target="https://www.shoup.net/papers/iso-2.pdf">
          <front>
            <title>A Proposal for an ISO Standard for Public Key Encryption (version 2.0)</title>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization>IBM Zurich Research Lab</organization>
            </author>
            <date year="2001"/>
          </front>
        </reference>
        <reference anchor="Wilson" target="http://hdl.handle.net/10012/19316">
          <front>
            <title>Post-Quantum Account Recovery for Passwordless Authentication. Master's thesis</title>
            <author initials="S. M." surname="Wilson" fullname="Spencer MacLaren Wilson">
              <organization>University of Waterloo,</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1200?>

<section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>ARKG was first proposed under this name by Frymann et al. <xref target="Frymann2020"/>,
who analyzed a proposed extension to W3C Web Authentication by Lundberg and Nilsson <xref target="WebAuthn-Recovery"/>,
which was in turn inspired by a similar construction by Wuille <xref target="BIP32"/> used to create privacy-preserving Bitcoin addresses.
Frymann et al. <xref target="Frymann2020"/> generalized the constructions by Lundberg, Nilsson and Wuille
from elliptic curves to any discrete logarithm (DL) problem,
and also proved the security of arbitrary asymmetric protocols composed with ARKG.
Further generalizations to include quantum-resistant instantiations
were developed independently by Clermont <xref target="Clermont"/>, Frymann et al. <xref target="Frymann2023"/> and Wilson <xref target="Wilson"/>.</t>
      <t>This document adopts the construction proposed by Wilson <xref target="Wilson"/>,
modified by the inclusion of a MAC in the key handles as done in the original construction by Frymann et al. <xref target="Frymann2020"/>.</t>
      <t>The authors would like to thank all of these authors for their research and development work that led to the creation of this document.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section lists test vectors for validating implementations.</t>
      <t>Test vectors are listed in CDDL <xref target="RFC8610"/> syntax
using parameter and output names defined in <xref target="arkg"/>.
Elliptic curve points are encoded using the <tt>Elliptic-Curve-Point-to-Octet-String</tt> procedure
defined in section 2.3.3 of <xref target="SEC1"/>, without point compression.</t>
      <section anchor="arkg-p256">
        <name>ARKG-P256</name>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx      = 'ARKG-P256.test vectors'
ikm_bl   = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem  = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm      = h'404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f'

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04572a111ce5cfd2a67d56a0f7c684184b16ccd212490dc9c5b579df749647d107
               dac2a1b197cc10d2376559ad6df6bc107318d5cfb90def9f4a1f5347e086c2cd'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x775d7fe9a6dfba43ce671cb38afca3d272c4d14aff97bd67559eb500a092e5e7
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx      = 'ARKG-P256.test vectors'
ikm_bl   = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem  = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm      = h'00'

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'040e983f44cafa9036066857d1831b58cc2227677489df07d1ae0801259ddc0a6a
               a77f98712ecf662773ef73b6414d752bab57288cdce1299f73e606306bf77c54'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x298271791090c1a0f3ef346a974b8daeab2876f2943207b2cddfe4ddff7a6295
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx      = 'ARKG-P256.test vectors.0'
ikm_bl   = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem  = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm      = h'404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f'

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04b79b65d6bbb419ff97006a1bd52e3f4ad53042173992423e06e52987a037cb61
               dd82b126b162e4e7e8dc5c9fd86e82769d402a1968c7c547ef53ae4f96e10b0e'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x2a97f4232f9abba32fbfc28c6686f8afd2d851c2a95a3ed2f0a384b9ad55068d
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx      = 'ARKG-P256.test vectors.0'
ikm_bl   = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem  = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm      = h'00'

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04dfd47f9357efc0146e243c2cab4601c250b792111d6a364587a728d5624cfaf1
               6e62dbf37ebc132537038f5daa2ff6cd38f229fd3063c618b4333cea35af6e85'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0xe5e0fab3367300dc45904128a3f8991a9d9059b585aac29e6f4e7cb45f59fce0
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx      = 'ARKG-P256.test vectors.1'
ikm_bl   = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem  = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm      = h'404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f'

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04cc85763fae2c8f38964ddc1f3dd9eebe2d2cb5c2842b0a622939b608f9cef967
               aafa50b9b24d6ae5a273f5b5d03b6a1ce8abd4f4dbaf487c417ef7380d1481b5'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x1a60b7fe69b315fe1262c46711af990d47228471ef5a296f6aa26ba6a5a1a6ec
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx      = 'ARKG-P256.test vectors.1'
ikm_bl   = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem  = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm      = h'00'

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04056c654c97ea460ebfae997c8e12314184e45183aefdb8ce9547afca1faaee70
               da6c6433c8fe71c32284cf0a015eb463ea2fc81438f6698684525f011d7ae83c'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0xbb609831741d9232ecd7d58770c503992ca78d34361a865a0d6715861955526f
]]></sourcecode>
      </section>
      <section anchor="other-instances">
        <name>Other instances</name>
        <t>TODO</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>-07</t>
      <ul spacing="normal">
        <li>
          <t>Fixed hash_to_field DST in Sub-Kem-Derive-Key-Pair in section "Using ECDH as the KEM"
to agree with test vectors.</t>
        </li>
      </ul>
      <t>-06</t>
      <ul spacing="normal">
        <li>
          <t>Changed DST construction in section "Using ECDH as the KEM" to include the "ARKG-ECDH." prefix everywhere in the formula.
Previously the prefix was added in the argument to the "Using HMAC to adapt a KEM without ciphertext integrity" formula
but not in the Sub-Kem functions defined in "Using ECDH as the KEM".</t>
        </li>
      </ul>
      <t>-05</t>
      <ul spacing="normal">
        <li>
          <t>Deleted concrete instances <tt>ARKG-curve25519ADD-X25519</tt>, <tt>ARKG-curve448ADD-X448</tt>,
<tt>ARKG-edwards25519ADD-X25519</tt> and <tt>ARKG-edwards448ADD-X448</tt>
since implementations with a non-prime order generator, including EdDSA,
are incompatible with the additive blinding scheme defined in section "Using elliptic curve addition for key blinding".</t>
        </li>
        <li>
          <t>Remodeled procedures to be fully deterministic:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>BL-Generate-Keypair()</tt> replaced with <tt>BL-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>KEM-Generate-Keypair()</tt> replaced with <tt>KEM-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>ARKG-Generate-Seed()</tt> replaced with <tt>ARKG-Derive-Seed(ikm_bl, ikm_kem)</tt>.</t>
            </li>
            <li>
              <t>Parameter <tt>ikm</tt> added to <tt>ARKG-Derive-Public-Key</tt>.</t>
            </li>
            <li>
              <t>Instance parameter <tt>hash-to-crv-suite</tt> added to generic formula "Using ECDH as the KEM",
affecting concrete instances <tt>ARKG-P256ADD-ECDH</tt>, <tt>ARKG-P384ADD-ECDH</tt>, <tt>ARKG-P521ADD-ECDH</tt> and <tt>ARKG-P256kADD-ECDH</tt>.</t>
            </li>
            <li>
              <t>Section "Deterministic key generation" deleted.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Flipped order of <tt>(pk_bl, pk_kem)</tt> and <tt>(sk_bl, sk_kem)</tt> parameter and return value tuples
for consistent ordering between BL and KEM throughout document.</t>
        </li>
        <li>
          <t><tt>info</tt> parameter renamed to <tt>ctx</tt>.</t>
        </li>
        <li>
          <t><tt>ctx</tt> length limited to at most 64 bytes.</t>
        </li>
        <li>
          <t>Encoding of <tt>ctx</tt> in <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt> now embeds the length of <tt>ctx</tt>.</t>
        </li>
        <li>
          <t>Renamed concrete instances and corresponding <tt>DST_ext</tt> values:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>ARKG-P256ADD-ECDH</tt> to <tt>ARKG-P256</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P384ADD-ECDH</tt> to <tt>ARKG-P384</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P521ADD-ECDH</tt> to <tt>ARKG-P521</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P256kADD-ECDH</tt> to <tt>ARKG-P256k</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t>Added ARKG-P256 test vectors.</t>
        </li>
      </ul>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>Extracted COSE_Key_Ref definition and COSE algorithm registrations to draft-lundberg-cose-two-party-signing-algs.</t>
        </li>
        <li>
          <t>Redefined alg (3) parameter and added dkalg (-3) in ARKG-pub COSE_Key.</t>
        </li>
        <li>
          <t>Defined alg (3) and inst (-3) parameters of Ref-ARKG-derived COSE key type.</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Renamed section "Using HMAC to adapt a KEM without {integrity protection =&gt; ciphertext integrity}".</t>
        </li>
        <li>
          <t>Fixed info argument to HMAC in section "Using HMAC to adapt a KEM without ciphertext integrity".</t>
        </li>
        <li>
          <t>Added reference to Shoup for definition of key encapsulation mechanism.</t>
        </li>
        <li>
          <t>Added CDDL definition of COSE_Key_Ref.</t>
        </li>
        <li>
          <t>Editorial fixes to references.</t>
        </li>
        <li>
          <t>Renamed proposed COSE Key Types.</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Rewritten introduction.</t>
        </li>
        <li>
          <t>Renamed ARKG-Derive-Secret-Key to ARKG-Derive-Private-Key.</t>
        </li>
        <li>
          <t>Overhauled EC instantiations to use hash_to_field and account for non-prime order curve key generation.</t>
        </li>
        <li>
          <t>Eliminated top-level MAC and KDF instance parameters.</t>
        </li>
        <li>
          <t>Added info parameter to instance parameter functions.</t>
        </li>
        <li>
          <t>Added requirement of KEM ciphertext integrity and generic formula for augmenting any KEM using HMAC.</t>
        </li>
        <li>
          <t>Added curve/edwards25519/448 instances.</t>
        </li>
        <li>
          <t>Added proposal for COSE bindings and key reference types.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Editorial Fixes to formatting and references.</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial Version</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Dain Nilsson">
        <organization>Yubico</organization>
        <address>
      </address>
      </contact>
      <contact fullname="Peter Altmann">
        <organization>Agency for Digital Government</organization>
        <address>
          <postal>
            <country>SE</country>
          </postal>
        </address>
      </contact>
      <contact initials="M. B." surname="Jones" fullname="Michael B. Jones">
        <organization>Self-Issued Consulting</organization>
        <address>
          <postal>
            <country>United States</country>
          </postal>
          <uri>https://self-issued.info/</uri>
        </address>
      </contact>
      <contact fullname="Sander Dijkhuis">
        <organization>Cleverbase</organization>
        <address>
          <postal>
            <country>NL</country>
          </postal>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923bcyJHgO74CK+1Zkj2sEq5VKLbbHl7VHF1HlN2elXXI
BJBgwUQBZQBFilZrvmUf5kt2fmwjIjOBBApFUt1S2163Tp9mVSGRGRkZ94yM
HI1GRlWzPD5nWZHzPbMuV9xIlyV9qmrHsmaWYxh1Wmfw9O2cm/vVbR7NyyIv
VpX5hi+KmpvP+K35lOe8ZHVa5Ob2/ptnT3dMll0WZVrPFwYLw5Jf75mP8MEj
I2P55Z7JcyNiNYc2t3tmmieFYcRFlLMFDBSXLKlHYcnijN9mqzwOeXk5ihL4
HyuvLkfW1KhW4SKtKhivvl3CK6fHb09M8zGMWhUwUprHfMnhf3n9aNd8xOO0
BmBYhl9O9w/gT1HCpzdvTx4Z+WoB/e8ZMYCzZ0RFXvG8WlUSGwC3a7CSsz3V
/qYAGMpitYRfDsvbZV2YJ0W5WjwyrvgtPIz3DHNkPjs6Ma55voIuTXO4uWkK
2B+94RVnZTQ3n2I7fHAJiFuF8Og/VmEaFU9o2mUSPTIMg63qeQHwjsyywGUR
k4OXklWWCQQeL9LMfC4RB0+K8pLl6V9pffZM0Sf8XNUl5/We+fS//+s645cM
SMF0HHgQpTWsylldRFfzIlvgL8Uqr3Gpzo7hG1+wNIORYZh/5QtYoXHFDQCo
heDfinluHogV3AyA7OeaT/9ch/8q/oyjYmHgMtRlGq5qMdO24yOW5ubLNKuq
It/UceeF17zmpbmf1QuWr7+xf8nz6NZMgByOUsA6y8ynxTUv8wWQTm/enW5f
pNGc8cw8GMNcc15B2zQHonkx1n7pjnXGs2R0WlUrHpuHQGarrE5zXJ5Vme6Z
87peVntPnlTYKqVWY+SLJzoUv8/TGt4+q4FWqy5AZ8DHHGfx56v5Kl0f/TDj
MK+QwUppHb58bhh5US6g0TWR6unoaPznouIj7Pl2VC15NAJWhpnhE8GZKa+T
Ua9RmqQ8HjVMX8muWu7F5s5yra9ug/qmGC1ZWUOf6WUO2KH22Nf+y/0xNkEY
35wcOrblyY/ezJvJj34wUR8nILrkx+nUC+THwLKnzUfXUR8ntmobBLb6dWb5
zUc3oAZnx4c2/gXOZeUlsg6uGizazc0NsEB0OQacwwpG9ujaGS/jhNoqhsXP
I1wVWAxe1kCpC1OxPj0kCWSi1BVjCLG7BaOaNjB1lqVLeMs8XJXX3BSy5LJk
y/ntloDNeRBszs+CzbbWYHP2oCm8sECBG/fhPCoWyLKvWQlkCqxYbRkG0rVG
cwenr90B2JEbhCBEmfAkTOuoSHP4u6yehFkRPlmwCjrEH0YWrOZ4AaKQ3aRX
qQ4idG66jvl9CvoJJpNGwOJHCMgizdMK4fyBZRmvqwF8SAmSkgj5YZVCuy4y
UFgCY5ULEFfDE0DsR7RUy4x/ALk6biZ/Na5Xo5iVC9DBcT2O+ROawBNq/qTm
DKDNL8/tJ/UcVqKCD2cc+LdOWX6uBj0HpVyl1Yb1lJJBvWXujxtoqYUpVvzR
Wx7NARkRKHiQMCAmqrT+7/+qQdhK4B51pk06okHwo9dFVZv/vmJ5vVo8wEAY
my9o3bYqsybgsfMfeLgPoOcjpCQA4HZv43T6yq190tMNLYSqd7OUvZv8Qw1a
XqgAHeKYkyIEMgZlbl62Vs0NEGKxqs1qDsZAbAIflUAzY/NpWn+/Crv4sWf3
0bJU6zewMjRrBdeogQt6OClvUWcBvq3N2HiZRleqZQ8ZeQr66Skr4zlbdB6d
lCz/a1pdwXyfpTzh5QPx+wLMEPhfvsrS6mGIv58aAP9AlznLboESzCKROhyI
43VZLIsKuBWV8w/uYUMjQMSHZ+YWYAXbRByYJr+kd4GekDwtc//whXl2+vRs
/xA1LcwQtDw3YRkPi8VyhdwM2hK/LFY5SAQEpAI+iUAT17c9YrcGF5MvyzSv
xymLShKs2PCJbVleZ+HcL7twawsg8fwAqxyRiIw6Uowq9Ed1C6y4qMykBIH/
nNUgDzlQNYIONvXxsRnUc/N4BUvBQX6c3S5gSVJ4G3pU6CJUvi7TaxbddjHn
PhRz7hOPeOZsjnbyRpT9IY3AHhStdPl1evDC/N8AC1jQjSn9nIUdDHXJCeZy
evYK7agcBHAssLMKM9AGiLfjnGQweTMkDeGDM7Z2ulra3ijwK4RwnPP6yZIt
4f0naVWMlNL9AfgE6H6zuF4isZawztFzkDW5fEGfcCOkb5HqfwCAyqwodtek
crPY+xFZfKaSrmLCrKrQX8l4VZnIWWDySmYYlNF3rizMfB5n4zkgNOM0dWAG
23liz1x7Al6LMRqNTBaCy8Gi2jAe7keCVIDVUm9qbmU9ZzW4kSwE+JXcxvcA
I6y6BWsEHIjIXIpV3SDNL9NrkB0miyLEAbhmKEGioix5tSxylCvmEikboIMe
qrHxdg7wRGzJwjRD9KvxmXnNSrATaEHYcpkpqbJnMHNVocCB4Wt4NVdwcHNZ
8VVc5LcLREILKAGyBJcZX8BZXwEc30I/CwASugHlQ6Z+py++nPMFfMxQx6XL
FN/tdclzWB0Qg7D2N0j0pMOi228NsLrNJUtRr7EOGQBar1Eg0FBoj5hzBiYd
NElLs7jJO8gxb+ZpxkUzbF/yyxRpqAMG9BnyOcsSJa4L+F85NgRi4yJaLQjy
srhOY47UBy6qSRZk4xIqtEq3I2qWHfsjhMBoSDwtscAS0DorKgK4FymanxXi
teI1vo5m2SpjhCB05kA4gNWEPhr1PPCy7BYgQ2uAd7sFqQhYACMTOsmaMdBh
MhuHqX2V4BWDogQ2fgBMfoBmQAFI5ywGLx+mCT01jYCKswzQCauUpDl0BkhC
QJNVvSr5WDHdIo2BJQ3j4x656ntmVazKiH/3CBX9o0+G8dg8BcwW8SrCET6L
N+V7xAALMCJBdVXAmYVG49riK657OLudrYCYtK5RGgA3ARZpkUB3AjIjYMIy
LZAAQVoyM+c3OtvDKznYCDw2gHZoRG0Mc15kyEvYqADIrlmaIUcTC/ISSYJe
6coPKQcWDNg9Ai0oRu4wA0huswJtJZaFAeOU8Q39qNSm4K1dA9gGJol9wVKu
8hYEmGBWRFfIlQLuOl3wO+YHK35WQAtYMAQEsQm4Al4E5wFpT5JYlK1icLuM
kXl+fgaNMj7CZprMxAmcn6NWOs6vU9R+XKhIBKIxBkAJFTkoiFjGTVKMtuHE
EvT0MEqGCknMDmBEBgCk4lDVxlF1yRcVGUCKswCNhdxSSjNFMJ1OWKwSVJQJ
6hRKCMgHJoDSaA1CYDn6CL/dFKsshokBqQP6RdyFCBUQrcEJAqlIRvAf2BCA
TrIIYGicITyOQa4BWxcoXcUMKpLdSN3tUPCENXNB4GhBOJhUNzi3EEQh9gOs
TCZVkST0eSVkvqJyXBZcC/W4ebAr+5MaCYAYaRoP1l/HGPagTa+FEu1Kxae5
MK0JcMmyMKNNlCwEFfJT1ecyWooTBDofhPmShGkPXbQWoDfhT4nyDuOlJApB
6AHLwivxOsuFYObESrJUQIcCSg1qMBRQxSBEp7lAOnHIrq62Fe+TvpSsmS5Q
K4EYMRFzUVe0ocILeSP2JNOLr9louSqBblCiAzDUPwfGAglLyg4FOmcxWQ4K
XDABM1C1Y8Gmx0Jzx33VLZgU4/K4iIrFEZaERWigIG567yBkYF7WSqWCx9ks
j1Itu+Y7aE2ABmN/7GHXb04OTQyJvX9XJhF+GMVgMUT1COY/YpegpnEy71GM
0loyDDE8OiNMHb46O0YZABo9vVTChAn5OAJaHykYdbQAHsE0wJ5yVKSSdLQW
yHx/ejcej//0fm2S2xWYDe9kdPD9TiPfo3nKr5FBxuASwGRrKURJlbLsht2S
HCCeVhIPOuRobysTg2ZThH+GyY/RLt4H6brE9SXCQ8HHSiTDyszSK1x0VF6X
ZH+YGZrMpthywP6IeJBW4mtCfCMVJBeT2J83Jp+uWe+z+Mh8AwqOJREdgCG5
WvY0maAgXHv+gS2WGSw9Difd7Z5XYO6/PjXfKTf8vbmtPu40UFVSP+EoaFIS
EskkZNIFKaQleQPdgwfDG0EYkSQG7i5upHgCawzIkYMZkrUwExpDMRdNC5IG
VianaNTVkzQOWWgM/B/NzoWhxNANZkkosO4c0hoD8ySYmT6uoGRpPUuwOp2P
JYcOPRNqA8UsaT4gPNkRKSApRAfgLSSpIDTI7fgM365YwtG8FHYHYDsFMVp3
LASJ6hx8ulrGTNDCXmIgJQbJU0nL4FTYrXL7oBU058rTQhWMkfrzztqfA9/F
NItzgi5OqygrKknJ5xJx2Ohc6MPzahWCD5rmZCxSh9JsyJTshhmBiQzySlni
50rsUz9jgvf1kJ/Xgr02CrK41FMtTATSqgbLd9EhunWrC5GfFQCPNBVWefqX
FUBGJiWZH+eN/OjSoPQgab1KDpYUagu0Y1uhgHZeJaelmaqk9Hrz6q+GmJag
XQEHLYOuj3GiqEsLqUXXTOKuQS516bofjWC3KFBGsgwAbJqoQFdntu1bMGfj
ZVGD5LvdbVUZvB6u0gx9/TolahAGIK+wZVrN0Y1qN0PQ52/cMDTUcfS/rIit
NM8NTYEOI8MHMWEMgy+45HR8ArqYLauVNC5bX2T72fGLHd1+R/9rVeakjFlv
ycAry4VG3X52dLIju1cefc/tjoqYm9sv9g93JDRj44AMlSJH01j4gfpkoLO/
iFDPqMRwDbqusDogCnMmmvAP8KswoBack21aNZhBbVqNQbRTpOk9OI53K/lu
tAuajsQmNMXz4OsT+fZ4Xi+yxxjWGuwHxnn8GDzMFgbzOWjKFWDEoIUjwQ58
W5mPXvz+7C3u3uNf8+Ur+vzm+N9/f/rm+Ag/n32///x588GQLc6+f/X750ft
p/bNw1cvXhy/PBIvw69m5yfj0Yv9/4AniNhHr16/PX31cv/5I+Fg63EKpCIh
uMEV5uUSXXlY18oASycq01AYggeHr//v/7E98+PH/0Fbl/bs0yf5JbCnHnxB
7SVGI40gvsIS3RpglHJWkokAFgoQInoyaKyCRzXHEAzYSGgmfvMOMQMr85sw
Wtreb+UPOOHOjwpnnR8JZ+u/rL0skDjw08AwDTY7v/cw3YV3/z863xXetR9/
8zsyAkd28LvfGoJ8UGCIuAVSTFKg/YBsnMvfZcgAZSBYZZfk2HQWkRQe6Yjb
RVhk5sWPP16gwBJOHOjIqAZ+qepShXpAkOUyDABvPgcbBo0wNKRlK8GQ+ntC
3oBnA8ZxTD6j0mWHR0fPYeS8Zh/0OM7Hj2fSAHfHtjS/cZv60ycatNljjWiP
FRzyUm5i4Dg34JUBjMKujElGNOhAxXHxLxcSFnATizRvw0u7ZjrmY2EDiq4p
daUd4Ft8/Zv+62iopY3zpDpphH53jG+l4YJQYLpO01cVMTCPm3bmoohXWaHB
ApJAOM4IwRw4YJ5eoouwRAs9pi0e8hagZwXDBTP/xQzNb8zDCyQEFDXXLCPn
vBAPt+npzgXh9eL58cvtDzvUFseFlpf1fBcxScsJjKfiljpVXHy4GEsiasT8
xanz6uz1hZDZZU2GcZHnpK2vhby4xMBTjjZH3u2PVcO04LW0YNlTogXj8U/N
yzI/Psa0ok+CcXrx0nULUU0MUED2u/SQ0erFyAe5nyKQjOkD6RI0ENiS9bDJ
KC2jAeNPaOw1s0azMXMBa9/S5KAMN1iZ9ZABaAgT84rz5bBdKfd4BUDr9mNj
d6O2H7AjG9OxiVXoASsAWLMVK7B5lZm2NnUcqBlDA1CzUKSl1zXpNsZVVbQd
17guRdS3jQ9WMkYd6zkSu7hhjsFv7CrNlyuyxspieYu0yj8g74OjsWySPGA+
Ha8YASIViZZLCeAWCwzPwHuI+9slpmWQZdeGsVnEwH8FjGUkYTGmbb7T9sTf
v3vfWCz4UWU2wJexcYq+LEp3KRZBt5jRvMAgDECjIi6pakUDXiACRkeEwdEZ
YPhCyCkw80bHZANetFyA8wN+7mBJ86LMAshRbR2AC4krgUwMa3ORXi0uNFTR
yje4kLhR2FU4y3CbhhZtXmCsLS64jGgkCW4SUDuS0mJjatxXh0DAMqSjZEt3
U0OFfjTApNosWkKR4QgUB0QsrUwwxEhCGggyTmjrA8eTInPoxbFQ4qcDowvx
NKJfqk/ScyWyXQiyEvGyFVAHfqSNpFaCSdNf6w+b5919FtSWpP4vDp5fUCZC
Nx695hQoettVAhKfFQkq1ZF50oj+g+eKjEAGj16DjNqGRd8xR781t5dXu2Z1
tQPDiSYYzVCjqIgDYAX3V0+J0XRRLFgPmmHrBe77YqRUEQtRlnz31aruv6wN
pPk9F8urCylK2seaN3hRXYk+exM8wMYj4XbjNGliNVsBauoPNNXl1Tl8p4lq
TEJ8Hok0DDVmRzpunPxm+MXOt/Y8YZQpcIHji2c0wVjkolUcyULEeRV9mBcA
9h3IQwJehxVHp0negSGBS0JR1UdR9Vko6ojw+3HUW8RfGknd4VssCfkntvWL
JcOwScf4adiaNsGEBaZbRFLAdBiZjEIcQUhshJIs4YH+BZrKMAW5V97K/lWQ
rjH7WSO5Gv5QSy1N+Q4wIPjrIgLngRzsNL8urkA+I4h39VypniutZ9T2eWP9
ddQY6mSWZoTFM95KI4o09QRuszmzJLVQpwBPEweRSzUk4VASClMY1B7KxDtD
IO8oF6cvDuUutBTxQjiSFv0cobg+7NeVjkMicYMc1CwCghw6bll6G36I7p7J
Zu7Ne1MelHNd+4um9WXYl3WzG80LpRn6YIF5D8qWPN6LqIOVI05YQUEXtTi5
InSoHnh/oI346CGjL9DuhOrLSbR1pEAP1Yp2ROkgCeKnLDEujzbITVrxryvo
cOowwy8q6xpRl64B8LnCrZFtYuoPkWbYCZCPSSGryxWsDtiz0kkuZZob+TTN
EiMrLDiTewIA11Ve3GQ8vuSq7RBDk2V6HzVAz6kmLNH3L+XmG1AA0W9+26M2
AYMMV0vaUH5UQ/cNRje6ZlLKmODzzxcsGl3xxadPpgomVu2WskpWItE/L24I
JMSgBIHFbFkL611mfIigV4NbMYjYkB0JPLCMj2BQHDCtolWlNkhgzhVqFbGf
0aJGbKM/QBdpyUsPVUubFA5pJdzGGsyconQtaE9kJJKsbqXrqT02ULJgCEOO
x8LimndcEiTHQggDsZUqGqJubLYHUFVj9KoebtvzM3DpbuYF7ox0NlvTZNCY
lrw9ZEReqNGOD4/OSDuD90WBiPVh5a42QLn2DszyBxWRBNiG89AaCcBqdEOl
h/xy/8UxqCL0KOu0XpHSx1W/oAdmhTlIgmSXemYeeK4VBSX1laL3EK3K04bF
fYkgET8RtanBgbLR4U3zhgdEvtQiTC9XYrsOGBkcw2+NtO/9y0i4iV0tlnXX
qV3zCkPRk3CbKQFNwSDE6tg4HE7bEwO1aQQi4YgS/aDPrChwB5gyQ8ROdXk7
lBPYTwWkYE3ayY0SOUHIWlrEDhCRywmLfR6Zt5KjKwEPZE4Z9EzbqtL17gQt
+xEQGSlqnuNy6HG/oYDVhgieiExVLZU28TvzorH/KBaCIbluChE1JZUilPCu
3B/uh92UApPpo/HG4N+moB4xjNpNV3mAMqZ2ZxrrOhKM//zP/xQJvribZ/Qx
i7bveZiR8XgOYr5jB5M10qXJNpCxJzPBTfPgufq0P2TLj5uGqBj0hhukq26H
acMISFsLbZOBjbx88HzceQ9m9qD3AMKOEdaOrnBi0kGRLuHQbrJOAMur5j39
n27LU7vqSo6mSfpmINq2ziKpslklo2iYGSEBwmlhW7Fw35kbfBvA2k7zCq41
vgK/mfDKcIiIOqRXllfQSL0nRhQPKnpQiQcSBKQ14mbcDuvFJDEvHWPxoDO1
tHQhIeKCYog5RZO7EV8RUUwYkF4bOzUGY6frcdPdQXevVWr9B3//wdQ7JWWr
tx8iL9ekzq5Mkm1TJ4nMe4JtnRwuVHaDPEncs3i3LpQxqItDPGBGQXjap+GV
yslNO7FPLZ/itrH/q3aToh1T2364uJo3Q1LoeIOC+JzUE5rHuI/WRrOhKzKY
PdMmpVASqIbLXUNsvsZpQufCaklDRdn4Upe0LwzT1U3/NhWoM5qmFe6U+Vqg
tLeM/fgBzHjXvJr/nSkBgnlomG52U9NYCP7BoYbeABTIT6ed6IbUDf34iXoN
kKbmlK8518qjBksIT6hOvN1B5YBJsDK5rFhKN0UmxqLAGlYoWqqwOoZiNgd7
m8Na3X/byjcz/wriZSTBE/DubNB+QAzNog2FylW7q7nZtNNYUjhjpTjlpEVn
B+HTGbGCcdeYEYAZVJuCXu/Tm+Dq4O460flvYTXaSe6DQKxVapgIpchxoDHN
/zuTdtO3VQe7pr1j/vgjPlftiDy/M7d0pkMFAxYJdCHabjWNkTwHGqMZstU0
FrpbBOyVmm/CfsIGUKyrK+4tod4HNkiI7dUGAFkHhly878xIKPHTRHo9Svuh
e4rpA/GKjFGFIPL5tFZIWzL9k/LtgKr0PFKSghd9BdKJIEmpZ+IpGZHuKASj
eoLHS8DR//gRk/5G8NKnT0Rfl6s0ZvJ4rRCt/R7xBZXJPfFALdRcbvz97e2V
NZ9b2+39YmbJ17JKhkMHi1VVa05oF/yE0p2FPyiOMBKNdHGiRRvutX3atj/F
Wdxk+3Qcv561u273dANoW10r5CGWjUG+NYaBtPM9IowJvUm20y2nW3nahVVD
AT19L/PnWi4aJroGiWZCUUsU9Y1N0z0YM5RdfJetom1Z9nCPkl7fvtz6+7JS
qo1Wir53qrW+y0wZemWDnpW6kI6nDUuXfyKbpRqyWdb2rjUTAl/4/9N4AF3f
hAfkxpiwGyQXtWYD6P12p4AioyzNePyQeVY9i6OTcLBucpCZcYzvV01Cs2Zt
YEZzm4+Vy8okdGSqG7rW9vsuSK4hxEIwtTt9tdzY0XdL0E2E9UxreqMSp6TV
Rg+Ig+hqbKwH9StTphqHWigZo+pMymIK1XIxL5xFimlCFUY9DYyy46g3QFft
6YUQS1eA5sl5VYujNCjFUdN296lQD2wwGcbGaa7eovPImAeHKZj9CPQdfSir
JgYMsFgd9xLbJIbYFP4JMHZUONpttA2wacfna9h25u+1F65ZtuLDrc2Pj5tR
xdaLeKXdlbsLeWSzbZq5keIZvEUqd8KYEq+I1UbCKphVmD0E8hX5lvCF4O6c
0IqaojF4RBAF/oZMVhV8Xk9/NWTMpVHdCp1yuFSeS9XS63BjmcOK8OY8F+4w
4qYubmXijos6y4nD0pxF9+lf5YYo7aQoe1S3I9YbE8NnWbvxK4+p4MKedstb
qM27+5d5t92VQQ5FI51wQKWn/oJvib0WZerrByjaDGh/7I5dmQONVdmQdF/j
+cdKd4b0/UcUBRlPatqDy3XgR60W3LAxbTwWCdSqnkRXIEnbTp2UFbvcVVOB
4p5yEmiYXKfxCjS3MHm13FlhE+tGLIlVytq8Y9+zy3i8e0agSatHcDq20cfH
6uOIR8CCp12xqzKDb1DodrY6xXHqzij4u6EyljdBII3mTelH3Szf/5WH1fJb
tb08Hsb58L44EVS6NhuZ4iQMc9lcGfJtwqxuxWI6VFReixTR7qww7/8C3p6P
6mIEbUaUkEqJU82vNHuRqPpO0u170NxN6gft4UNj7bidPAuRpDyjfXEansY6
Ont7DnxOI6ynMtTsUuxf5+2OdUeQ0lI2XohCTd/kgnGeNocgpMYsmgPQePJM
nsbAaLY8IqID+bJ5WbTCh08HzkjgrM/r4pzm2ck96XJ9j+N7vssD0m2VpQSG
UmfMbQrggD3Ynrgd8F4A53vS3oOxjg9Hz54KS08uRtPwZM98erL9cmd3bRF1
6/oeNAIW2/jfnvmy+bLYM+3my3NRkPe5jrE1Omxa8w9LrPMrBbl4tftbsyqD
fgD+u3OgdtMKkPyN+RQk0WckCTfW8tbaAlHrz12gzurotv6viyQxDniG1foX
gfP+et2fsvwPuWDjf9AVEyg/rxdLwV5i1ZTb2Hlq7Yp4cd9RbLuhLtQbzcax
tBm+f7F/SJYypo+BVkXXTVWD0Vy41l37+LjJU6Oz23RK9Y64jZaBNtjhrtFJ
6sOyalka911IaRmJbDx1ZhYnvJYEiC/q4bjPsB4IB3QaT6bW4SbgncAbmDhU
UuFxUYFCYnPdCQYV1vGljw+Pvm8DvnePYo4Iop5xJc5YplWDMuqyfd9QtSLu
zE+UZdIGuldhSGK+z7eevgfKJpOle1IfCb7hkAeYN0231PZsFYKMWtybpU45
tcqdUFUZKNlMs43I4NBPHH3C0Bv/EHHghGYo8lvAgUZPrB5wVRHL2OT+ZaRM
3qZbRYqdzPnm+VrCxG77SJ1MI0e4bU8/ylTG/lTvMgOll68A2zVIJLyTJbff
0zDfPzs6oZ+w3vb7NcvxeWv8CWeh9boFHbTHacfizO3J2+0/7pp5e+42SUvw
zS/yCxkiUGdLbnH/vSwB7os/SnP4zavX5wM9dJs2Qmygc5EJWZcrOtlNLWjO
EnjgX9sJzBBPl27bEwn4jqHCBB3iIiIaDrHsipiWCCUM8jWJMarTWNGOnoj0
5JRljvRELo0MDI2NY6wUHKP/MFLR54ZuyGWUPClR3q6+DKNVtaweqC+/odRG
d+XAaS4LEAGynJTcyalSmRYvMnqxvnzW3aJAqDPOrvQwM+onuRCCypA2uyn2
IkjctfGNh5wfaRK0RCLXd+YG/qEXDdHn3ec4mkgyBniaoC++hzSy0WrZxj3x
aEsHYWAc7FOOsCzRdEbGGh2Lk7at/dQE21rzCdd0j/7fRt1ZVu8RxiveOiSn
z17smVcyGr3QxkAb5XOHeP3m2R5C2mZtwLLu9XCC1H6nNQcW1nNhPSI0+AYO
MgIm23723QLNTXjpO0Ce3Bz/JWAW9Hcf2ChLW1mGmxatHCMyAVDFe1uGItjB
4zBGM3+SXPDInohtgAjt6Vam6U8+lwZpV6CrEAQgW//sxCewv3Uf+dEUElqm
equF7XPmsWEug/P5OcT5QAI9zsQFGuLf4I5SzyEgK1JqEjRhPz4GU3/Eo3i+
OVCown/07jt5F8d7Pep35+mOrx7+k0dIflL8j/Xjf9LaxvFwzoTN7sTHn2X/
/v2EEjVbm6xIcUxGO1CvlRFo0UZZKnSPRc3FdoBAH47FVpcw1oUgb0RSh6Z/
irXaN74UYXSOTw0GIrRFEX97GGkA7nkab7+ogd44/70NbxhSlfgZ0TUqo9fo
3yEJvEJ+Hp3RDrzsVP8Jmwy9Ks9Dlqo2SK7q2pcFnuDhnchrUynCoe0WHAQ/
UR3Qd3gJznuRlqCsauF8YlpRKXJn1JFQXOTmcIdeVEkAsViirpG2JvTdZRwa
ol/s19zW/N2d4aO62/zDssg5PddO7f70iDa9vimmDU+7pqp5p9m5bq/+9Lh0
J45GxiwgsBOcBgrWWj8skPY5oc9eKK0XTPvccNqXCag9JKTWj1Wbd9npa/6A
KbNeq6ut+70M8QKOpnGDNC+EzfgQVscBdzqA3mlbqjzUh4iG7WhnHcgtdRCp
ZxD80fF9e4bJDn/0vGDdNPhAz0cf4OH9FkKvs3fysq6H2wp/Q3sAGE1V+wC1
oMdttGl1f+7M8Sdo4F9cM559vz/ybQcsstPXZ6YdWCPvPR1Z1SePUlHMGJUC
3s/y/f6zY8efyNfAjHsvRuoGFSaetE2HewRk9VVyazj8sW85/G10dKtRuuXg
5lugvzr/TMv63B+2LlTm2x3oNhWVrQHg/2wAvjDMtKAq9a/ijS2SpXWd8REG
zUWhiaJzn5MslFeZM1odX1oe6loBbLIaRUWTfKPfA0IqXhgn8mctR1urb/jl
lDg81PWLhgQS1E93fild0x15C3P+dZWzRLf84cpkaC7RgHZoMpquZGlsymPq
JHrgIgp10WSdoN7At7A6LCiNH+gaj/6h7KZeM/WPN6eq4sHNOGtJJeq4Go43
MpLewft+egqdo+Z0lqBqK8B3O1wL9uqpM59ok4WM2LQbhEUA1t9tXOlPXZ8X
YK1VBgeWVKRkG9xVCHkHw2PjzXpVIZFFpR+VxTfbsur6oQXUCgUlFS7bEht4
Lj6tV5iOdoU3XOB5EOq0X8KIDrtHGWdldquOut+qg/vqlo9+f/Igu8xrMkSp
9YF8IPyiL5+ICRuPzaGj9/dkZK1fw3NPEtXbV0ev9ujO0eag/u+o7P+Tf4P/
/U5QPCmj16jnPj5uPssMxubgfymTE/HZmgPUGhcdUtcq0h1vzqC6iw43eQ1N
GANhfHmKy0f9XgDGlgBhaV+Qf+e8lz7PUDTiAudy/scXR3toHuDns7Mffn/+
5tX5RRuTkO+vKW98d0voa1FfSgWYNrPGl5qLZtO0xomwab72bA26huZCHAlH
u0Me9ZYGh6gTlMvdps65rjZFu0MihtzEkecAMJsV+LCqTZwZbVVR9SQ6YDTW
ydUNvIZc4fNGcoVnf+fkChA+kFyhZbOA+PlzFhDa/wLkOjQXjVxx0R5Mrl9g
tr8cueLM7iJX37EbcoXPG8kVnv2dkytA+EByhZbNAoLz9VkLCO/+AuQ6NJc7
PMavPdtfjlxxZneRK0jfK90auLrLHLj6O6NYWM2nPR169SCKbRr/HDV59RXo
9iEz+olWwZeb89/eNhAXWoWCXvA4TlRU/FPPll7S9bloTEuaIzOe3qS54s1g
+Eu1Wi5xW5FAaq4fpBO7FVelFRECdUsUeXL6gQ3opOGLtUooosBLyeWVzpX5
7nR0NM7kbdUjhHzkLEcsu6zei4JZ2jlYVYld7CnsUwFD4l6ahgJmb738ikDJ
SGSHgceMP2JF6ny9KZXHk9AL/49R9+fPsKoCFRyjQuYKZyLj5uKqvpWnZ8y3
B0fg8mcs4vJuSvHzaOL77nRnbHz8WIdZC4vKVmu8nQap2lbdxfIKiMvcHtk7
qpYtkdj2yNlpM+I6ddi0PZddLWyS3VJp9xuOleWGBjMv4itAP/bt7uy2yFAu
Z1uxTJ7z6VTH723lVNoNK+RPI7bGeJep+XgAC+Ly4+8eddZTx4OaKrEgvNc0
Gj/6ZPxovkTH2vwRL4/mGfz9A2GeOvlR3VMT/w4+H2nl7X6EF0f4z+z9XfvS
eTCiF3FdcMSRjWGWH1tSMbUR8fPBc4JVhXx1khP94KFU6Me5px/pS2/siBYP
O3JFRxg7e2LWQLnw5ZU6awyfL2iRO8HoTWuo1liellMCqzu0CPvoxCMquQk5
kLYRoU4tH6Jb8Qa8MATNAOdvPEwolQoeJsXid+2BU3l5KY2mQyhYU9WJ5XTD
2tthkHbVJbE0oV2jsQm0sgdNsEsc1+uKlTUu6AkClHmaGFgPehBXtOzXGiVa
aU95U+UQi2H/HQYb7mpdfLelDFsmU7w1zEqDnCQYpo26/LguKUFGTi1rBx+t
obRzsKiN13xqTkc2lzq1w6B7smkY+8HDoJ995zDo5WwaxnnwMOgf3TkMWaeb
xnE/B2tXwwP1rpygq43eyYuL3qvQq270srwTHtMI3oAmWK+j7lymQnW7JCtf
qWtsm7QbZKPjM6INsgr+jDqbktzppKc0CjA3V1wm0tDvHiWbRnGcGR/BXLP3
pLLdBQn4rQmqea9VGOuaWYXVm3/wShrvgbCkeswtb0A7Z8+cb02scBIncRy7
9sSf+bOAcT/m3oxFoeNYcaD6m1p4eSkPvNgLvHASuJ7nehaH+fmuO42dLdwK
cfck1QtgYU57Go8MQYsGKUzxYwsu6JbOzYaEAme3mQ0iAExmeoKv2rvyCZjE
eyYOJB6J2aHZe3JoH7oH1mwCROl6J8fHJwf7E3s6nZzMNGxN90+CqX947E0O
9x3L8Z1DDzBiW85sMjk+OPS3xF7PyMV+gwPf9gPX9ibO4eGBdXDk+4cH+5Z3
cHLkW0f7E61f92T/xA4OjgLP91x34jhH+yez6aE12betI+vEpn4/7RImnA4m
usdFfi4q/ENrNjs4PnTtk/19P7CPbO/YsQIH4HVPTo72NZBnx4fTE4DWgv+s
4OAw8GaT6X5wBPg58I+mQQcVvjs78qeeMzs5PLAPbTc42ndmlm3t275/dLiv
5194/mSyH5z4/v6hc2JPAyuwrUNvduQdH02dIz/QUYGkNGtQcdTymcYpksGM
TyJRsMvwqbZBo7id9vOEIXx48OqNYDVjvsUmlu0yywKw8Z/jB451H2PoDAEA
D/GE5apOmetYzINP8KplOzYNgLSZRHbkhkCb0AWRZ8J5EjIiz2Q2ZQngPOLe
JGJEk1FLkzyMfIcgDUJBjAjFxImi0Apj349CZnlhEvtWzCZuwhI7COOGCGMG
vUfWhNlWbCUAkYAOpUIDoB8BxYQ8cu2EMaCY2Pa4oJjYTZKYzXg0TRoyCSMi
EwZdBIAdP/TjaSAABBKJiUSSKLQjIJGYEYkwIJE4YjbSBQsS32eRkwBdQBdI
GpE3iz0eT50YOnGcYKvNB21s6sb50r2lgQu5O16TfD6Cl+kuH70XLMygv7fu
phkyw2HNs7pQdu75G55c6P7VZrfQEAfZhcsFJHsBChFsNehgRIJTDr9r9nSk
7wY7Mt9kHQ13el9g3KNNDLa57kcZjd+FpUnaSmzdK4vuqOpBhiaoGgDe0W3f
IctyrZIyvr6SJ0Q2IZGyBNEHQ1+vqfjRFgzdXHejW56qQVW/DpCwYOHxqHPw
6k5kKqz116t15YC6Nk6pt/ZkCz1o5Q3a7Wxr6Xfda1zB1rmmZUTXWq4RWlPS
YWhXSe7nquoOGH1pzh914zkS5k3I1upeqLoim+qrfmtg+EcWGYGVZFfgkTQ1
TGi/U5j2+801Wo/aUuXvsMEYeem9Ia8F6XkYsvxH/xj/YLxC1BK5w99raVfz
g1RFt40unF6ptWEugkurkr/BY8RHOuGYP8kBxFk1/a9PqfFbJSiDxPFwYJqR
hlxR5cP1OOzBYZI1HuuFSgYjJeYDYiXDDt59wRIqvtbGSvDqusbQ6UY5hEhV
VXWwjvBG7sGOqSRbGzy5q+NO+aP7e8bVHY6mmL14ykaXur2aUTllw57WkH/V
V7Pr6lXzv2RotfG7vqpzFWjOVZ/MHupQKcygXPlqztVst4GCnCtpAK/D2Hpd
bWHA9VbbdKRHbhjgqSNTuzlxIKUZs+3NVa5y67nML2qdlB3pz4FJza3pjM/Q
RoV+J9ZkGrBpxGFO4YRNYq/p3fICx57Fs6k7nQRJwG0WhwEPAQ+AotDi3NUA
YY7vOoEThDPGwJ3zwVx2p/YUzElvBqOFelPOp1bEGVqiUcAcHjk8hEEAucnU
m0z1PG93GrrQGdrcEz/xoiQKbO6EkTf1pizwtnYHMIxsqrPeBs6Tbt3WsWQI
vfAhHrDaat0d8pypb2Su+zznL+v02F/Q6XHQ5A98+z4SsJAI7lv8B6z4fSt9
3/Iit4LDY4NzNA0m9iSeWpMIxrLAC7Po82ziwmcP/iYTjp7bhE8mk8RxFP4Q
CrfxT8wzdQz5ELeY4uY+7I+P1ZNPIq+LWhO1RAON5QO9LZlFaw3x10+tY4Sh
9reg/fDyZTKXBhPShClFUdIODSm7Ke/bYU23a2YYPn5PF/WhJt7T5eBIaOM9
Yd2+7tuyU5IYulpe3/GiFodsKUoNgyexZ/7pHcjqbdnDrtmpJP2n9/TCG6Vs
9sDoG9gxWw8atvAP6IB75hEMzOONru6GfMrwVjiUd84vaMvcrs/sDs9ytzPt
jss7NHWxJVrq9IK7qz3aENWgK2Xw9YKqZHFVRXSFN9P9T7IXYRrnJXo9d0Cq
KeXOS+aT7yRySSi+7svAXjhAkaf5urUdvwr9awPcwQmqtaQYxRID/pzkAUF6
RMr0naxZUAu2oA8Q3bI/ZYhv4JwNFyL8DKb46VMBduzMxfkJc9l0X8OXm9DD
fO52YlfzuxcITfb1CYHD8EB74etw+M+etjjjfcdiDs/7MwylrzPxRkK0gYQv
KxjuCFAMakYZme+qlIGtww1MsdIOw2Pkg3JgrnnL9AWdsBJ5x+tcctd2o2yN
ZWU5lsom2PrQu2Qy3QO9/XOhpzTUTdAP72I+CHrfse+H3vm50FNW4ibohzdH
HwQ97nfeD777BUjn6i7SGdpz3QA/GK1HVIPIbGoQaWd0RFmyj48HyxQJ70Yc
0lQXJCKDgt0kSjC0F33iQRLBr9gfzk1dtSHcn6rjeKnq9JKVX785MTMUanip
FEiqpuIbzS+DXioRFRXlFXCz90kTXCCBQHll4p2bYpXF4HHTbcshwxMvh2Ms
6iRuAcGO8E7BBtYm4tmfojyEY3KsYzfuHsoRB2HEOZq0ltkYdJhGRCQRHtGp
KE5OR36yEmZy21YCG678JJNGxD2rbS6GyPmQ1aCaYzVrt2nhYdpY3L29Squ5
Fn2Q6AEsF6IcBC5Ycy6oV85dDYll00s8DiOK4Om1nlfNGa8f3EPzBx6a+ysM
ZNZqkfdfnwJ98BB/zt+rOsayvjnW5gNYsIj1nOqm0EPW9qAKt8Oq5JwiUMQw
1yzNRPn5U0Ffu/pLQntg/WiYG24TqRC9liOIaYmcalqbPEsv6SLM7rjtzWZF
3oTRxVUsuJYF5TSuxBUqVBhfXmei5mpGWYq6Nm6K/wFYcoIYDFNzMOUi4h0c
dIsoOZXaThcd1RV3jlYRz1mZFgQ+MrO4WJXVTNZsGdp02zMYwl4SKogj1Mz7
iKb5rqrmeUMXgAx5rS2OShfWCPyai/RyXjcIVi9iKuBI3vLSWJCSAAXTUGEz
RKyITi8kRTY+TXtUTd3Iq8MqiBgXY1Xi3SbZbUshwOWyBMX6JQK7BrG/Itmb
suheVydmo2q9P3iDpUozAYS2xdL0bSgRCBMpOciqXBxDxBoGeDVALS9vkrQh
BBeKRGhJUk/eNaPkXhtPxfPr6SIVBRswZCwOU8sNSdHRgl1RfXi8BiaNVhnd
SdBeg0D7Qim7zAs547IoFALUYduqWnGZwCd2LRgJR6JdoqsElilkeEXDSXsd
NMotmBNvqsGrU3v3l8wkUmP9S5l07KN8o6sl5EHD9pJouZAaNTHtChxN0Bmn
REBofeKiA7HesDIWckGKVtTLklK0qp3DOtBoKnXecNpCk0cp12621i5Sv0u1
7BkPUEaydmcJhBi1N9uua2qVE97YCOFtr/q8yPN9wElWkQd8Vxq+2OCUBNQp
YDJ0CqG9Jalh/WdHJ7+pVuFv7d88wT/depw9/atEtBzue2V2UDnKtFfaYGAs
1V6N6fTHrNYGHRvfUzQJiA7lF61BiQUNXz8brXKY3JW8jIvqHjwbNUSg3wJ+
5/LsGqpjuqBD9N4ElCUtdQ/nbqQR4Xeddi8zOIO/q6qJZ+JeGvIvGon7UVMv
l7b2DVGiEm9JETUyZdJ/bIJPyCW35wjXvbbSzRzlGMtu/0pXtTUd4SVaOdUd
gkXZYEVA58+lE0rr9RKYTlieUtuO3ohLaW4bEwNBVmIUiH1J23V4v0sjNNc4
eZVmIDveHZy+dp33zTa8KCksNGp0OyIpWNLtiQdpHRWYhhzHtBFTgQS8AwWq
AkmKCOgvXaXPcbeZIE5WwGWQido9oC4EXH6Lxp44vJwVl+LQurl99HwHkQxi
eiEYhaiJrjSLu+IJ7z4pwxREIXjM2sVozV1oVJepUGnG8pjEyaqEXsp2Vupa
vqKxB/6yAhGzWowAOymJm/7h7BtOV3Ncg7hekigR1pLQpoCQw4yXC3ATzHfq
0/vdO8jMFcVoe26JKuTSpKWyuFg2Bac0GmhIct212TUWRdxc2056EeeoLoUT
DpR0ZHRrGyUlcrN8VJRga8qbuR7sZqhia0DnaKYJxZ6lV1xIMZZfUTqOkAdV
21Bu2YtrCEFTUhGAWKGbMHFTlFdC2WWtAiGClxPrCCZxNOgt2n1/AFsLxujF
bLIUTe4aG1yLBgQEGS5C0fQuQcKp6a3pZhYM+5Cy6AW2q1t47YO8q7dbX1mW
kUFB1Es0weAUKqXjgdrY8roSuTPXujIPLLTW2IDGep00WSatLY52Z2G0znHB
Ng7/bXOZXXNBnCr1iQ3HOqK3jOZO9u/M+ZbYTLRcy7N8a2JNrcCaWcwKrciK
LW4ltmXbtmO7tmf79sSe2oE9s5mNiYGxze1EdEdX4WF3QIe24ziu4zm+M3Gm
TuDMHOaETuTEDncS13Jt13Fd13N9d+JO3cCducwN3ciNXe6K7tQM5lue5dme
47me5/nexJt6gTfzmBd6kRd73Et8y7d9x3d9z/f9iT/1A3/mM9xY9GOf+9Cd
obJR6XZxuf6AqOZOYkKCN4ndME5cO7bi0AtmQZDYk9ibWl6QxLHj2Y4bxU4w
4Z4Tw5BOzNgsmTqT0ONRYgdx0t9wnvg89hx7MsPdyKmfzNxJkkxjAGkWxjDj
OIwCzqaAjkloT3gQA9LjMGFhDDoiZNMto7kHWQAYuUEYxjEgdGJDj66bMHs6
5Z4bTt0oid14As+i2LajyAoB3TPHnURJ4DOAOEoSvw9gnDDXnUU2t6ZxEsVJ
zIJ4GnKH+cyNYFmc2cxO3AAectd1QjuOg5hNuDVxnCgJXX/LqFoMWh/iGSDe
stg0iHBUi5JgA4sFkW95bjRjDnQTeB5QRoidA66ngMnQtSazBBbPqNrpWh+m
HreYF8WBHTGgG6AAxJ4fJjBLLwmnCbwfzYB2pkhjCUfycmGpgtD2Zm7oa6ve
5nd11l7UpxOo9acOAyKPuA+IdNhkGvsTZiXTaBJ4duDB+kSw+Lbjzaw4mkVA
XVMYf+rNgCBj25quoZZFDnLIbBpFthU77nTi+zMGsCeTEH6ZukAxMFYI/fEE
ps/sxHe9KbeCSQRruGV8q66K/M7cXrtfiiTIjj7F1uNp51i1cwR8Tv0Y0DRj
AELIYD34ZGpHsBAsiZgbA5sCP9keS5LZNIyBXv0ZD3E5rZnDfT4VW3f/30sb
y/pVXvwqL+6VFxafBW7ieRFL2AwWxJpMAh8kQeDaoQ/zAYqcTrBOH4wK2MLE
msCyHX8Wx5HFJqyPWjYFAIOp7QBtTAC+qcuTqRtOQPXFU98JGQgcJwiiOOI2
oBmecRgTMBEm02nke19eXjizwJna05kN3BnZIAsBItebsNnUC2FZOQudYDpJ
nJnnOtYUsBnDsnvwv2TKJs7M/+nyYmz9Q0mMX+2TX+XNV5c34XQWTvx4Eoah
Z89QR1t4EiiMfQAarIfYB+5w7Kk7mwEoLuCA+8DBU2a50yic2GuojQNAmIML
63CPT2F1Iz+aJTHQD/D9ZBZ7Fhgws0kQoXiZcrBOGBDzbMJtzPL7CvIGJEuC
uE9mLAwZ/A2TyAkiEKyTBIyU2IkD3warCpjH5bGTWAwWKwSbygehEMT/NPLm
VwvlV4nxAIkBk/egS9cH3o0s25tw0FHgWrDQm1jAR74FMsUBQo4nzJ14PsgK
WAZwexwvwqOHa2vPJw6spTvl4L+4oM+mlhskPtCMkySTKIYvjgMCBObuRhM7
CD2g6Igz12cJkIL/5SUGeCUW0JbrAuFY4JZ5/gxUsRMwNwlgndkMyM+fgTnm
M/DGZnySgKCLQs9P/FkScetnSAz7H0pi/Gqh/Cpvvrq8iSJwgPDUMneiAOY8
m4AzEMHs43jGOeAkdiKgKCfwnBA8IJAVLpg0VpDMIg5mxVoEhYFnBTJqFjoe
SCjuM2fqJnhE2QK3iNkRD2CZvcSDdU68YBp59hRdpsCKbS8AJ+zLyxubTUBm
JnwyC13bT8ARmziRN5naNktmMwsI3YHZTW2wlZiD5w5ANE5CcPZ8Bq/y6J9G
3vxqofwqMR4SQ/HxzI4XzaacgU3CYRn4bDaFBYJltzHsyj3fDsDvSOIwiPgM
/BAMVmJtAzw/tB5zhf7A6gDxw6d25CI3RuAmWLbPwehxOVgqUWB7YKlMJrNg
Enig9BLglHjKeOBGX15ihCDgZoFrTz07BsJweBRPY7C0phYsD7pqESxcDFw1
sVkw8ZkVgzTxkdJAETuTREiMx4/NV7R52hRCag8XHaltyu/TCiTFrWGMrKlh
fGOepB943EupOKIT6JtKwOsbUo8Gb+96BBjHPeTLkqtTnbqQwrEnOPbhnOWX
XIzXT164ZwR9Qxh/e7SvrmwYP8KcoiT9YGLe2O3NHHeD5U6pvHUDayW+Lvl1
Wqyq7FYeXqdXcH8fGFzsulGGmJbdTuP8tPuLH6mhYWTMVMOcHjmCxLJ2kYS2
8bdh9oRCH1F4xDOOG5tNofFm7WWmE+1M0jUO+0dHI3GhA1Z/bB96XkCP4O8F
HkYVj3iMqUtV/01ReEBvob8ObwO8mMfS3ZFViYR5kY/0236ayxN25WLSZOOj
s30EhNHC0e1NNeWVtTfgrSU3V9GcLzplpHoE1C/Cryqa9kvvA26/Md/wRYH5
r7FeBFNk4qrLjPH2sVQkamI90G8w22n0VFYEQF5Z4m0J4jIqzOGWWQ7YauhK
Bbr86RvKhHpIL5suKVXd0AI1/aBmHehEz4SjJsJ0oDsiUNir3l63JRepSqhg
kLUj6W1xBPHaqTpGrpVsXK9x2vZGxAALpK7G2UD7okARSxJcXzy3tony0TpC
ysQOGorH4wXrP/qO3fyoUTilwzcPxKzOFFkd6SRAJKSKhxX5I8qeprxRkLBA
eJiH0t7mtd051Lgjh9yuxK+V+rWbjSDSPGX5hXoF/FUBQEi+stgpSikaA7ES
8vqG8xxLbqmLMOp5WawuSUS1uRffYGGIpNAHKzlmPIgFxioE1IjKEcgLdbJ0
kcp6aaw2FwWI9omn7jj+xjyWN6uIe83wvbvqaLTYHsrJxFRuvgjxKmNcf+2C
ZwXZGwntABnQTeRNeh5lJKryuPLAj6zku04uLXWLigVaM52AtGZYyF5v1iGp
thkWEO8NerVh1KsLmN4+cUd7XHxNkXqoBeRtqtCyU8mjrXZLuOhVfugeCMWc
3ZIl9ah7Lqu+KUaU/j+SSdp0TEsgvrmvKLvs1TiRB1DgmSjzKaqu5G11OwXm
mFRYtxt1wqNXq4SqFK0VCumUFiGEuIZGFT0lcJfa/timdWOKmnzxu98O6vNP
pCaE7YT807ETvpdpW58x+KDNMG7Wv1Nd42yO9+Mh42vrK6+o2XCJWdsTZT91
39NJhvgXNCOQCF5qBvOThTbVGQed5ZrMtu4RcloFR6zCTYnnVihlvizilbx+
tO2iq4KQgclK3nyUEF9+BXbdnK0yqlHRv2hNnqnoGrREj1FUrORpk74dImyC
rgwnVKCoy5kQdssR3Tyup/e2pVJaMm1xTYTRMgVZrGsqsTH79NWm5HYiJ1gf
pJPBe9wRiL7SpLM0q8uFLISMaZz4/qqhwHYYmvQT3c57ghfHtVVUm5ZiocUt
d70i3gjDepUyQQO20aGmE0VN4or2Wl2cpBMXvGXhW6ey3tMfxOWhxv8DbXVr
XELgAAA=

-->

</rfc>
