<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.6 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC7049 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7049.xml">
<!ENTITY I-D.ietf-core-yang-cbor SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-yang-cbor.xml">
<!ENTITY I-D.ietf-core-sid SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-core-sid.xml">
<!ENTITY RFC7950 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7950.xml">
<!ENTITY RFC5652 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
<!ENTITY RFC8152 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8152.xml">
<!ENTITY RFC8366 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8366.xml">
<!ENTITY RFC3688 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml">
<!ENTITY RFC6020 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6020.xml">
<!ENTITY I-D.ietf-anima-bootstrapping-keyinfra SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-anima-bootstrapping-keyinfra.xml">
<!ENTITY I-D.ietf-ace-coap-est SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-ace-coap-est.xml">
<!ENTITY I-D.selander-ace-ake-authz SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.selander-ace-ake-authz.xml">
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY I-D.ietf-netmod-yang-tree-diagrams SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-netmod-yang-tree-diagrams.xml">
<!ENTITY RFC6690 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6690.xml">
<!ENTITY RFC7030 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7030.xml">
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-anima-constrained-voucher-09" category="std">

  <front>
    <title abbrev="Constrained Voucher">Constrained Voucher Artifacts for Bootstrapping Protocols</title>

    <author initials="M." surname="Richardson" fullname="Michael Richardson">
      <organization>Sandelman Software Works</organization>
      <address>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>
    <author initials="P." surname="van der Stok" fullname="Peter van der Stok">
      <organization>vanderstok consultancy</organization>
      <address>
        <email>consultancy@vanderstok.org</email>
      </address>
    </author>
    <author initials="P." surname="Kampanakis" fullname="Panos Kampanakis">
      <organization>Cisco Systems</organization>
      <address>
        <email>pkampana@cisco.com</email>
      </address>
    </author>

    <date year="2020" month="November" day="02"/>

    <area>Internet</area>
    <workgroup>anima Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document defines a strategy to securely assign a pledge to an
owner, using an artifact signed, directly or indirectly, by the
pledge’s manufacturer.  This artifact is known as a “voucher”.</t>

<t>This document builds upon the work in <xref target="RFC8366"/>, encoding
the resulting artifact in CBOR.  Use with two signature technologies are
described.</t>

<t>Additionally, this document explains how constrained vouchers may be
transported as an extension to the <xref target="I-D.ietf-ace-coap-est"/> protocol.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Enrollment of new nodes into constrained networks with constrained nodes
present unique challenges.</t>

<t>There are bandwidth and code space issues to contend.
A solution such as <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/> may be too large in terms of
code space or bandwidth required.</t>

<t>This document defines a constrained version of <xref target="RFC8366"/>.
Rather than serializing the YANG definition in JSON, it is serialized into CBOR (<xref target="RFC7049"/>).</t>

<t>This document follows a similar, but not identical structure as <xref target="RFC8366"/> and supplements the brski part to <xref target="I-D.ietf-ace-coap-est"/>.</t>

<t>There are three constrained situations described in this document:
1. CMS signed CBOR encoded vouchers transported using CoAP, protected by DTLS (coaps).
2. COSE signed CBOR encoded vouchers transported using CoAP, protected by EDHOC or DTLS.
3. COSE signed CBOR encoded vouchers, integrated into the key exchange as described by <xref target="I-D.selander-ace-ake-authz"/></t>

<t>Additional sections have been added concerning:</t>

<t><list style="numbers">
  <t>Addition of voucher-request specification as defined in <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/>,</t>
  <t>Addition to <xref target="I-D.ietf-ace-coap-est"/> of voucher transport requests over CoAP.</t>
</list></t>

<t>The CBOR definitions for this constrained voucher format are defined using the mechanism describe in <xref target="I-D.ietf-core-yang-cbor"/> using the SID mechanism explained in <xref target="I-D.ietf-core-sid"/>.
As the tooling to convert YANG documents into an list of SID keys is still in its infancy, the table of SID values presented here should be considered normative rather than the
output of the pyang tool.</t>

<t>Two methods of signing the resulting CBOR object are described in this
document:</t>

<t><list style="numbers">
  <t>One is CMS <xref target="RFC5652"/>.</t>
  <t>The other is COSE_Sign1 <xref target="RFC8152"/> objects.</t>
</list></t>

</section>
<section anchor="Terminology" title="Terminology">

<t>The following terms are defined in <xref target="RFC8366"/>, and are used
identically as in that document: artifact, imprint, domain, Join
Registrar/Coordinator (JRC), Manufacturer Authorized Signing Authority
(MASA), pledge, Trust of First Use (TOFU), and Voucher.</t>

</section>
<section anchor="reqlang" title="Requirements Language">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL
NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”,
“MAY”, and “OPTIONAL” in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
<section anchor="survey-of-voucher-types" title="Survey of Voucher Types">

<t><xref target="RFC8366"/> provides for vouchers that assert proximity, that authenticate the registrar  and that include different amounts of anti-replay protection.</t>

<t>This document does not make any extensions to the types of vouchers.</t>

<t>Time based vouchers are included in this definition, but given that constrained devices  are extremely unlikely to have accurate time, their use is very unlikely.
Most users of these constrained vouchers will be online and will use live nonces to provide anti-replay protection.</t>

<t><xref target="RFC8366"/> defined only the voucher artifact, and not the Voucher Request artifact, which was defined in <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/>.</t>

<t>This document defines both a constrained voucher and a constrained voucher-request.
They are presented in the order “voucher-request”, followed by a “voucher” response as this is the time order that they occur.</t>

<t>This document defines both CMS-signed voucher requests and responses, and COSE signed voucher requests and responses.
The use of CMS signatures implies the use of PKIX format certificates.
The pinned-domain-cert present in a voucher, is the certificate of the Registrar.</t>

<t>The constrained voucher and constrained voucher request MUST be signed.</t>

<t>The use of the two signing formats permit the use of both PKIX format certificates, and raw public keys (RPK).</t>

<t>When RPKs are used, the voucher produced by the MASA pins the raw public key of the Registrar: the pinned-domain-subject-public-key-info in a voucher, is the raw public
key of the Registrar.
This is described in the YANG definition for the constrained voucher.</t>

</section>
<section anchor="discovery-and-uri" title="Discovery and URI">

<t>This section describes the BRSKI extensions to EST-coaps <xref target="I-D.ietf-ace-coap-est"/> to transport the voucher between registrar, proxy and pledge over CoAP.
The extensions are targeted to low-resource networks with small packets.
Saving header space is important and the EST-coaps URI is shorter than the EST URI.</t>

<t>The presence and location of (path to) the management data are discovered by sending a GET request to “/.well-known/core” including a resource type (RT) parameter with the value “ace.est” <xref target="RFC6690"/>.
Upon success, the return payload will contain the root resource of the EST resources.
It is up to the implementation to choose its root resource; throughout this document the
example root resource /est is used.</t>

<t>The EST-coaps server URIs differ from the EST URI by replacing the scheme https by coaps and by specifying shorter resource path names:</t>

<figure><artwork><![CDATA[
  coaps://www.example.com/est/short-name
]]></artwork></figure>

<t>Figure 5 in section 3.2.2 of <xref target="RFC7030"/> enumerates the operations and corresponding paths which are supported by EST.
<xref target="est-uri"/> provides the mapping from the BRSKI extension URI path to the EST-coaps URI path.</t>

<texttable title="BRSKI path to EST-coaps path" anchor="est-uri">
      <ttcol align='left'>BRSKI</ttcol>
      <ttcol align='left'>EST-coaps</ttcol>
      <c>/requestvoucher</c>
      <c>/rv</c>
      <c>/voucher_status</c>
      <c>/vs</c>
      <c>/enrollstatus</c>
      <c>/es</c>
      <c>/requestauditlog</c>
      <c>/ra</c>
</texttable>

<t>/requestvoucher, /voucher_status and /enrollstatus are needed between
pledge and Registrar.</t>

<t>When discovering the root path for the EST resources, the server MAY return
the full resource paths and the used content types. This is useful when
multiple content types are specified for EST-coaps server. For example, the
following more complete response is possible.</t>

<t>[ EDNOTE: spell out where voucher artifacts are used in
  BRSKI flows since the APIs ]</t>

<t>[ EDNOTE: The /requestauditlog and /voucher-status are exchanged by the
Registrar and MASA. The JRC will likely talk to MASA over a normal
(not constrained) medium. Do we need /ra and /vs? Do we need to
remove them from the example too? Also what happens to the
voucher-request and response in this case? Is MASA supposed to
support contrained vouchers? ]</t>

<figure><artwork><![CDATA[
  REQ: GET /.well-known/core?rt=brski*

  RES: 2.05 Content
  </b>; rt="brski"
  </b/rv>; rt="brski.rv";ct=TBD2 TBD3
  </b/vs>; rt="brski.vs";ct=50 60
  </b/es>; rt="brski.es";ct=50 60
]]></artwork></figure>

<t>The return of the content-types allows the client to choose the most appropriate one from multiple content types.</t>

<t>ct=TBD2 stands for Content-Format “application/voucher-cms+cbor,
and ct=TBD3 stands for Content-Format “application/voucher-cose+cbor”.</t>

<t>Content-Formats TBD2 and TBD3 are defined in this document.</t>

<t>The Content-Format (“application/json”) 50 MAY be supported.
Content-Formats (“application/cbor”) 60, TBD2, and TBD3 MUST be supported by the Registrar.</t>

<t>The Pledge and MASA need to support one or more formats for the voucher.
The MASA needds to support whatever formats that the pledge’s produced by that manufacturer supports.</t>

</section>
<section anchor="artifacts" title="Artifacts">

<t>This section describes the abstract (tree) definition as explained
in <xref target="I-D.ietf-netmod-yang-tree-diagrams"/> first.  This provides a high-level
view of the contents of each artifact.</t>

<t>Then the assigned SID values are presented. These have been assigned using
the rules in <xref target="I-D.ietf-core-sid"/>, with an allocation that was made
via the http://comi.space service.</t>

<section anchor="voucher-request-artifact" title="Voucher Request artifact">

<section anchor="tree-diagram" title="Tree Diagram">

<t>The following diagram is largely a duplicate of the contents of <xref target="RFC8366"/>,
with the addition of proximity-registrar-subject-public-key-info,
proximity-registrar-cert, and prior-signed-voucher-request.</t>

<t>prior-signed-voucher-request is only used between the Registrar and the MASA.
proximity-registrar-subject-public-key-info replaces proximity-registrar-cert
for the extremely constrained cases.</t>

<figure><artwork><![CDATA[
module: ietf-constrained-voucher-request

  grouping voucher-request-constrained-grouping
    +-- voucher
       +-- created-on?
       |       yang:date-and-time
       +-- expires-on?
       |       yang:date-and-time
       +-- assertion
       |       enumeration
       +-- serial-number
       |       string
       +-- idevid-issuer?
       |       binary
       +-- pinned-domain-cert?
       |       binary
       +-- domain-cert-revocation-checks?
       |       boolean
       +-- nonce?
       |       binary
       +-- last-renewal-date?
       |       yang:date-and-time
       +-- proximity-registrar-subject-public-key-info?
       |       binary
       +-- proximity-registrar-sha256-of-subject-public-key-info?
       |       binary
       +-- proximity-registrar-cert?
       |       binary
       +-- prior-signed-voucher-request?
               binary
]]></artwork></figure>

</section>
<section anchor="sid-values" title="SID values">

<figure><artwork><![CDATA[
           
      SID Assigned to
--------- -------------------------------------------------- 
     2501 data /ietf-constrained-voucher-request:voucher
     2502 data .../assertion
     2503 data .../created-on
     2504 data .../domain-cert-revocation-checks
     2505 data .../expires-on
     2506 data .../idevid-issuer
     2507 data .../last-renewal-date
     2508 data /ietf-constrained-voucher-request:voucher/nonce
     2509 data .../pinned-domain-cert
     2510 data .../prior-signed-voucher-request
     2511 data .../proximity-registrar-cert
     2512 data mity-registrar-sha256-of-subject-public-key-info
     2513 data .../proximity-registrar-subject-public-key-info
     2514 data .../serial-number
           
 WARNING, obsolete definitions
]]></artwork></figure>

</section>
<section anchor="yang-module" title="YANG Module">

<t>In the constrained-voucher-request YANG module, the voucher is “augmented” within the “used” grouping statement such that one continuous set of SID values is generated for the constrained-voucher-request module name, all voucher attributes, and the constrained-voucher-request attribute. Two attributes of the voucher are “refined” to be optional.</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-constrained-voucher-request@2019-09-01.yang"
module ietf-constrained-voucher-request {
  yang-version 1.1;

  namespace
    "urn:ietf:params:xml:ns:yang:ietf-constrained-voucher-request";
  prefix "constrained";

  import ietf-restconf {
    prefix rc;
    description
      "This import statement is only present to access
       the yang-data extension defined in RFC 8040.";
    reference "RFC 8040: RESTCONF Protocol";
  }

  import ietf-voucher {
    prefix "v";
  }

  organization
   "IETF ANIMA Working Group";

  contact
   "WG Web:   <http://tools.ietf.org/wg/anima/>
    WG List:  <mailto:anima@ietf.org>
    Author:   Michael Richardson
              <mailto:mcr+ietf@sandelman.ca>
    Author:   Peter van der Stok
              <mailto: consultancy@vanderstok.org>
    Author:   Panos Kampanakis
              <mailto: pkampana@cisco.com>";
  description
   "This module defines the format for a voucher request,
    which is produced by a pledge to request a voucher.
    The voucher-request is sent to the potential owner's
    Registrar, which in turn sends the voucher request to
    the manufacturer or delegate (MASA).

    A voucher is then returned to the pledge, binding the
    pledge to the owner.  This is a constrained version of the
    voucher-request present in
    draft-ietf-anima-bootstrap-keyinfra.txt.

    This version provides a very restricted subset appropriate
    for very constrained devices.
    In particular, it assumes that nonce-ful operation is
    always required, that expiration dates are rather weak, as no
    clocks can be assumed, and that the Registrar is identified
    by a pinned Raw Public Key.

    The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
    'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY',
    and 'OPTIONAL' in the module text are to be interpreted as
    described in RFC 2119.";

  revision "2019-09-01" {
    description
     "Initial version";
    reference
     "RFC XXXX: Voucher Profile for Constrained Devices";
  }

  rc:yang-data voucher-request-constrained-artifact {
    // YANG data template for a voucher.
    uses voucher-request-constrained-grouping;
  }

  // Grouping defined for future usage
  grouping voucher-request-constrained-grouping {
    description
      "Grouping to allow reuse/extensions in future work.";

    uses v:voucher-artifact-grouping {

      refine voucher/created-on {
          mandatory  false;
      }

      refine voucher/pinned-domain-cert {
          mandatory  false;
      }


      augment "voucher" {
        description "Base the constrained voucher-request upon the
          regular one";

        leaf proximity-registrar-subject-public-key-info {
          type binary;
          description
            "The proximity-registrar-subject-public-key-info replaces
 	     the proximit-registrar-cert in constrained uses of
             the voucher-request.
             The proximity-registrar-subject-public-key-info is the
             Raw Public Key of the Registrar. This field is encoded
             as specified in RFC7250, section 3.
             The ECDSA algorithm MUST be supported.
             The EdDSA algorithm as specified in
             draft-ietf-tls-rfc4492bis-17 SHOULD be supported.
             Support for the DSA algorithm is not recommended.
             Support for the RSA algorithm is MAY, but due to 
             size is discouraged.";
        }

        leaf proximity-registrar-sha256-of-subject-public-key-info {
          type binary;
          description
            "The proximity-registrar-sha256-of-subject-public-key-info
             is an alternative to 
             proximity-registrar-subject-public-key-info.
             and pinned-domain-cert.  In many cases the
             public key of the domain has already been transmitted
             during the key agreement protocol, and it is wasteful
             to transmit the public key another two times.
             The use of a hash of public key info, at 32-bytes for
             sha256 is a significant savings compared to an RSA
             public key, but is only a minor savings compared to
             a 256-bit ECDSA public-key.
             Algorithm agility is provided by extensions to this
             specifications which define new leaf for other hash
             types.";
        }

        leaf proximity-registrar-cert {
          type binary;
          description
            "An X.509 v3 certificate structure as specified by
             RFC 5280,
             Section 4 encoded using the ASN.1 distinguished encoding
             rules (DER), as specified in ITU-T X.690.

             The first certificate in the Registrar TLS server
             certificate_list sequence  (see [RFC5246]) presented by
             the Registrar to the Pledge. This MUST be populated in a
             Pledge's voucher request if the proximity assertion is
             populated.";
        }

        leaf prior-signed-voucher-request {
          type binary;
          description
            "If it is necessary to change a voucher, or re-sign and
             forward a voucher that was previously provided along a
             protocol path, then the previously signed voucher
             SHOULD be included in this field.

             For example, a pledge might sign a proximity voucher,
             which an intermediate registrar then re-signs to
             make its own proximity assertion.  This is a simple
             mechanism for a chain of trusted parties to change a
             voucher, while maintaining the prior signature
             information.

             The pledge MUST ignore all prior voucher information
             when accepting a voucher for imprinting. Other
             parties MAY examine the prior signed voucher
             information for the purposes of policy decisions.
             For example this information could be useful to a
             MASA to determine that both pledge and registrar
             agree on proximity assertions. The MASA SHOULD
             remove all prior-signed-voucher-request information when
             signing a voucher for imprinting so as to minimize the
             final voucher size.";
        }
      }
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="example2" title="Example voucher request artifact">

<t>Below is a CBOR serialization of the constrained-voucher-request is shown in diagnostic CBOR notation. The enum value of the assertion field is calculated to be zero by following the algorithm described in section 9.6.4.2 of <xref target="RFC7950"/>.</t>

<figure><artwork><![CDATA[
{
  2501: {
    +2 : "2016-10-07T19:31:42Z", / SID= 2503, created-on /
    +4 : "2016-10-21T19:31:42Z", / SID= 2505, expires-on /
    +1 : 2,                      / SID= 2502, assertion /
                                 /                "proximity" /
    +13: "JADA123456789",        / SID= 2514, serial-number /
    +5 : h'01020D0F',            / SID= 2506, idevid-issuer /
    +10: h'cert.der',            / SID=2511, proximity-registrar-cert/
    +3 : true,                   / SID= 2504, domain-cert
                                                  -revocation-checks/
    +6 : "2017-10-07T19:31:42Z", / SID= 2507, last-renewal-date /
    +12: h'key_info'             / SID= 2513, proximity-registrar
                                         -subject-public-key-info /
  }
}



]]></artwork></figure>

</section>
</section>
<section anchor="voucher-artifact" title="Voucher artifact">

<t>The voucher’s primary purpose is to securely assign a pledge to an
owner.  The voucher informs the pledge which entity it should
consider to be its owner.</t>

<t>This document defines a voucher that is a CBOR encoded instance of
the YANG module defined in Section 5.3 that has been signed with CMS
or with COSE.</t>

<section anchor="tree-diagram-1" title="Tree Diagram">

<t>The following diagram is largely a duplicate of the contents of <xref target="RFC8366"/>,
with only the addition of pinned-domain-subject-public-key-info.</t>

<figure><artwork><![CDATA[
module: ietf-constrained-voucher

  grouping voucher-constrained-grouping
    +-- voucher
       +-- created-on?
       |       yang:date-and-time
       +-- expires-on?
       |       yang:date-and-time
       +-- assertion                                   enumeration
       +-- serial-number                               string
       +-- idevid-issuer?                              binary
       +-- pinned-domain-cert?                         binary
       +-- domain-cert-revocation-checks?              boolean
       +-- nonce?                                      binary
       +-- last-renewal-date?
       |       yang:date-and-time
       +-- pinned-domain-subject-public-key-info?      binary
       +-- pinned-sha256-of-subject-public-key-info?   binary
]]></artwork></figure>

</section>
<section anchor="sid-values-1" title="SID values">

<figure><artwork><![CDATA[
           
      SID Assigned to
--------- -------------------------------------------------- 
     2451 data /ietf-constrained-voucher:voucher
     2452 data /ietf-constrained-voucher:voucher/assertion
     2453 data /ietf-constrained-voucher:voucher/created-on
     2454 data .../domain-cert-revocation-checks
     2455 data /ietf-constrained-voucher:voucher/expires-on
     2456 data /ietf-constrained-voucher:voucher/idevid-issuer
     2457 data .../last-renewal-date
     2458 data /ietf-constrained-voucher:voucher/nonce
     2459 data .../pinned-domain-cert
     2460 data .../pinned-domain-subject-public-key-info
     2461 data .../pinned-sha256-of-subject-public-key-info
     2462 data /ietf-constrained-voucher:voucher/serial-number
           
 WARNING, obsolete definitions
]]></artwork></figure>

</section>
<section anchor="yang-module-1" title="YANG Module">

<t>In the constrained-voucher YANG module, the voucher is “augmented” within the “used” grouping statement such that one continuous set of SID values is generated for the constrained-voucher module name, all voucher attributes, and the constrained-voucher attribute.
Two attributes of the voucher are “refined” to be optional.</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-constrained-voucher@2019-09-01.yang"
module ietf-constrained-voucher {
  yang-version 1.1;

  namespace
    "urn:ietf:params:xml:ns:yang:ietf-constrained-voucher";
  prefix "constrained";

  import ietf-restconf {
    prefix rc;
    description
      "This import statement is only present to access
       the yang-data extension defined in RFC 8040.";
    reference "RFC 8040: RESTCONF Protocol";
  }

  import ietf-voucher {
    prefix "v";
  }

  organization
   "IETF ANIMA Working Group";

  contact
   "WG Web:   <http://tools.ietf.org/wg/anima/>
    WG List:  <mailto:anima@ietf.org>
    Author:   Michael Richardson
              <mailto:mcr+ietf@sandelman.ca>
    Author:   Peter van der Stok
              <mailto: consultancy@vanderstok.org>
    Author:   Panos Kampanakis
              <mailto: pkampana@cisco.com>";
description
  "This module defines the format for a voucher, which is produced
   by a pledge's manufacturer or delegate (MASA) to securely assign
   one or more pledges to an 'owner', so that the pledges may
   establis a secure connection to the owner's network
   infrastructure.

   This version provides a very restricted subset appropriate
   for very constrained devices.
   In particular, it assumes that nonce-ful operation is
   always required, that expiration dates are rather weak, as no
   clocks can be assumed, and that the Registrar is identified
   by a pinned Raw Public Key.

   The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
   'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY',
   and 'OPTIONAL' in the module text are to be interpreted as
   described in RFC 2119.";

  revision "2019-09-01" {
    description
     "Initial version";
    reference
     "RFC XXXX: Voucher Profile for Constrained Devices";
  }

  rc:yang-data voucher-constrained-artifact {
    // YANG data template for a voucher.
    uses voucher-constrained-grouping;
  }

  // Grouping defined for future usage
  grouping voucher-constrained-grouping {
    description
      "Grouping to allow reuse/extensions in future work.";

    uses v:voucher-artifact-grouping {

      refine voucher/created-on {
          mandatory  false;
      }

      refine voucher/pinned-domain-cert {
          mandatory  false;
      }

      augment "voucher" {
        description "Base the constrained voucher
                                   upon the regular one";
        leaf pinned-domain-subject-public-key-info {
          type binary;
          description
            "The pinned-domain-subject-public-key-info replaces the
             pinned-domain-cert in constrained uses of
             the voucher. The pinned-domain-subject-public-key-info
             is the Raw Public Key of the Registrar.
             This field is encoded as specified in RFC7250,
             section 3.
             The ECDSA algorithm MUST be supported.
             The EdDSA algorithm as specified in
             draft-ietf-tls-rfc4492bis-17 SHOULD be supported.
             Support for the DSA algorithm is not recommended.
             Support for the RSA algorithm is a MAY.";
        }

        leaf pinned-sha256-of-subject-public-key-info {
          type binary;
          description
            "The pinned-hash-subject-public-key-info is a second
             alternative to pinned-domain-cert.  In many cases the
             public key of the domain has already been transmitted
             during the key agreement process, and it is wasteful
             to transmit the public key another two times.
             The use of a hash of public key info, at 32-bytes for
             sha256 is a significant savings compared to an RSA
             public key, but is only a minor savings compared to
             a 256-bit ECDSA public-key.
             Algorithm agility is provided by extensions to this
             specifications which define new leaf for other hash types";
        }
      }
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="example1" title="Example voucher artifacts">

<t>Below a the CBOR serialization of the constrained-voucher is shown in diagnostic CBOR notation.
The enum value of the assertion field is calculated to be zero by following the algorithm described in section 9.6.4.2 of <xref target="RFC7950"/>.</t>

<figure><artwork><![CDATA[
{
  2451: {
    +2 : "2016-10-07T19:31:42Z", / SID = 2453, created-on /
    +4 : "2016-10-21T19:31:42Z", / SID = 2455, expires-on /
    +1 : 0,                      / SID = 2452, assertion /
                                 /                "verified" /
    +11: "JADA123456789",        / SID = 2462, serial-number /
    +5 : h'01020D0F',            / SID = 2456, idevid-issuer /
    +8 : h'cert.der',            / SID = 2459, pinned-domain-cert/
    +3 : true,                   / SID = 2454, domain-cert
                                                 -revocation-checks /
    +6 : "2017-10-07T19:31:42Z", / SID = 2457, last-renewal-date /
    +9 : h'key-info'             / SID = 2460, pinned-domain
                                           -subject-public-key-info /
  }
}



]]></artwork></figure>

<t>The signing of the example is shown in <xref target="cmssign"/>.</t>

</section>
</section>
<section anchor="signing-voucher-and-voucher-request-artifacts" title="Signing voucher and voucher-request artifacts">

<section anchor="cms-signing" title="CMS signing">

<t>The IETF evolution of PKCS#7 is CMS <xref target="RFC5652"/>.
The CMS signed voucher is much like the equivalent voucher defined in <xref target="RFC8366"/>.</t>

<t>A different eContentType of TBD1 is used to indicate that the contents are in a different format than in <xref target="RFC8366"/>.
The id-ct-animaJSONVoucher allocated by <xref target="RFC8366"/> indicates a voucher and voucher-request encoded in JSON, and the new value TBD1 indicates that the voucher and voucher-request are encoded in CBOR.</t>

<t>The ContentInfo structure contains a payload consisting of the CBOR encoded voucher.
The <xref target="I-D.ietf-core-yang-cbor"/> use of delta encoding creates a canonical ordering for the keys on the wire.
This canonical ordering is not important as there is no expectation that the content will be reproduced during the validation process.</t>

<t>Normally the recipient is the pledge and the signer is the MASA.</t>

<t><xref target="I-D.ietf-anima-bootstrapping-keyinfra"/> supports both signed and unsigned
voucher requests from the pledge to the JRC.
In this specification, voucher-request artifact is not signed from the
pledge to the registrar.  [EDNOTE: Confirm that voucher requests do not
need to be signed ] From the JRC to the MASA, the voucher-request
artifact MUST be signed by the domain owner key which is requesting
ownership.</t>

<t>The considerations of <xref target="RFC5652"/> section 5.1, concerning validating
CMS objects which are really PKCS7 objects (cmsVersion=1) applies.</t>

<t>The CMS structure SHOULD also contain all the certificates leading up
to and including the signer’s trust anchor certificate known to the
recipient.  The inclusion of the trust anchor is unusual in many
applications, but without it third parties can not accurately audit
the transaction.</t>

<t>The CMS structure MAY also contain revocation objects for any
intermediate certificate authorities (CAs) between the voucher-issuer
and the trust anchor known to the recipient.  However, the use of
CRLs and other validity mechanisms is discouraged, as the pledge is
unlikely to be able to perform online checks, and is unlikely to have
a trusted clock source.  As described below, the use of short-lived
vouchers and/or pledge provided nonce provides a freshness guarantee.</t>

</section>
<section anchor="cose-signing" title="COSE signing">

<t>The COSE-Sign1 structure is discussed in section 4.2 of <xref target="RFC8152"/>.
The CBOR object that carries the body, the signature, and the information about the body  and signature is called the COSE_Sign1 structure.
It is used when only one signature is used on the body.
Support for ECDSA with sha256 (secp256k1 and prime256v1 curves) is compulsory.</t>

<t>The supported COSE-sign1 object stucture is shown in <xref target="fig-cose"/>.
Support for EdDSA is encouraged. [EDNOTE: Expand and add a reference why. ]</t>

<figure title="cose-sign1 example" align="left" anchor="fig-cose"><artwork><![CDATA[
COSE_Sign1(
  [
    h'A101382E',        # { "alg": EC256K1 }
    {
      “kid” : h'789'  # hash256(public key)
    },
    h'123', #voucher-request binary content
    h'456', #voucher-request binary public signature
  ]
)
]]></artwork></figure>

<t>The <xref target="COSE-registry"/> specifies the integers that replace the strings and the mnemonics in <xref target="fig-cose"/>.
The value of the “kid” parameter is an example value.
Usually a hash of the public key is used to idientify the public key.
The public key and its hash are derived from the relevant certificate (Pledge, Registrar or MASA certificate).</t>

<t>In <xref target="cosesign"/> a binary cose-sign1 object is shown based on the voucher-request example of <xref target="example2"/>.</t>

</section>
</section>
</section>
<section anchor="design-considerations" title="Design Considerations">

<t>The design considerations for the CBOR encoding of vouchers is much the same as for <xref target="RFC8366"/>.</t>

<t>One key difference is that the names of the leaves in the YANG does not have a material effect on the size of the resulting CBOR, as the SID translation process assigns integers to the names.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<section anchor="clock-sensitivity" title="Clock Sensitivity">

<t>TBD.</t>

</section>
<section anchor="protect-voucher-pki-in-hsm" title="Protect Voucher PKI in HSM">

<t>TBD.</t>

</section>
<section anchor="test-domain-certificate-validity-when-signing" title="Test Domain Certificate Validity when Signing">

<t>TBD.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<section anchor="resource-type-registry" title="Resource Type Registry">

<t>Additions to the sub-registry “CoAP Resource Type”, within the “CoRE parameters” registry are specified below.
These can be registered  either in the Expert Review range (0-255) or IETF Review range (256-9999).</t>

<figure><artwork><![CDATA[
 ace.rt.rv needs registration with IANA
 ace.rt.vs needs registration with IANA
 ace.rt.es needs registration with IANA
 ace.rt.ra needs registration with IANA
]]></artwork></figure>

</section>
<section anchor="the-ietf-xml-registry" title="The IETF XML Registry">

<t>This document registers two URIs in the IETF XML registry <xref target="RFC3688"/>.
Following the format in <xref target="RFC3688"/>, the following registration is requested:</t>

<figure><artwork><![CDATA[
  URI: urn:ietf:params:xml:ns:yang:ietf-constrained-voucher
  Registrant Contact: The ANIMA WG of the IETF.
  XML: N/A, the requested URI is an XML namespace.

  URI: urn:ietf:params:xml:ns:yang:ietf-constrained-voucher-request
  Registrant Contact: The ANIMA WG of the IETF.
  XML: N/A, the requested URI is an XML namespace.
]]></artwork></figure>

</section>
<section anchor="the-yang-module-names-registry" title="The YANG Module Names Registry">

<t>This document registers two YANG modules in the YANG Module Names registry <xref target="RFC6020"/>.  Following the format defined in <xref target="RFC6020"/>, the the following registration is requested:</t>

<figure><artwork><![CDATA[
  name:         ietf-constrained-voucher
  namespace:    urn:ietf:params:xml:ns:yang:ietf-constrained-voucher
  prefix:       vch
  reference:    RFC XXXX

  name:         ietf-constrained-voucher-request
  namespace:    urn:ietf:params:xml:ns:yang:ietf-constrained
                                           -voucher-request
  prefix:       vch
  reference:    RFC XXXX
]]></artwork></figure>

</section>
<section anchor="the-rfc-sid-range-assignment-sub-registry" title="The RFC SID range assignment sub-registry">

<figure><artwork><![CDATA[
------------ ------ --------------------------- ------------
Entry-point | Size | Module name               | RFC Number
------------ ------ --------------------------- ------------
2450          50     ietf-constrained-voucher    [ThisRFC]
2500          50     ietf-constrained-voucher    [ThisRFC}
                                 -request
----------- ------  --------------------------- ------------
]]></artwork></figure>

<t>Warning: These SID values are defined in <xref target="I-D.ietf-core-sid"/>, not as an Early Allocation.</t>

</section>
<section anchor="the-smi-security-for-smime-cms-content-type-registry" title="The SMI Security for S/MIME CMS Content Type Registry">

<t>This document registers an OID in the “SMI Security for S/MIME CMS Content Type” registry (1.2.840.113549.1.9.16.1), with the value:</t>

<figure><artwork><![CDATA[
  Decimal  Description                             References
  -------  --------------------------------------  ----------
  46       id-ct-animaCBORVoucher                  [ThisRFC]
]]></artwork></figure>

<!-- per IANA #1160164 -->

</section>
<section anchor="media-type-registry" title="Media-Type Registry">

<t>This section registers the ‘application/voucher-cms+cbor’ media type and the ‘application/voucher-cose+cbor’ in the “Media Types” registry.
These media types are used to indicate that the content is a CBOR voucher either signed with a cms structure or a COSE_Sign1 structure <xref target="RFC8152"/>.</t>

<section anchor="applicationvoucher-cmscbor" title="application/voucher-cms+cbor">

<figure><artwork><![CDATA[
Type name:  application
Subtype name:  voucher-cms+cbor
Required parameters:  none
Optional parameters:  none
Encoding considerations:  CMS-signed CBOR vouchers are CBOR
  encoded.
Security considerations:  See Security Considerations, Section
Interoperability considerations:  The format is designed to be
  broadly interoperable.
Published specification:  THIS RFC.
Applications that use this media type:  ANIMA, 6tisch, and other
  zero-touch imprinting systems
Additional information:
  Magic number(s):  None
  File extension(s):  .vch
  Macintosh file type code(s):  none
Person & email address to contact for further information:  IETF
  ANIMA WG
Intended usage:  LIMITED
Restrictions on usage:  NONE
Author:  ANIMA WG
Change controller:  IETF
Provisional registration? (standards tree only):  NO
]]></artwork></figure>

</section>
<section anchor="applicationvoucher-cosecbor" title="application/voucher-cose+cbor">

<figure><artwork><![CDATA[
Type name:  application
Subtype name:  voucher-cose+cbor
Required parameters:  none
Optional parameters:  cose-type
Encoding considerations:  COSE_Sign1 CBOR vouchers are COSE objects
                          signed with one signer.
Security considerations:  See Security Considerations, Section
Interoperability considerations:  The format is designed to be
  broadly interoperable.
Published specification:  THIS RFC.
Applications that use this media type:  ANIMA, 6tisch, and other
  zero-touch imprinting systems
Additional information:
  Magic number(s):  None
  File extension(s):  .vch
  Macintosh file type code(s):  none
Person & email address to contact for further information:  IETF
  ANIMA WG
Intended usage:  LIMITED
Restrictions on usage:  NONE
Author:  ANIMA WG
Change controller:  IETF
Provisional registration? (standards tree only):  NO
]]></artwork></figure>

</section>
</section>
<section anchor="coap-content-format-registry" title="CoAP Content-Format Registry">

<t>Additions to the sub-registry “CoAP Content-Formats”, within the “CoRE
Parameters” registry are needed for two media types. These can be registered
either in the Expert Review range (0-255) or IETF Review range (256-9999).</t>

<figure><artwork><![CDATA[
Media type                    mime type    Encoding   ID  References
----------------------------  -----------  --------- ---- ----------
application/voucher-cms+cbor      - -        CBOR    TBD2  [This RFC]
application/voucher-cose+cbor "COSE-Sign1"   CBOR    TBD3  [This RFC]
]]></artwork></figure>

</section>
</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>We are very grateful to Jim Schaad for explaining COSE and CMS choices.
Also thanks to Jim Schaad for correctinging earlier version of the COSE Sign1 objects.</t>

<t>Michel Veillette did extensive work on pyang to extend it to support the SID allocation process, and this document was among the first users.</t>

<t>We are grateful for the suggestions done by Esko Dijk.</t>

</section>
<section anchor="changelog" title="Changelog">

<t>-08
    Examples for cose_sign1 are completed and improved.</t>

<t>-06
    New SID values assigned; regenerated examples</t>

<t>-04
    voucher and request-voucher MUST be signed
    examples for signed request are added in appendix
    IANA SID registration is updated
    SID values in examples are aligned
    signed cms examples aligned with new SIDs</t>

<t>-03</t>

<figure><artwork><![CDATA[
Examples are inverted.
]]></artwork></figure>

<t>-02</t>

<figure><artwork><![CDATA[
Example of requestvoucher with unsigned appllication/cbor is added
attributes of voucher "refined" to optional
CBOR serialization of vouchers improved
Discovery port numbers are specified
]]></artwork></figure>

<t>-01</t>

<figure><artwork><![CDATA[
application/json is optional, application/cbor is compulsory
Cms and cose mediatypes are introduced
]]></artwork></figure>

</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC7049;
&I-D.ietf-core-yang-cbor;
&I-D.ietf-core-sid;
&RFC7950;
&RFC5652;
&RFC8152;
&RFC8366;
&RFC3688;
&RFC6020;
&I-D.ietf-anima-bootstrapping-keyinfra;
&I-D.ietf-ace-coap-est;
&I-D.selander-ace-ake-authz;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References'>

&I-D.ietf-netmod-yang-tree-diagrams;
<reference anchor="COSE-registry" target="https://www.iana.org/assignments/cose/cose.xhtml">
  <front>
    <title>CBOR Object Signing and Encryption (COSE) registry</title>
    <author initials="." surname="IANA">
      <organization></organization>
    </author>
    <date year="2017"/>
  </front>
</reference>
&RFC6690;
&RFC7030;


    </references>


<section anchor="est-messages-to-est-coaps" title="EST messages to EST-coaps">

<t>This section extends the examples from Appendix A of <xref target="I-D.ietf-ace-coap-est"/>. The CoAP headers are only worked out for the enrollstatus example.</t>

<section anchor="es" title="enrollstatus">

<t>A coaps enrollstatus message can be :</t>

<figure><artwork><![CDATA[
    GET coaps://[192.0.2.1:8085]/est/es
]]></artwork></figure>

<t>The corresponding coap header fields are shown below.</t>

<figure><artwork><![CDATA[
  Ver = 1
  T = 0 (CON)
  Code = 0x01 (0.01 is GET)
  Options
   Option  (Uri-Path)
     Option Delta = 0xb   (option nr = 11)
     Option Length = 0x3
     Option Value = "est"
   Option  (Uri-Path)
     Option Delta = 0x0   (option nr = 11)
     Option Length = 0x2
     Option Value = "es"
  Payload = [Empty]
]]></artwork></figure>

<t>The Uri-Host and Uri-Port Options are omitted because they coincide with the transport protocol destination address and port respectively.</t>

<t>A 2.05 Content response with an unsigned voucher status (ct=60) will then be:</t>

<figure><artwork><![CDATA[
   2.05 Content (Content-Format: application/cbor)
]]></artwork></figure>

<t>With CoAP fields and payload:</t>

<figure><artwork><![CDATA[
   Ver=1
   T=2 (ACK)
   Code = 0x45 (2.05 Content)
   Options
     Option1 (Content-Format)
     Option Delta = 0xC  (option nr 12)
     Option Length = 0x2
     Option Value = 60 (application/cbor)

     Payload (CBOR diagnostic) =
     {
     "version":"1",
     "Status": 1,   / 1 = Success, 0 = Fail  /
     "Reason":"Informative human readable message",
     "reason-context": "Additional information"
     }
]]></artwork></figure>

<t>The binary payload is:</t>

<figure><artwork><![CDATA[
     A46776657273696F6E6131665374617475730166526561736F6E7822
     496E666F726D61746976652068756D616E207265616461626C65206D
     6573736167656e726561736F6E2D636F6E74657874
     764164646974696F6E616C20696E666F726D6174696F6E
]]></artwork></figure>

<t>The binary payload disassembles to the above CBOR diagnostic code.</t>

</section>
<section anchor="voucherstatus" title="voucher_status">

<t>A coaps voucher_status message can be:</t>

<figure><artwork><![CDATA[
   GET coaps://[2001:db8::2:1]:61616]/est/vs
]]></artwork></figure>

<t>A 2.05 Content response with a non signed CBOR voucher status (ct=60) will then be:</t>

<figure><artwork><![CDATA[
    2.05 Content (Content-Format: application/cbor)
    Payload =
    A46776657273696F6E6131665374617475730166526561736F6E7822
    496E666F726D61746976652068756D616E207265616461626C65206D
    6573736167656e726561736F6E2D636F6E74657874
    764164646974696F6E616C20696E666F726D6174696F6E
]]></artwork></figure>

</section>
</section>
<section anchor="cms-signed-messages" title="CMS signed messages">

<t>Signed request-voucher-request payloads are sent from pledge to Registrar, as explained in Section 5.2 of <xref target="I-D.ietf-anima-bootstrapping-keyinfra"/>.</t>

<section anchor="rv" title="signed requestvoucher">

<t>A CMS signed requestvoucher message from JRC to MASA is shown below.
It would be CoAP POSTED to /est/rv.</t>

<figure><artwork><![CDATA[
    POST coaps://[2001:db8::2:1]:61616]/est/rv
    (Content-Format: application/voucher-cms+cbor)
]]></artwork></figure>

<t>The payload would be in binary, but is presented in base64 in this document.</t>

<figure><artwork><![CDATA[
MIIDugYJKoZIhvcNAQcCoIIDqzCCA6cCAQExDTALBglghkgBZQMEAgEwCwYJ
KoZIhvcNAQcBoIICQTCCAj0wggHioAMCAQICCH52Yde1TkYyMAoGCCqGSM49
BAMCMF0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UECgwLRXhh
bXBsZSBJbmMxFjAUBgNVBAsMDWNlcnRpZmljYXRpb24xEzARBgNVBAMMCjgw
Mi4xQVIgQ0EwIBcNMTkwMTMxMTEyOTE2WhgPOTk5OTEyMzEyMzU5NTlaMFwx
CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCTEExFDASBgNV
BAoMC2V4YW1wbGUgSW5jMQwwCgYDVQQLDANJb1QxDzANBgNVBAUTBld0MTIz
NDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMi0IfEcJeR+OsVxI78tn9xJ
TwKLw1HMgMA/FQv1DP+VjXVBnYGmokXf+ueQvpXPdfYC+RUmGPgWorI7Vjjl
n9mjgYowgYcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUlmANhxa/f9DnUtCsdgd3
rWZdAqAwHwYDVR0jBBgwFoAUaNFlUflRv8gqQx0Nnwi8LSBbEWAwDgYDVR0P
AQH/BAQDAgWgMCoGA1UdEQQjMCGgHwYIKwYBBQUHCASgEzARBgkrBgEEAbQ7
CgEEBAECAwQwCgYIKoZIzj0EAwIDSQAwRgIhAMDYGZbSUH1pPzxI6qXulJG9
ptshQJnZgRfGOzYTdM2GAiEAp3SYn0wyGlzyXYMqTTNqCK1n3yDxUGQhGIoK
3m00kjYxggE/MIIBOwIBATBpMF0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJD
QTEUMBIGA1UECgwLRXhhbXBsZSBJbmMxFjAUBgNVBAsMDWNlcnRpZmljYXRp
b24xEzARBgNVBAMMCjgwMi4xQVIgQ0ECCH52Yde1TkYyMAsGCWCGSAFlAwQC
AaBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8X
DTE5MDQwODEwNDgzNlowLwYJKoZIhvcNAQkEMSIEILEdCTOLs2Zy7w3LgvSZ
XZEadz3LbznoFBs6FMFN91RaMAoGCCqGSM49BAMCBEcwRQIgASjDsIpr0tW/
n6dRHqvvqsqgZlHbtFnErUbWfhS0KD4CIQDDUEqc5wTmRGf0adEQVQzqmIgh
MEgF10vqXv02gL1jLw==
]]></artwork></figure>

<t>A 2.04 Changed response returning CBOR voucher signed with a cms structure(ct=TBD2) will then be:</t>

<figure><artwork><![CDATA[
    2.04 Changed (Content-Format: application/voucher-cms+cbor)
]]></artwork></figure>
<figure><artwork><![CDATA[
MIIDuwYJKoZIhvcNAQcCoIIDrDCCA6gCAQExDTALBglghkgBZQMEAgEwCwYJ
KoZIhvcNAQcBoIICQTCCAj0wggHioAMCAQICCH52Yde1TkYyMAoGCCqGSM49
BAMCMF0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UECgwLRXhh
bXBsZSBJbmMxFjAUBgNVBAsMDWNlcnRpZmljYXRpb24xEzARBgNVBAMMCjgw
Mi4xQVIgQ0EwIBcNMTkwMTMxMTEyOTE2WhgPOTk5OTEyMzEyMzU5NTlaMFwx
CzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCTEExFDASBgNV
BAoMC2V4YW1wbGUgSW5jMQwwCgYDVQQLDANJb1QxDzANBgNVBAUTBld0MTIz
NDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMi0IfEcJeR+OsVxI78tn9xJ
TwKLw1HMgMA/FQv1DP+VjXVBnYGmokXf+ueQvpXPdfYC+RUmGPgWorI7Vjjl
n9mjgYowgYcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUlmANhxa/f9DnUtCsdgd3
rWZdAqAwHwYDVR0jBBgwFoAUaNFlUflRv8gqQx0Nnwi8LSBbEWAwDgYDVR0P
AQH/BAQDAgWgMCoGA1UdEQQjMCGgHwYIKwYBBQUHCASgEzARBgkrBgEEAbQ7
CgEEBAECAwQwCgYIKoZIzj0EAwIDSQAwRgIhAMDYGZbSUH1pPzxI6qXulJG9
ptshQJnZgRfGOzYTdM2GAiEAp3SYn0wyGlzyXYMqTTNqCK1n3yDxUGQhGIoK
3m00kjYxggFAMIIBPAIBATBpMF0xCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJD
QTEUMBIGA1UECgwLRXhhbXBsZSBJbmMxFjAUBgNVBAsMDWNlcnRpZmljYXRp
b24xEzARBgNVBAMMCjgwMi4xQVIgQ0ECCH52Yde1TkYyMAsGCWCGSAFlAwQC
AaBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8X
DTE5MDQwODA3MzQxMFowLwYJKoZIhvcNAQkEMSIEIP2rKa+J8LVdwYEmB2he
uxsz05As0zoAAYkeyNqsh4fiMAoGCCqGSM49BAMCBEgwRgIhALOd2FKbe9FG
kN4Pg7FIgF+//cQv/N+v7tDZMzGBAFN0AiEAu5BI0oQ4o0wZcrDyKoU2GbeX
hlG/g+OgTUftYMJ32so=
]]></artwork></figure>

</section>
<section anchor="ra" title="requestauditing">

<t>A coaps requestauditing message contains the signed CBOR voucher :</t>

<figure><artwork><![CDATA[
    POST coaps://[2001:db8::2:1]:61616]/est/ra
    (Content-Format: application/voucher-cms+cbor)
    Payload =
TO BE FILLED
]]></artwork></figure>

<t>A 2.05 Content response returning a log of the voucher (ct=60) will then be:</t>

<figure><artwork><![CDATA[
    2.05 Content (Content-Format: application/cbor)
    Payload =
{
 "version":"1",
 "events":[
   {
    "date":"<date/time of the entry>",
    "domainID":"<domainID extracted from voucher-request>",
    "nonce":"<any nonce if supplied (or the exact string 'NULL')>"
    "assertion":"<the value from the voucher assertion leaf>"
    "truncated":"<the number of domainID entries truncated>"
   },
   {
    "date":"<date/time of the entry>",
    "domainID":"<anotherDomainID extracted from voucher-request>",
    "nonce":"<any nonce if supplied (or the exact string 'NULL')>"
    "assertion":"<the value from the voucher assertion leaf>"
   }
 ],
  "truncation": {
    "nonced duplicates": "<total number of entries truncated>",
    "nonceless duplicates": "<total number of entries truncated>",
    "arbitrary": "<number of domainID entries removed entirely>"
  }
}

    [EDNOTE: Change JSON to CBOR; Serialize CBOR payload to binary]
]]></artwork></figure>

</section>
<section anchor="cmssign" title="CMS signed voucher-request example">

<t>The voucher-request example, visualized in CBOR diagnostic notation in <xref target="example2"/> is shown as a hexadecimal dump of the binary file.</t>

<figure><artwork><![CDATA[
    a11909c5a90274323031362d31302d30375431393a33313a34325a0474323031
    362d31302d32315431393a33313a34325a01020d6d4a414441313233343536
    373839054401020d0f0a4401020d0f03f50674323031372d31302d30375431
    393a33313a34325a0c4401020d0f
]]></artwork></figure>

<t>The voucher-request example has been signed by using the WT1234 certificate and key pair shown in Appendix C of <xref target="I-D.ietf-ace-coap-est"/>.
The CMS signing of the binary voucher-request leads to a binary signed voucher-request, shown with a hexadecimal representation shown in the payload of the request part of <xref target="rv"/> and <xref target="ra"/>.</t>

<t>The breakdown of the CMS signed binary voucher-request file is visualized below:</t>

<figure><artwork><![CDATA[
CMS_ContentInfo:
  contentType: pkcs7-signedData (1.2.840.113549.1.7.2)
  d.signedData:
    version: 1
    digestAlgorithms:
        algorithm: sha256 (2.16.840.1.101.3.4.2.1)
        parameter: <ABSENT>
    encapContentInfo:
      eContentType: pkcs7-data (1.2.840.113549.1.7.1)
      eContent: <ABSENT>
    certificates:
      d.certificate:
        cert_info:
          version: 2
          serialNumber: 9112578475118446130
          signature:
            algorithm: ecdsa-with-SHA256 (1.2.840.10045.4.3.2)
            parameter: <ABSENT>
          issuer: C=US, ST=CA, O=Example Inc, OU=certification,
                                                  CN=802.1AR CA
          validity:
            notBefore: Jan 31 11:29:16 2019 GMT
            notAfter: Dec 31 23:59:59 9999 GMT
          subject: C=US, ST=CA, L=LA, O=example Inc,
                                     OU=IoT/serialNumber=Wt1234
          key:
            algor:
              algorithm: id-ecPublicKey (1.2.840.10045.2.1)
              parameter: OBJECT:prime256v1 (1.2.840.10045.3.1.7)
            public_key:  (0 unused bits)
              0000 - 04 c8 b4 21 f1 1c 25 e4-7e 3a c5 71 23 bf
              000e - 2d 9f dc 49 4f 02 8b c3-51 cc 80 c0 3f 15
              001c - 0b f5 0c ff 95 8d 75 41-9d 81 a6 a2 45 df
              002a - fa e7 90 be 95 cf 75 f6-02 f9 15 26 18 f8
              0038 - 16 a2 b2 3b 56 38 e5 9f-d9
          issuerUID: <ABSENT>
          subjectUID: <ABSENT>
          extensions:
              object: X509v3 Basic Constraints (2.5.29.19)
              critical: BOOL ABSENT
              value:
                0000 - 30
                0002 - <SPACES/NULS>

              object: X509v3 Subject Key Identifier (2.5.29.14)
              critical: BOOL ABSENT
              value:
                0000 - 04 14 96 60 0d 87 16 bf-7f d0 e7 52 d0
                000d - ac 76 07 77 ad 66 5d 02-a0

              object: X509v3 Authority Key Identifier (2.5.29.35)
              critical: BOOL ABSENT
              value:
                0000 - 30 16 80 14 68 d1 65 51-f9 51 bf c8 2a
                000d - 43 1d 0d 9f 08 bc 2d 20-5b 11 60

              object: X509v3 Key Usage (2.5.29.15)
              critical: TRUE
              value:
                0000 - 03 02 05 a0

              object: X509v3 Subject Alternative Name (2.5.29.17)
              critical: BOOL ABSENT
              value:
                0000 - 30 21 a0 1f 06 08 2b 06-01 05 05 07 08
                000d - 04 a0 13 30 11 06 09 2b-06 01 04 01 b4
                001a - 3b 0a 01 04 04 01 02 03-04
        sig_alg:
          algorithm: ecdsa-with-SHA256 (1.2.840.10045.4.3.2)
          parameter: <ABSENT>
        signature:  (0 unused bits)
          0000 - 30 46 02 21 00 c0 d8 19-96 d2 50 7d 69 3f 3c
          000f - 48 ea a5 ee 94 91 bd a6-db 21 40 99 d9 81 17
          001e - c6 3b 36 13 74 cd 86 02-21 00 a7 74 98 9f 4c
          002d - 32 1a 5c f2 5d 83 2a 4d-33 6a 08 ad 67 df 20
          003c - f1 50 64 21 18 8a 0a de-6d 34 92 36
    crls:
      <EMPTY>
    signerInfos:
        version: 1
        d.issuerAndSerialNumber:
          issuer: C=US, ST=CA, O=Example Inc, OU=certification,
                                                  CN=802.1AR CA
          serialNumber: 9112578475118446130
        digestAlgorithm:
          algorithm: sha256 (2.16.840.1.101.3.4.2.1)
          parameter: <ABSENT>
        signedAttrs:
            object: contentType (1.2.840.113549.1.9.3)
            value.set:
              OBJECT:pkcs7-data (1.2.840.113549.1.7.1)

            object: signingTime (1.2.840.113549.1.9.5)
            value.set:
              UTCTIME:Jul  3 08:53:30 2019 GMT

            object: messageDigest (1.2.840.113549.1.9.4)
            value.set:
              OCTET STRING:
                0000 - d4 b0 5c dd c8 b4 91 28-4a 18 ca 25 9d
                000d - be d0 60 23 cf ad a0 aa-c2 95 ac e9 3f
                001a - 0b 4f 44 9e 25
                0020 - <SPACES/NULS>
        signatureAlgorithm:
          algorithm: ecdsa-with-SHA256 (1.2.840.10045.4.3.2)
          parameter: <ABSENT>
        signature:
          0000 - 30 46 02 21 00 e5 e1 7f-23 c3 aa 14 9f 35 64
          000f - 1e c4 4a 0f 68 fe b0 16-3b e6 7c 06 51 af bf
          001e - 5a a0 99 59 e0 28 1f 02-21 00 b4 07 2f 7c c4
          002d - f9 26 0c 6d 47 a7 93 56-de b8 da f7 23 f0 af
          003c - 2b 59 16 cc 36 63 e7 91-89 39 df df
        unsignedAttrs:
          <EMPTY>
]]></artwork></figure>

</section>
</section>
<section anchor="cosesign" title="COSE examples">

<t>These examples are generated on a pie 4 and a PC running BASH. Keys and Certificates have been generated with openssl with the following shell script:</t>

<figure><artwork><![CDATA[
#!/bin/bash
#try-cert.sh
export dir=./brski/intermediate
export cadir=./brski
export cnfdir=./conf
export format=pem
export default_crl_days=30
sn=8

DevID=pledge.1.2.3.4
serialNumber="serialNumber=$DevID"
export hwType=1.3.6.1.4.1.6715.10.1
export hwSerialNum=01020304 
export subjectAltName="otherName:1.3.6.1.5.5.7.8.4;SEQ:hmodname"
echo  $hwType - $hwSerialNum
echo $serialNumber

# remove all files
rm -r ./brski/*
#
# initialize file structure
# root level
cd $cadir
mkdir certs crl csr newcerts private
chmod 700 private
touch index.txt
touch serial
echo 11223344556600 >serial
echo 1000 > crlnumber
# intermediate level
mkdir intermediate
cd intermediate
mkdir certs crl csr newcerts private
chmod 700 private
touch index.txt
echo 11223344556600 >serial
echo 1000 > crlnumber
cd ../..



# file structure is cleaned start filling

echo "#############################"
echo "create registrar keys and certificates "
echo "#############################"


echo "create root registrar certificate using ecdsa with sha256"
openssl ecparam -name prime256v1 -genkey \
  -noout -out $cadir/private/ca-regis.key

openssl req -new -x509 \
 -key $cadir/private/ca-regis.key \
 -out $cadir/certs/ca-regis.crt \
 -extensions v3_ca\
 -days 365 \
 -subj "/C=NL/ST=NB/L=Helmond/O=vanderstok\
"/OU=consultancy/CN=registrar.stok.nl"

# Combine authority certificate and key
echo "Combine authority certificate and key"
openssl pkcs12 -passin pass:watnietweet \
 -passout pass:watnietweet \
 -inkey $cadir/private/ca-regis.key \
 -in $cadir/certs/ca-regis.crt -export \
 -out $cadir/certs/ca-regis-comb.pfx

# converteer authority pkcs12 file to pem
echo "converteer authority pkcs12 file to pem"
openssl pkcs12 -passin pass:watnietweet -passout pass:watnietweet\
   -in $cadir/certs/ca-regis-comb.pfx \\
   -out $cadir/certs/ca-regis-comb.crt -nodes

#show certificate in registrar combined certificate
openssl  x509 -in $cadir/certs/ca-regis-comb.crt -text

#
# Certificate Authority for MASA
#
echo "#############################"
echo "create MASA keys and certificates "
echo "#############################"

echo "create root MASA certificate using ecdsa with sha 256 key"
openssl ecparam -name prime256v1 -genkey -noout \
 -out $cadir/private/ca-masa.key

openssl req -new -x509 \
 -days 365 -key $cadir/private/ca-masa.key \
 -out $cadir/certs/ca-masa.crt \
 -extensions v3_ca\
 -subj "/C=NL/ST=NB/L=Helmond/O=vanderstok/\
OU=manufacturer/CN=masa.stok.nl"

# Combine authority certificate and key
echo "Combine authority certificate and key for masa"
openssl pkcs12 -passin pass:watnietweet \
   -passout pass:watnietweet\
   -inkey $cadir/private/ca-masa.key \
   -in $cadir/certs/ca-masa.crt -export \
   -out $cadir/certs/ca-masa-comb.pfx

# converteer authority pkcs12 file to pem for masa
echo "converteer authority pkcs12 file to pem for masa"
openssl pkcs12 -passin pass:watnietweet \
   -passout pass:watnietweet\
   -in $cadir/certs/ca-masa-comb.pfx \
   -out $cadir/certs/ca-masa-comb.crt -nodes

#show certificate in pledge combined certificate
openssl  x509 -in $cadir/certs/ca-masa-comb.crt -text


#
# Certificate for Pledge derived from MASA certificate
#
echo "#############################"
echo "create pledge keys and certificates "
echo "#############################"


# Pledge derived Certificate

echo "create pledge derived certificate using ecdsa with sha256"
openssl ecparam -name prime256v1 -genkey \
 -noout -out $dir/private/pledge.key

echo "create pledge certificate request"
openssl req -nodes -new -sha256 \
  -key $dir/private/pledge.key -out $dir/csr/pledge.csr \
  -subj \
"/C=NL/ST=NB/L=Helmond/O=vanderstok/OU=manufacturing\
/CN=uuid:$DevID/$serialNumber"

# Sign pledge derived Certificate
echo "sign pledge derived certificate "
openssl ca -config $cnfdir/openssl-pledge.cnf \
 -extensions 8021ar_idevid\
 -days 365 -in $dir/csr/pledge.csr -out $dir/certs/pledge.crt 

# Add pledge key and pledge certificate to pkcs12 file
echo "Add pledge key and pledge certificate to pkcs12 file"
openssl pkcs12  -passin pass:watnietweet\
   -passout pass:watnietweet\
   -inkey $dir/private/pledge.key \
   -in $dir/certs/pledge.crt -export \
   -out $dir/certs/pledge-comb.pfx

# converteer pledge pkcs12 file to pem
echo "converteer pledge pkcs12 file to pem"
openssl pkcs12 -passin pass:watnietweet \
    -passout pass:watnietweet\
   -in $dir/certs/pledge-comb.pfx \
   -out $dir/certs/pledge-comb.crt -nodes

#show certificate in pledge-comb.crt
openssl  x509 -in $dir/certs/pledge-comb.crt -text

#show private key in pledge-comb.crt
openssl ecparam -name prime256v1 \
  -in $dir/certs/pledge-comb.crt -text
]]></artwork></figure>

<t>The xxxx-comb certificates have been generated as required by libcoap for the DTLS connection generation.</t>

<section anchor="pledge-registrar-and-masa-keys" title="Pledge, Registrar and MASA keys">

<t>This first section documents the public and private keys used in the
subsequent test vectors below.  These keys come from test code and are not used in any
production system, and should only be used only to validate implementations.</t>

<section anchor="pledge-private-key" title="Pledge private key">

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIpP20ud7muTl460b
xFzupPkaMoaCIIIFwSOf0hvhQByhRANCAASKnIauvAtx6ZFWQniQOqvP0Zpdaudy
Ve6Vrc80AjyWRGnN3oyQ0rnr5dXynfG2xq8+cY+uGwTrAJYp9OyoZCAs
-----END PRIVATE KEY-----
Private-Key: (256 bit)
priv:
    22:93:f6:d2:e7:7b:9a:e4:e5:e3:ad:1b:c4:5c:ee:
    a4:f9:1a:32:86:82:20:82:05:c1:23:9f:d2:1b:e1:
    40:1c
pub:
    04:8a:9c:86:ae:bc:0b:71:e9:91:56:42:78:90:3a:
    ab:cf:d1:9a:5d:6a:e7:72:55:ee:95:ad:cf:34:02:
    3c:96:44:69:cd:de:8c:90:d2:b9:eb:e5:d5:f2:9d:
    f1:b6:c6:af:3e:71:8f:ae:1b:04:eb:00:96:29:f4:
    ec:a8:64:20:2c
ASN1 OID: prime256v1
NIST CURVE: P-256]]></artwork></figure>

</section>
<section anchor="jrcpriv" title="Registrar private key">

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgHCCOKLhln+l8pLnx
gWtMUm7zRY4ugkznuFimYDKbrNihRANCAARqJKniS+I00XrUfnYMlLXh3E7hFa2J
ESrUpqZLsb9o+Rd9cOkQnLSMmw3H3yZBGZ0MLb/yHtWEA4rIP0eBvhOO
-----END PRIVATE KEY-----
Private-Key: (256 bit)
priv:
    1c:20:8e:28:b8:65:9f:e9:7c:a4:b9:f1:81:6b:4c:
    52:6e:f3:45:8e:2e:82:4c:e7:b8:58:a6:60:32:9b:
    ac:d8
pub:
    04:6a:24:a9:e2:4b:e2:34:d1:7a:d4:7e:76:0c:94:
    b5:e1:dc:4e:e1:15:ad:89:11:2a:d4:a6:a6:4b:b1:
    bf:68:f9:17:7d:70:e9:10:9c:b4:8c:9b:0d:c7:df:
    26:41:19:9d:0c:2d:bf:f2:1e:d5:84:03:8a:c8:3f:
    47:81:be:13:8e
ASN1 OID: prime256v1
NIST CURVE: P-256]]></artwork></figure>

</section>
<section anchor="masapriv" title="MASA private key">

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgQODnSgB7xR/aa3Ea
JrPGz9lZhJ1aEc/56OEPiBr86SKhRANCAASB9HLsnEeyjtHrODNBANNi9khQ2gLQ
VrIie8hLgFmVdwfQw1iMPPI8WwCDeVTaDdGwr6HC6M0sO9CGRZ+JcwrL
-----END PRIVATE KEY-----
Private-Key: (256 bit)
priv:
    40:e0:e7:4a:00:7b:c5:1f:da:6b:71:1a:26:b3:c6:
    cf:d9:59:84:9d:5a:11:cf:f9:e8:e1:0f:88:1a:fc:
    e9:22
pub:
    04:81:f4:72:ec:9c:47:b2:8e:d1:eb:38:33:41:00:
    d3:62:f6:48:50:da:02:d0:56:b2:22:7b:c8:4b:80:
    59:95:77:07:d0:c3:58:8c:3c:f2:3c:5b:00:83:79:
    54:da:0d:d1:b0:af:a1:c2:e8:cd:2c:3b:d0:86:45:
    9f:89:73:0a:cb
ASN1 OID: prime256v1
NIST CURVE: P-256]]></artwork></figure>

</section>
</section>
<section anchor="pledge-registrar-and-masa-certificates" title="Pledge, Registrar and MASA certificates">

<t>Below the certificates that accompany the keys. The certificate description is followed by the hexadecimal DER of the certificate</t>

<section anchor="pledge-idevid-certificate" title="Pledge IDevID certificate">

<figure><artwork><![CDATA[
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4822678189204992 (0x11223344556600)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=NL, ST=NB, L=Helmond, O=vanderstok,
                OU=manufacturer, CN=masa.stok.nl
        Validity
            Not Before: Sep  9 07:42:03 2020 GMT
            Not After : Dec 31 23:59:59 9999 GMT
        Subject: C=NL, ST=NB, L=Helmond, O=vanderstok, 
                    OU=manufacturing, 
       CN=uuid:pledge.1.2.3.4/serialNumber=pledge.1.2.3.4
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:8a:9c:86:ae:bc:0b:71:e9:91:56:42:78:90:3a:
                    ab:cf:d1:9a:5d:6a:e7:72:55:ee:95:ad:cf:34:02:
                    3c:96:44:69:cd:de:8c:90:d2:b9:eb:e5:d5:f2:9d:
                    f1:b6:c6:af:3e:71:8f:ae:1b:04:eb:00:96:29:f4:
                    ec:a8:64:20:2c
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Subject Key Identifier:
59:B1:E1:19:F4:68:53:E9:0E:7C:9F:29:D0:FB:5B:1F:AC:C3:82:49
            X509v3 Authority Key Identifier: 
                keyid:
22:BC:B8:20:D9:C5:6D:2D:5B:B3:BB:64:8B:E0:8B:A7:86:5E:CE:B4

            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:4d:fd:a8:83:78:31:d2:62:a4:e5:48:a2:e0:a7:
         3b:c5:14:e9:7e:46:13:45:bc:30:fd:1d:e5:d6:63:3e:d8:f4:
         02:21:00:a8:e5:1e:c2:79:77:90:fc:40:a8:7a:bf:b1:bd:81:
         8b:ee:d7:56:1a:04:4d:8f:c8:3d:76:5f:4d:6e:36:a2:c2

]]></artwork></figure>

<t>This is the hexadecimal representation in (request-)voucher examples referred to as pledge-cert-hex.</t>

<figure><artwork><![CDATA[
30820254308201faa003020102020711223344556600300a06082a8648ce3d04
0302306f310b3009060355040613024e4c310b300906035504080c024e423110
300e06035504070c0748656c6d6f6e6431133011060355040a0c0a76616e6465
7273746f6b31153013060355040b0c0c6d616e75666163747572657231153013
06035504030c0c6d6173612e73746f6b2e6e6c3020170d323030393039303734
3230335a180f39393939313233313233353935395a308190310b300906035504
0613024e4c310b300906035504080c024e423110300e06035504070c0748656c
6d6f6e6431133011060355040a0c0a76616e64657273746f6b31163014060355
040b0c0d6d616e75666163747572696e67311c301a06035504030c1375756964
3a706c656467652e312e322e332e34311730150603550405130e706c65646765
2e312e322e332e343059301306072a8648ce3d020106082a8648ce3d03010703
4200048a9c86aebc0b71e991564278903aabcfd19a5d6ae77255ee95adcf3402
3c964469cdde8c90d2b9ebe5d5f29df1b6c6af3e718fae1b04eb009629f4eca8
64202ca35d305b30090603551d1304023000301d0603551d0e0416041459b1e1
19f46853e90e7c9f29d0fb5b1facc38249301f0603551d2304183016801422bc
b820d9c56d2d5bb3bb648be08ba7865eceb4300e0603551d0f0101ff04040302
05a0300a06082a8648ce3d040302034800304502204dfda8837831d262a4e548
a2e0a73bc514e97e461345bc30fd1de5d6633ed8f4022100a8e51ec2797790fc
40a87abfb1bd818beed7561a044d8fc83d765f4d6e36a2c2]]></artwork></figure>

</section>
<section anchor="registrar-certificate" title="Registrar Certificate">

<figure><artwork><![CDATA[
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            39:73:74:f3:fa:81:2a:0d:37:10:3b:68:c1:84:81:c5:01:bc:7c:fe
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=NL, ST=NB, L=Helmond, O=vanderstok,
                OU=consultancy, CN=registrar.stok.nl
        Validity
            Not Before: Sep  9 07:42:03 2020 GMT
            Not After : Sep  9 07:42:03 2021 GMT
        Subject: C=NL, ST=NB, L=Helmond, O=vanderstok, 
              OU=consultancy, CN=registrar.stok.nl
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:6a:24:a9:e2:4b:e2:34:d1:7a:d4:7e:76:0c:94:
                    b5:e1:dc:4e:e1:15:ad:89:11:2a:d4:a6:a6:4b:b1:
                    bf:68:f9:17:7d:70:e9:10:9c:b4:8c:9b:0d:c7:df:
                    26:41:19:9d:0c:2d:bf:f2:1e:d5:84:03:8a:c8:3f:
                    47:81:be:13:8e
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
25:CD:93:71:B5:A1:5F:6D:1E:E8:C3:7A:51:13:BE:0B:8F:13:2C:C2
            X509v3 Authority Key Identifier: 
                keyid:
25:CD:93:71:B5:A1:5F:6D:1E:E8:C3:7A:51:13:BE:0B:8F:13:2C:C2

            X509v3 Basic Constraints: 
                CA:TRUE
    Signature Algorithm: ecdsa-with-SHA256
         30:46:02:21:00:a6:6d:9e:24:f9:de:08:b7:f0:cf:43:c3:c0:
         ee:57:cc:b6:60:de:ae:2e:70:cc:61:a1:a2:b3:35:35:02:5b:
         ba:02:21:00:bf:fd:74:6a:99:eb:da:01:77:fc:6c:37:95:75:
         8a:f4:a0:9f:99:8e:bc:4a:90:62:49:f0:7a:c9:65:96:dc:75

]]></artwork></figure>

<t>This the hexadecimal representation, in (request-)voucher examples referred to as regis-cert-hex</t>

<figure><artwork><![CDATA[
30820239308201dea0030201020214397374f3fa812a0d37103b68c18481c501
bc7cfe300a06082a8648ce3d0403023073310b3009060355040613024e4c310b
300906035504080c024e423110300e06035504070c0748656c6d6f6e64311330
11060355040a0c0a76616e64657273746f6b31143012060355040b0c0b636f6e
73756c74616e6379311a301806035504030c117265676973747261722e73746f
6b2e6e6c301e170d3230303930393037343230335a170d323130393039303734
3230335a3073310b3009060355040613024e4c310b300906035504080c024e42
3110300e06035504070c0748656c6d6f6e6431133011060355040a0c0a76616e
64657273746f6b31143012060355040b0c0b636f6e73756c74616e6379311a30
1806035504030c117265676973747261722e73746f6b2e6e6c3059301306072a
8648ce3d020106082a8648ce3d030107034200046a24a9e24be234d17ad47e76
0c94b5e1dc4ee115ad89112ad4a6a64bb1bf68f9177d70e9109cb48c9b0dc7df
2641199d0c2dbff21ed584038ac83f4781be138ea350304e301d0603551d0e04
16041425cd9371b5a15f6d1ee8c37a5113be0b8f132cc2301f0603551d230418
3016801425cd9371b5a15f6d1ee8c37a5113be0b8f132cc2300c0603551d1304
0530030101ff300a06082a8648ce3d0403020349003046022100a66d9e24f9de
08b7f0cf43c3c0ee57ccb660deae2e70cc61a1a2b33535025bba022100bffd74
6a99ebda0177fc6c3795758af4a09f998ebc4a906249f07ac96596dc75]]></artwork></figure>

</section>
<section anchor="masa-certificate" title="MASA Certificate">

<figure><artwork><![CDATA[
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            70:5a:34:7e:67:d2:4d:70:b0:c6:ca:60:ff:fb:75:d9:46:82:e6:0e
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=NL, ST=NB, L=Helmond, O=vanderstok,
                OU=manufacturer, CN=masa.stok.nl
        Validity
            Not Before: Sep  9 07:42:03 2020 GMT
            Not After : Sep  9 07:42:03 2021 GMT
        Subject: C=NL, ST=NB, L=Helmond, O=vanderstok,
                  OU=manufacturer, CN=masa.stok.nl
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:81:f4:72:ec:9c:47:b2:8e:d1:eb:38:33:41:00:
                    d3:62:f6:48:50:da:02:d0:56:b2:22:7b:c8:4b:80:
                    59:95:77:07:d0:c3:58:8c:3c:f2:3c:5b:00:83:79:
                    54:da:0d:d1:b0:af:a1:c2:e8:cd:2c:3b:d0:86:45:
                    9f:89:73:0a:cb
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
22:BC:B8:20:D9:C5:6D:2D:5B:B3:BB:64:8B:E0:8B:A7:86:5E:CE:B4
            X509v3 Authority Key Identifier: 
                keyid:
22:BC:B8:20:D9:C5:6D:2D:5B:B3:BB:64:8B:E0:8B:A7:86:5E:CE:B4

            X509v3 Basic Constraints: 
                CA:TRUE
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:04:ac:8d:48:62:a2:a5:04:4f:61:fd:38:83:53:
         9f:00:e7:d6:4b:4d:30:1b:84:29:d4:2d:35:58:b0:a0:0c:7d:
         02:21:00:8c:f1:f4:f9:a2:11:fe:64:46:a9:87:9f:58:ca:ea:
         da:4f:0a:42:32:c2:6a:e8:c5:9d:62:c0:67:f0:b8:44:43
]]></artwork></figure>

<t>This is the hexadecimal representation, in (request-)voucher examples referred to as masa-cert-hex.</t>

<figure><artwork><![CDATA[
30820230308201d6a0030201020214705a347e67d24d70b0c6ca60fffb75d946
82e60e300a06082a8648ce3d040302306f310b3009060355040613024e4c310b
300906035504080c024e423110300e06035504070c0748656c6d6f6e64311330
11060355040a0c0a76616e64657273746f6b31153013060355040b0c0c6d616e
7566616374757265723115301306035504030c0c6d6173612e73746f6b2e6e6c
301e170d3230303930393037343230335a170d3231303930393037343230335a
306f310b3009060355040613024e4c310b300906035504080c024e423110300e
06035504070c0748656c6d6f6e6431133011060355040a0c0a76616e64657273
746f6b31153013060355040b0c0c6d616e756661637475726572311530130603
5504030c0c6d6173612e73746f6b2e6e6c3059301306072a8648ce3d02010608
2a8648ce3d0301070342000481f472ec9c47b28ed1eb38334100d362f64850da
02d056b2227bc84b8059957707d0c3588c3cf23c5b00837954da0dd1b0afa1c2
e8cd2c3bd086459f89730acba350304e301d0603551d0e0416041422bcb820d9
c56d2d5bb3bb648be08ba7865eceb4301f0603551d2304183016801422bcb820
d9c56d2d5bb3bb648be08ba7865eceb4300c0603551d13040530030101ff300a
06082a8648ce3d0403020348003045022004ac8d4862a2a5044f61fd3883539f
00e7d64b4d301b8429d42d3558b0a00c7d0221008cf1f4f9a211fe6446a9879f
58caeada4f0a4232c26ae8c59d62c067f0b84443]]></artwork></figure>

</section>
</section>
<section anchor="cose-signed-voucher-request-from-pledge-to-registrar" title="COSE signed voucher request from pledge to Registrar">

<t>In this example the voucher request has been signed by the pledge, and has been sent to the JRC over CoAPS.  This example
uses the proximity-registrar-cert mechanism to request a voucher that
pins the certificate of the registrar.</t>

<figure><artwork><![CDATA[
    POST coaps://registrar.example.com/est/rv
    (Content-Format: application/voucher-cose+cbor)
    signed_request_voucher
]]></artwork></figure>

<t>The payload signed_request_voucher is shown as hexadecimal dump (with lf added):</t>

<figure><artwork><![CDATA[
d28444a101382ea1045820f8926f5ba385b7bccf23592b97a73c1b00bffc01023
0f647f06960870b1fd6ee5902aca11909c5a61909c77818323032302d31302d35
5431333a34363a31332d30303a30301909c97818323032322d31302d355431333
a34363a31332d30303a30301909c6021909cc5029c7bafb81a2c6160d3357d229
11f5101909d26e706c656467652e312e322e332e341909cf59023d30820239308
201dea0030201020214397374f3fa812a0d37103b68c18481c501bc7cfe300a06
082a8648ce3d0403023073310b3009060355040613024e4c310b3009060355040
80c024e423110300e06035504070c0748656c6d6f6e6431133011060355040a0c
0a76616e64657273746f6b31143012060355040b0c0b636f6e73756c74616e637
9311a301806035504030c117265676973747261722e73746f6b2e6e6c301e170d
3230303930393037343230335a170d3231303930393037343230335a3073310b3
009060355040613024e4c310b300906035504080c024e423110300e0603550407
0c0748656c6d6f6e6431133011060355040a0c0a76616e64657273746f6b31143
012060355040b0c0b636f6e73756c74616e6379311a301806035504030c117265
676973747261722e73746f6b2e6e6c3059301306072a8648ce3d020106082a864
8ce3d030107034200046a24a9e24be234d17ad47e760c94b5e1dc4ee115ad8911
2ad4a6a64bb1bf68f9177d70e9109cb48c9b0dc7df2641199d0c2dbff21ed5840
38ac83f4781be138ea350304e301d0603551d0e0416041425cd9371b5a15f6d1e
e8c37a5113be0b8f132cc2301f0603551d2304183016801425cd9371b5a15f6d1
ee8c37a5113be0b8f132cc2300c0603551d13040530030101ff300a06082a8648
ce3d0403020349003046022100a66d9e24f9de08b7f0cf43c3c0ee57ccb660dea
e2e70cc61a1a2b33535025bba022100bffd746a99ebda0177fc6c3795758af4a0
9f998ebc4a906249f07ac96596dc7558473045022100fc28be418e5f25152590e
872b4bbdbe334cd31d1ebb0a806e7a172cad5cff604022056ee414ddac438e7f5
1dda9ddf6ec6e31a78cdde6574717fe46dd3a7c60f5bb5

]]></artwork></figure>

<t>The representiation of signed_voucher_request in CBOR diagnostic format is:</t>

<figure><artwork><![CDATA[
Diagnose(signed_request_voucher) =
18([
h'A101382E',     # {"alg": -47}
{4:h'F8926F5BA385B7BCCF23592B97A73C1B00BFFC010230F647F06960870B1F
D6EE'},
h'request_voucher' 
h'3045022100FC28BE418E5F25152590E872B4BBDBE334CD31D1EBB0A806E7A17
2CAD5CFF604022056EE414DDAC438E7F51DDA9DDF6EC6E31A78CDDE6574717FE4
6DD3A7C60F5BB5'])

Diagnose(request_voucher) =
{2501: {2503: "2020-10-5T13:46:13-00:00", 
        2505: "2022-10-5T13:46:13-00:00", 
        2502: 2, 
        2508: h'29C7BAFB81A2C6160D3357D22911F510', 
        2514: "pledge.1.2.3.4", 
        2511: h'regis-cert-hex'}}, 

]]></artwork></figure>

</section>
<section anchor="cose-signed-voucher-request-from-registrar-to-masa" title="COSE signed voucher request from Registrar to MASA">

<t>In this example the voucher request has been signed by the JRC using the private key from
<xref target="jrcpriv"/>.  Contained within this voucher request is the voucher
request from the pledge to JRC.</t>

<figure><artwork><![CDATA[
    POST coaps://masa.example.com/est/rv
    (Content-Format: application/voucher-cose+cbor)
    signed_masa_request_voucher
]]></artwork></figure>

<t>The payload signed_masa_voucher_request is shown as hexadecimal dump (with lf added):</t>

<figure><artwork><![CDATA[
d28444a101382ea1045820b86ae808f79af17e5948cbda731f158d04bd091c73f
485f2409eac08ee7ddb5c5903fea11909c5a61909c77818323032302d31302d35
5431333a34363a31332d30303a30301909c97818323032322d31302d355431333
a34363a31332d30303a30301909cc5029c7bafb81a2c6160d3357d22911f51019
09d26e706c656467652e312e322e332e341909ca586b433d4e4c2c2053543d4e4
22c204c3d48656c6d6f6e642c204f3d76616e64657273746f6b2c204f553d6d61
6e75666163747572696e672c20434e3d757569643a706c656467652e312e322e3
32e342c2073657269616c4e756d6265723d706c656467652e312e322e332e3419
09ce590323d28444a101382ea1045820f8926f5ba385b7bccf23592b97a73c1b0
0bffc010230f647f06960870b1fd6ee5902aca11909c5a61909c7781832303230
2d31302d355431333a34363a31332d30303a30301909c97818323032322d31302
d355431333a34363a31332d30303a30301909c6021909cc5029c7bafb81a2c616
0d3357d22911f5101909d26e706c656467652e312e322e332e341909cf59023d3
0820239308201dea0030201020214397374f3fa812a0d37103b68c18481c501bc
7cfe300a06082a8648ce3d0403023073310b3009060355040613024e4c310b300
906035504080c024e423110300e06035504070c0748656c6d6f6e643113301106
0355040a0c0a76616e64657273746f6b31143012060355040b0c0b636f6e73756
c74616e6379311a301806035504030c117265676973747261722e73746f6b2e6e
6c301e170d3230303930393037343230335a170d3231303930393037343230335
a3073310b3009060355040613024e4c310b300906035504080c024e423110300e
06035504070c0748656c6d6f6e6431133011060355040a0c0a76616e646572737
46f6b31143012060355040b0c0b636f6e73756c74616e6379311a301806035504
030c117265676973747261722e73746f6b2e6e6c3059301306072a8648ce3d020
106082a8648ce3d030107034200046a24a9e24be234d17ad47e760c94b5e1dc4e
e115ad89112ad4a6a64bb1bf68f9177d70e9109cb48c9b0dc7df2641199d0c2db
ff21ed584038ac83f4781be138ea350304e301d0603551d0e0416041425cd9371
b5a15f6d1ee8c37a5113be0b8f132cc2301f0603551d2304183016801425cd937
1b5a15f6d1ee8c37a5113be0b8f132cc2300c0603551d13040530030101ff300a
06082a8648ce3d0403020349003046022100a66d9e24f9de08b7f0cf43c3c0ee5
7ccb660deae2e70cc61a1a2b33535025bba022100bffd746a99ebda0177fc6c37
95758af4a09f998ebc4a906249f07ac96596dc7558473045022100fc28be418e5
f25152590e872b4bbdbe334cd31d1ebb0<<a806e7a172cad5cff604022056ee41
4ddac438e7f51dda9ddf6ec6e31a78cdde6574717fe46dd3a7c60f5bb55847304
5022047b5314c72cbb2d1212e51198061167c79e1002874cd2665a5b643fa6436
3c30022100ce49ac309f760bd0e75660a7e29edee82f0251724c124150f5326b9
b2654927c
]]></artwork></figure>

<t>The representiation of signed_masa_voucher_request in CBOR diagnostic format is:</t>

<figure><artwork><![CDATA[
Diagnose(signed_masa_request_voucher) =

18([
h'A101382E',     # {"alg": -47} 
{4:h'B86AE808F79AF17E5948CBDA731F158D04BD091C73F485F2409EAC08EE7D
DB5C'}, 
h'masa_request_voucher',
h'3045022047B5314C72CBB2D1212E51198061167C79E1002874CD2665A5B643F
A64363C30022100CE49AC309F760BD0E75660A7E29EDEE82F0251724C124150F5
326B9B2654927C']) 

Diagnose(masa_request_voucher) =
{2501: 
   {2503: "2020-10-5T13:46:13-00:00", 
    2505: "2022-10-5T13:46:13-00:00", 
    2508: h'29C7BAFB81A2C6160D3357D22911F510', 
    2514: "pledge.1.2.3.4", 
    2506:h'433D4E4C2C2053543D4E422C204C3D48656C6D6F6E642C
204F3D76616E64657273746F6B2C204F553D6D616E75666163747572696E672C2
0434E3D757569643A706C656467652E312E322E332E342C2073657269616C4E75
6D6265723D706C656467652E312E322E332E34', 
    2510: h'request_voucher'}},



]]></artwork></figure>

</section>
<section anchor="cose-signed-voucher-from-masa-to-pledge-via-registrar" title="COSE signed voucher from MASA to Pledge via Registrar">

<t>The resulting voucher is created by the MASA and returned via the JRC to the
Pledge.  It is signed by the MASA’s private key <xref target="masapriv"/> and can be
verified by the pledge using the MASA’s public key contained within the MASA certificate.</t>

<t>This is the raw binary signed_voucher, encoded in hexadecimal (with lf added):</t>

<figure><artwork><![CDATA[
d28444a101382ea1045820ab59b0679fcf65d5223d4ce4266a27a9c7432702466
ff5f3648e822a64d61b145902b0a1190993a71909957818323032302d31302d35
5431333a34363a31342d30303a30301909977818323032322d31302d355431333
a34363a31342d30303a30301909940319099a5029c7bafb81a2c6160d3357d229
11f51019099e6e706c656467652e312e322e332e3419099b59023d30820239308
201dea0030201020214397374f3fa812a0d37103b68c18481c501bc7cfe300a06
082a8648ce3d0403023073310b3009060355040613024e4c310b3009060355040
80c024e423110300e06035504070c0748656c6d6f6e6431133011060355040a0c
0a76616e64657273746f6b31143012060355040b0c0b636f6e73756c74616e637
9311a301806035504030c117265676973747261722e73746f6b2e6e6c301e170d
3230303930393037343230335a170d3231303930393037343230335a3073310b3
009060355040613024e4c310b300906035504080c024e423110300e0603550407
0c0748656c6d6f6e6431133011060355040a0c0a76616e64657273746f6b31143
012060355040b0c0b636f6e73756c74616e6379311a301806035504030c117265
676973747261722e73746f6b2e6e6c3059301306072a8648ce3d020106082a864
8ce3d030107034200046a24a9e24be234d17ad47e760c94b5e1dc4ee115ad8911
2ad4a6a64bb1bf68f9177d70e9109cb48c9b0dc7df2641199d0c2dbff21ed5840
38ac83f4781be138ea350304e301d0603551d0e0416041425cd9371b5a15f6d1e
e8c37a5113be0b8f132cc2301f0603551d2304183016801425cd9371b5a15f6d1
ee8c37a5113be0b8f132cc2300c0603551d13040530030101ff300a06082a8648
ce3d0403020349003046022100a66d9e24f9de08b7f0cf43c3c0ee57ccb660dea
e2e70cc61a1a2b33535025bba022100bffd746a99ebda0177fc6c3795758af4a0
9f998ebc4a906249f07ac96596dc751909960058483046022100d07cadc5c2836
e7845d6d2e2652527386bd40258d20ab24b6bbce5515df915e9022100aba68a07
b2295c4b49d53f73ea370ca66f761ad5d8d8c11c19a2d505729285cb]]></artwork></figure>

<t>The representiation of signed_voucher in CBOR diagnostic format is:</t>

<figure><artwork><![CDATA[
Diagnose (signed_voucher) =
18([ 
h'A101382E',     # {"alg": -47}
{4: h'AB59B0679FCF65D5223D4CE4266A27A9C7432702466FF5F3648E822A64D61
B14'},
h'voucher', 
h'3046022100D07CADC5C2836E7845D6D2E2652527386BD40258D20AB24B6BBCE
5515DF915E9022100ABA68A07B2295C4B49D53F73EA370CA66F761AD5D8D8C11C
19A2D505729285CB'])

Diagnose (voucher) =

{2451: 
    {2453: "2020-10-5T13:46:14-00:00", 
     2455: "2022-10-5T13:46:14-00:00", 
     2452: 3, 
     2458: h'29C7BAFB81A2C6160D3357D22911F510', 
     2462: "pledge.1.2.3.4", 
     2459: h'regis-cert-hex', 
      2454: 0}} 
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
80OI9o+H6UEhyWKYkUroE84Eb+DBxaFwUfh9fIe5yqpTmwFcc/WGN5O45pIY
CmMeW/jKxQu4mwVoucbyC1nQPljf6RZmTTE7SXsVWAqCZs9UUgHo/o12MYlY
xWouWA4vBPM4YPRuBG94AeTDQtk0unPuInjjtoa1WbmGokUdAjo0mDqjGXD1
lpvgnCUqnUd4ROp6LYHMmVI2ZLJFQI6fQieIuCY1p77G0TpNi76a66dx8arx
XZyqWa5/k0liCoWmcaArfm0lUW637aE4TPZOeXedu3BFYH6IhT3OheJ+Ti2t
hTvf4Ue4caOQQzgMOgrj0HNtJXEqLMnQOXDaMzw+GQ915cZcNjtdsQ8YWMGH
G89kHZcKvt56wsdSSWBsKudertYgM8m9Fao8q094Tglejac0y7HteKSz8Jo2
Ngi3BagChAoao0fA3FvPLcbo/Ypq2vCfIKAyDH3GDxBxX3c3vHLU7eMG0y98
Kmv+Yug1vNZRc/SiasqO98QHCPYW1xUY/xjW+6MnPnLrD+Z013/+27/fhMF/
/tv/EQMYonfUf4Hd8MwytN/Pq5UOuAPG1jyb12zBRHtl6zkN8USh8TNM43an
+0hjPYslMfaC9R6YBeO+ukGr2VjHz5oeOjJ4AQoPvr+sLNQsq9ja4Q8fCofs
0HzpDeZUM3Cmrm3dq875Mrdn6BDlm9vLSC3RCUu3EHpiS2K0MagAVitO4Uyo
D1TpKBGbYp0MGgjKbdApcVP3nteIuR5+ENJR1vtSG1Ool3cilZalPCbvmyWo
jnL3CE9h3qLP6Gr7/Utdw51nz+OE95qcZlwId0rBF6yeoy9YgCW8pYuWEyse
XJIbR9s8GYsZUk82Y/nR1JrRPHRZQO6WGAoH/LDksxiPOvfhtWNvVbKJzojW
QCY0JdirHIbh+QBEqwmfuNjLutRUkmNIB17HrUqLRXWmkJmLhMEXyCjiFwqG
8zODkDT8m2We4nEGa+MwzUKmf1HwzXVyMXVYOc4h0xgcm0O5mzhEy0IWbowF
N1l4S4X9gNtXJyaqvuQyYpsHvfzxFNf4/fis1HCCtDxhr/PY4a2fjCUnrT52
bJjpK/CE6XborkyxCQW/mjvv3eNIdsnpempFXVSw8K/Yu1ItZLyO46tRLqRp
xR6lLVWikJVnQcNCbZDkqfH8qd5OqDDj3C0X00DoBVr/StEWZUKHrfYbtWan
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
xxfxzwYEJR76f4k5WGh4kQAA

-->

</rfc>

