<?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.2.9 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

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

<rfc ipr="trust200902" docName="draft-birkholz-suit-coswid-manifest-00" category="std">

  <front>
    <title abbrev="CoSWID SUIT Extension">A SUIT Manifest Extension for Concise Software Identifiers</title>

    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>

    <date year="2018" month="July" day="18"/>

    <area>Security</area>
    <workgroup>SUIT Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document defines a resource extension for Concise Software Identifiers (CoSWID) that represents a SUIT firmware manifest. This extension combines the information elements of the SUIT information model with the semantic expressiveness of Software Identifiers. In consequence, this composite enables the integration of Firmware Updates for the Internet of Things (SUIT) in existing work-flows for updates of software components in general.</t>



    </abstract>


  </front>

  <middle>


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

<t>Firmware updates are quite similar to software update of applications – composites of software components – for example, servers or user-devices. Attributes and semantic dependencies as defined by Concise Software Identifies <xref target="I-D.ietf-sacm-coswid"/> are equivalent. In contrast, location and target definitions as well as the characteristics that are specific to an update campaign of a SUIT require a specific set of addiction information elements. The semantics regarding SUIT specific information elements are defined by the SUIT Information Model <xref target="I-D.ietf-suit-information-model"/>. Correspondingly, the CoSWID extension defined in this document uses CDDL extension points to add SUIT information elements to the standard Concise Software Identifiers.</t>

<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="suit-manifest-extension" title="SUIT Manifest Extension">

<t>The following CDDL data definition is intended to be used as an extension to the CoSWID CDDL data definition. Corresponding terms, such as Resources, Processors and Targets of input nodes and output nodes are covered by the SUIT Information Model and Architecture <xref target="I-D.ietf-suit-architecture"/>.</t>

</section>
<section anchor="suit-manifest-resource-data-definition" title="SUIT Manifest Resource Data Definition">

<t>The following CDDL data definition MUST be added to Payload or Evidence Resources via CDDL extension points in order to express SUIT Manifests in Concise Software Identifiers.</t>

<figure><artwork type="CDDL"><![CDATA[
$$payload-extension  //= (suit.manifest-entry,)
$$evidence-extension  //= (suit.manifest-entry,)

suit-manifest = {
  suit.manifest-version,
  suit.digest-info,
  suit.text-reference,
  suit.nonce,
  suit.sequence-number,
  ? suit.pre-condition,
  ? suit.post-condition,
  ? suit.directives,
  ? suit.resources,
  ? suit.processors,
  ? suit.targets,
  ? suit.extensions,
}

suit.manifest-entry = (59: suit-manifest / [ 2* suit-manifest ] )
suit.manifest-version = (60: 1)
suit.digest-info = (61: [ suit.digest-algorithm,
                          ? suit.digest-parameters,
                        ]
                   )
suit.digest-algorithm = uint
suit.digest-parameters = bytes
suit.text-reference = (62: bytes)
suit.nonce = (63: bytes)
suit.sequence-number = (64: uint)
suit.pre-condition = (suit.id-condition // suit.time-condition // suit.image-condition // suit.custom-condition)
suit.post-condition = (suit.image-condition // suit.custom-condition)
suit.id-condition = (65: [ + [ suit.vendor / suit.class / suit.device,
                               suit.uuid,
                             ]
                         ]
                    ) 
suit.vendor = 0
suit.class = 1
suit.device = 2
suit.uuid = bstr .size 16
suit.time-condition = (66: [ + [ suit.install-after / suit.best-before,
                                 suit.timestamp,
                               ]
                           ]
                      )
suit.install-after = 0
suit.best-before = 1
suit.timestamp = uint .size 8
suit.image-condition = (67: [ + [ suit.current-content / suit.not-current-content,
                                  suit.storage-identifier,
                                  ? suit.digest,
                                ]
                            ]
                       )
suit.current-content = 0
suit.not-current-content = 1
suit.digest = bytes
suit.storage-identifier = bytes
suit.custom-condition = (68: [ nint,
                               suit.condition-parameters,
                             ]
                        )
suit.condition-parameters = bytes
suit.directives = (69: { + int => bytes } )
suit.resources = (70: [ + [ suit.resource-type,
                            suit.uri-list,
                            suit.digest,
                            suit.onode,
                            ? suit.size,
                          ]
                      ] 
                 )
suit.resource-type = suit.payload / suit.dependency / suit.key / suit.alias
suit.payload = 0
suit.dependency = 1
suit.key = 2
suit.alias = 3
suit.uri-list = { + int => text }
suit.size = uint
suit.onode = bytes
suit.processors = (71: [ + [ suit.decrypt / suit.decompress / suit.undiff / suit.relocate / suit.unrelocate,
                             suit.parameters,
                             suit.inode,
                             suit.onode,
                           ]
                       ]
                  )
suit.decrypt = 0
suit.decompress = 1
suit.undiff = 2
suit.relocate = 3
suit.unrelocate = 4
suit.parameters = bytes
suit.inode = bytes
suit.targets = (72: [ + [ suit.component-id,
                          suit.storage-identifier,
                          suit.inode,
                          ? suit.encoding,
                        ]
                    ]
                )
suit.component-id = [ + bytes ]
suit.encoding = bytes
suit.extensions = (73: { + int => bytes } )
]]></artwork></figure>

</section>
<section anchor="future-updates" title="Future Updates">

<t>This draft is intended to incorporate the extension registry that will be defined by Concise Software Identifiers. Until then, a consecutive numbering system in alignment to the labels used in Concise Software Identifiers is applied.</t>

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

<t>TBD</t>

</section>
<section anchor="acknowledgments" title="Acknowledgments">

<t>TBD</t>

</section>
<section anchor="change-log" title="Change Log">

<t>Initial Contribution</t>

</section>
<section anchor="contributors" title="Contributors">

<t>TBD</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference anchor="I-D.ietf-sacm-coswid">
<front>
<title>Concise Software Identifiers</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='J' surname='Fitzgerald-McKay' fullname='Jessica Fitzgerald-McKay'>
    <organization />
</author>

<author initials='C' surname='Schmidt' fullname='Charles Schmidt'>
    <organization />
</author>

<author initials='D' surname='Waltermire' fullname='David Waltermire'>
    <organization />
</author>

<date month='July' day='2' year='2018' />

<abstract><t>This document defines a concise representation of ISO/IEC 19770-2:2015 Software Identification (SWID) tags that are interoperable with the XML schema definition of ISO/IEC 19770-2:2015 and augmented for application in Constrained-Node Networks.  Next to the inherent capability of SWID tags to express arbitrary context information, Concise SWID (CoSWID) tags support the definition of additional semantics via well-defined data definitions incorporated by extension points.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-sacm-coswid-06' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-sacm-coswid-06.txt' />
</reference>



<reference anchor="I-D.ietf-suit-information-model">
<front>
<title>Firmware Updates for Internet of Things Devices - An Information Model for Manifests</title>

<author initials='B' surname='Moran' fullname='Brendan Moran'>
    <organization />
</author>

<author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'>
    <organization />
</author>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<date month='July' day='2' year='2018' />

<abstract><t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a solid and secure firmware update mechanism that is also suitable for constrained devices.  Incorporating such update mechanism to fix vulnerabilities, to update configuration settings as well as adding new functionality is recommended by security experts.  One component of such a firmware update is the meta-data, or manifest, that describes the firmware image(s) and offers appropriate protection.  This document describes all the information that must be present in the manifest.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-suit-information-model-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-suit-information-model-01.txt' />
</reference>



<reference anchor="I-D.ietf-suit-architecture">
<front>
<title>A Firmware Update Architecture for Internet of Things Devices</title>

<author initials='B' surname='Moran' fullname='Brendan Moran'>
    <organization />
</author>

<author initials='M' surname='Meriac' fullname='Milosch Meriac'>
    <organization />
</author>

<author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'>
    <organization />
</author>

<author initials='D' surname='Brown' fullname='David Brown'>
    <organization />
</author>

<date month='July' day='2' year='2018' />

<abstract><t>Vulnerabilities with Internet of Things (IoT) devices have raised the need for a solid and secure firmware update mechanism that is also suitable for constrained devices.  Incorporating such update mechanism to fix vulnerabilities, to update configuration settings as well as adding new functionality is recommended by security experts.  This document lists requirements and describes an architecture for a firmware update mechanism suitable for IoT devices.  The architecture is agnostic to the transport of the firmware images and associated meta-data.  This version of the document assumes asymmetric cryptography and a public key infrastructure.  Future versions may also describe a symmetric key approach for very constrained devices.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-suit-architecture-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-suit-architecture-01.txt' />
</reference>




    </references>




  </back>

<!-- ##markdown-source:
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
AAA=

-->

</rfc>

