Copyright © 2010 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
This document defines a profile of the XML Signature Syntax and Processing 1.1 specification to allow a widget package to be digitally signed. Widget authors and distributors can digitally sign widgets as a mechanism to ensure continuity of authorship and distributorship. Prior to instantiation, a user agent can use the digital signature to verify the integrity of the widget package and to confirm the signing key(s). This document specifies conformance requirements on both widget packages and user agents.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This is the 24 June 2010 Candidate Recommendation of the Digital Signatures for Widgets specification. W3C publishes a Candidate Recommendation to indicate that the document is believed to be stable and to encourage implementation by the developer community. The Web Applications (WebApps) Working Group expects to request that the Director advance this document to Proposed Recommendation once the Working Group has developed a comprehensive Widgets Digital Signature Test Suite, and demonstrated at least two interoperable implementations. The WebApps Working Group expects to show these implementations by September 2010. The Working Group does not plan to request to advance to Proposed Recommendation prior to 01 October 2010. The Working Group maintains an implementation report.
Publication as a Candidate Recommendation does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress. Please submit comments to the Working Group's public mailing list (public archive). Comments for this Candidate Recommendation will be tracked.
This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
This document is produced by the Web Applications WG, part of the Rich Web Clients Activity in the W3C Interaction Domain.
A widget package can be signed by the author producing an [XMLDSIG11] signature that cryptographically includes all of the file entries other than signature files. A widget package can also be signed by one or more distributors of the widget, producing [XMLDSIG11] signatures that each cryptographically includes all of the non-signature file entries as well as any author signature.
This section is non-normative.
Defined terms appear as this sample defined term. Such terms are referenced as sample defined term, providing a link back to where the term is defined.
Words that denote a conformance clause or testable assertion use keywords from [RFC2119]: MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED, MAY and OPTIONAL.
Variables are formatted specially, e.g. variable. Code is
also specially formatted, such as code
.
Examples are highlighted to indicate the whole:
This is an example containing some code:
<?xml version="1.0" encoding="UTF-8"?>
Notes are highlighted specially and are used to note editorial issues, or items to be aware of.
This specification uses [ABNF] syntax to define
file names. Rules are concatenated by being written next to each other. A
rule prefixed by *
means zero or more. See [ABNF] for details on this syntax.
The following terms are used throughout this specification so they are gathered here for the readers convenience. The following list of terms is not exhaustive; other terms are defined throughout this specification.
A widget package is a [ZIP] archive that conforms to the [Widgets Packaging] specification.
A file entry is the data held by a local file header, file data, and (optional) data descriptor, as defined in the [ZIP] specification, for each physical file contained in a Zip archive.
The root of the widget package is the top-most path level of the widget package that can contain one or more file entries, as defined in the [Widgets Packaging] specification.
A file name is the name of a file contained in a widget package (derived from the file name field of a local file header of a file entry), as defined in the [Widgets Packaging] specification.
A digitally-signed widget package is a widget package that contains one or more signature files.
An unsigned widget package is a widget package that does not contain any signature files.
A signature file is a file entry containing a detached [XMLDSIG11] signature that adheres to the common constraints for signature generation and validation whose file name conforms to the naming conventions of a signature file name. Signature files are located at the root of the widget package.
A signature file name is a file name for a file entry that represents a signature file. This specification defines the naming conventions for both author signatures and distributor signatures.
A widget signature is an [XMLDSIG11] signature, as contained in a signature file. See also author signature and distributor signature.
A zip relative path is a string that
conform to the [ABNF] for zip-rel-path
as specified in [Widgets Packaging].
This specification makes use of [XML-Namespaces], and uses Uniform Resource Identifiers [URI] to identify resources, algorithms, and semantics.
The following URI is the XML namespace for [XML] elements used by this specification:
http://www.w3.org/ns/widgets-digsig
Note: While use of the above namespace URI is mandatory for XML elements used by this specification, the namespace prefix and entity declaration given below are merely editorial conventions used in this document. Their use by authors of digital signature documents is optional.
<!ENTITY wsig
"http://www.w3.org/ns/widgets-digsig">
wsig:
For resources not under the control of this specification, we use the Uniform Resource Identifiers [URI] defined by the relevant specifications. For example:
ds:
namespace:http://www.w3.org/2000/09/xmldsig
ds11:
namespace:http://www.w3.org/2009/xmldsig11
Role
are defined in the dsp:
namespace:http://www.w3.org/2009/xmldsig-properties
See the XML Security Algorithm Cross-Reference for details [XMLSecAlgs].
Note: No provision is made for an explicit version number in this specification. If a future version of this specification requires explicit versioning of the document format, a different namespace will be used.
This section is non-normative.
Example of a distributor
signature document, named signature1.xml
. For
legibility, the example omits the content of the various cryptographic
digests and instead uses "…":
<?xml version="1.0" encoding="UTF-8"?>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"
Id="DistributorSignature">
<SignedInfo>
<CanonicalizationMethod
Algorithm="http://www.w3.org/2006/12/xml-c14n11"/>
<SignatureMethod
Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<Reference URI="config.xml">
<DigestMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>…</DigestValue>
</Reference>
<Reference URI="index.html">
<DigestMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>…</DigestValue>
</Reference>
<Reference URI="icon.png">
<DigestMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>…</DigestValue>
</Reference>
<Reference URI="#prop">
<Transforms>
<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<DigestValue>…</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>…</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>…</X509Certificate>
</X509Data>
</KeyInfo>
<Object Id="prop">
<SignatureProperties
xmlns:dsp="http://www.w3.org/2009/xmldsig-properties">
<SignatureProperty Id="profile" Target="#DistributorASignature">
<dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"/>
</SignatureProperty>
<SignatureProperty Id="role" Target="#DistributorASignature">
<dsp:Role
URI="http://www.w3.org/ns/widgets-digsig#role-distributor"/>
</SignatureProperty>
<SignatureProperty Id="identifier" Target="#DistributorASignature">
<dsp:Identifier>07425f59c544b9cebff04ab367e8854a</dsp:Identifier>
</SignatureProperty>
</SignatureProperties>
</Object>
</Signature>
The design goals and requirements for this specification are addressed in the [Widgets Requirements] document. This document addresses the following requirements:
reference
element, and
ds:SignedInfo
element.In particular, this specification explicitly supports both author signatures and distributor signatures.
The key words MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, RECOMMENDED, MAY and OPTIONAL in this specification are to be interpreted as described in [RFC2119]. When intended as conformance requirements, the words appear capitalized.
As well as sections marked as non-normative, the examples and notes, and security considerations in this specification are non-normative. Everything else in this specification is normative.
There are two classes of product that can claim conformance to this specification:
A signer is an implementation of this specification that follows the rules for signature generation to digitally sign the contents of a widget package.
A validator is an implementation of this specification that follow the rules for signature validation to validate the digital signatures within a widget package.
When a conformance requirement applies to both a signer and a validator, the generic term implementation is used in this specification.
Note: User agents that implement this specification are encouraged to provide mechanisms to enable end-users to install certificates for enabling verification of digital signatures within the widget package.
This section defines the conformance requirements for signature generation as they apply to a signer.
A signer MUST generate a widget signature according to the Core Generation rules specified in [XMLDSIG11], including rules on Reference Generation and Signature Generation.
A signer MUST place any generated signature file at the root of the widget package.
A signer MUST apply the Common Constraints for Signature Generation and Validation upon signature generation.
The signer MUST NOT generate widget signatures using key lengths of less than the recommended key length unless the life time of the signature is less than one year. Regardless, the key length of the key used by a signer to generate the signature MUST NOT be less than 1024 bits.
If generating an author
signature, the signer MUST
include a dsp:Role
signature property having the URI value
for an author role.
If generating an distributor
signature, the signer MUST
include a dsp:Role
signature property having the URI value
for an distributor role.
It is OPTIONAL for a signer
to make the signature file names of distributor signatures form a
contiguous set of numeric values (i.e., it is not required that signature
files names of distributor signatures follow the pattern
signatures1.xml
, signature2.xml
,
signature3.xml
, and so on. Signers are free to use whatever pattern they want, so
long as the file name conforms to the naming convention for a
distributor signature).
A signer MUST
ensure that every ds:Reference
to same-document XML content
has exactly one ds:Transform
element to specify the
canonicalization method.
Note: This means that a ds:Reference
to the
ds:Object
element will require a ds:Transform
element to specify canonicalization method. A reference to
config.xml
will not, however, since it is not a
same-document reference.
A signer MUST place
a unique identifier string for the signature in the
dsp:Identifier
signature property. This MUST be a unique signing string for all widget signatures
created by the signer.
Note: Signing parties are expected to ensure that the
dsp:Identifier
signature property value is unique for the
widgets that they sign.
This section defines the conformance requirements for signature validation as they apply to a validator.
If widget signature validation is successful or fails, the validator MUST notify any external entities relying on the validation of the widget signature. An example of an external entity is, for example, a user agent that implements [Widgets Packaging].
Note: This specification does not define the means or format of a failure notification, which is left up to implementers. The reason for validation failure can be returned by the implementation to an external entity, including reasons related to Reference validation, Signature validation, Signature Property validation and/or certificate and CRL/OCSP verification.
To locate the signatures within a widget package, a validator MUST use the rule to locate signature files in a widget package.
A validator MUST ignore any file entry whose file name does not conform to the naming convention for a distributor signature or to the naming convention for an author signature.
For example, a validator will
ignore a file with the file name
"signature01.xml
".
A validator MUST validate a widget signature according to Core Validation including Reference Validation and Signature Validation, all of which are defined in [XMLDSIG11].
A validator MUST verify the Common Constraints for Signature Generation and Validation upon signature validation.
If a validator finds that a file entry matching the naming convention for a
distributor signature that does not contain a dsp:Role
signature property having the URI for a distributor role, then the validator MUST treat the
signature as being in error.
If a validator finds that a file
entry matching the naming convention for
an author signature that does not contain a dsp:Role
signature property having the URI for a author role, then the validator MUST treat the signature as being in error.
If a ds:KeyInfo
element is present, then a validator MUST check that the
ds:KeyInfo
conforms to the [XMLDSIG11] specification by performing Basic Path
Validation [RFC5280] on the signing key. A validator SHOULD perform
revocation checking as appropriate.
When validating a widget signature, a
validator MUST be able to
process a ds:Reference
that has a ds:Transform
specifying the canonicalization method.
A validator MUST support [C14N11] to process a
ds:Reference
that specifies [C14N11]
as a canonicalization method.
A validator SHOULD be able to process a ds:Reference
to
same- document XML content when that ds:Reference
does not
have ds:Transform
, for backward compatibility.
Note: A user agent's security policy can affect how signature validation impacts operation, and may have additional constraints on establishing trust, including additional requirements on certificate chain validation and certificate revocation processing using CRLs [RFC5280] or OCSP [RFC2560].
Security policy may also require additional information to
be conveyed in ds:KeyInfo
. Security policy is out of scope
of this specification but has important implications for signature file
processing.
When a signer digitally signs a widget package, or a validator validates a widget package, it MUST make sure that the following requirements on a widget signature apply to all widget signatures included in widget package:
Each widget signature is a detached XML Signature that complies with [XMLDSIG11] syntax.
Each widget signature is generated or validated in a manner compliant with [XMLDSIG11] processing rules.
Each widget signature
contains a dsp:Profile
signature properties element
compliant with the [XMLDSIG-Properties] and this
specification. This dsp:Profile
property has the URI
attribute value of
http://www.w3.org/ns/widgets-digsig#profile
.
Each widget signature
contains a dsp:Role
signature properties element
compliant with [XMLDSIG-Properties]
and this specification.
Each widget signature
contains a dsp:Identifier
signature properties
element compliant with [XMLDSIG-Properties] and this
specification.
Every ds:Reference
used within a widget signature has a URI
attribute.
Every ds:Reference
used within a widget signature is one of the following
two kinds of reference:
ds:Signature
elementEvery ds:Reference
to an item within the widget signature uses an
IDREF
value for the ds:Reference
URI
attribute, referring to a unique ID
(as defined in [XML-Schema-Datatypes]) within the
widget signature.
The URI attribute of every ds:Reference
to a file entry is a zip relative path that identifies a
file inside the widget package.
An author signature is a widget signature with a signature file name that adheres to the
naming convention
for an author signature and has an [XMLDSIG-Properties] Role
element whose URI
attribute is equivalent
to the author role
attribute value. An author signature is intended to be generated by
the author of the widget. The author
signature can be used to determine:
A widget package can contain zero or one author signatures.
In addition to the requirements on a widget
signature, the following is true of an author signature's [XMLDSIG-Properties] Role
element's URI
attribute value:
Role
Attribute value (URI
):http://www.w3.org/ns/widgets-digsig#role-author
The author-sig-filename
[ABNF] rule defines the naming convention for an
author signature, as it applies to the signature file name of the author signature:
author-sig-filename = %x61.75.74.68.6f.72.2d.73.69.67.6e.61.74.75.72.65.2e.78.6d.6c
The author-sig-filename
rule defines the lower-case (case-sensitive) string
"author-signature.xml
".
A distributor signature is a widget signature with a signature file name that adheres to the
naming convention
for a distributor signature and has an [XMLDSIG-Properties] Role
element whose URI
is equivalent to the distributor role attribute
value. A distributor signature is intended to be generated by a third
party (a distributor) that is distributing
the widget on behalf of the author. The distributor signature can be used to
determine:
A widget package can contain zero, one, or more distributor signatures.
In addition to the requirements on a widget
signature, the following is true of an distributor signature's [XMLDSIG-Properties] Role
element's URI
attribute value:
Role
Attribute value (URI
):http://www.w3.org/ns/widgets-digsig#role-distributor
In addition, the ds:Signature
includes
ds:Reference
s for every file entry
of the widget package, including any author signature, but excluding any distributor
signatures. In other words, distributor signatures countersign author signatures,
but will not countersign other distributor signatures.
Each distributor signature has a
file name consisting of the lower-case string
"signature
" followed by a digit in the range 1-9
inclusive, followed by zero or more digits in the range 0-9 inclusive and
then the lower-case ".xml
".
The dist-sig-filename
rule formally defines the naming convention for a
distributor signature, as it applies to the signature file name of a distributor signature:
dist-sig-filename = signature-string non-zero-digit
*DIGIT xml-suffix-string
signature-string = %x73.69.67.6e.61.74.75.72.65
non-zero-digit = %x31-39
xml-suffix-string = %x2e.78.6d.6c
The signature-string
rule defines the lower-case string
"signature
".
The non-zero-digit
rule defines a digit in the range
1-9
, thus leading zeros are disallowed by this rule.
DIGIT
is defined as a digit in the range
0-9
.
The xml-suffix-string
rule defines the lower-case
(case-sensitive) string ".xml
".
An example is signature20.xml
.
Every widget signature can have additional information contained in the
signature ds:X509Data
element, as specified by the [XMLDSIG11] specification. This can include X.509
certificates, and/or CRL and/or OCSP response information that, if
included, are conveyed according to the [XMLDSIG11] specification.
The mandatory certificate format is the X.509 certificate format specified in [RFC5280]. For signers, the RECOMMENDED version of the certificate format is X.509 version 3.
A validator MUST support processing X.509 v3 certificates for when
certificates are used in the ds:X509Data
of a digital
signature.
Note: v3 certificates are necessary to use the v3 extension to express the basic constraints on a certificate. This allows CA certificates to be distinguished from end entity certificates, enabling more robust trust verification.
Identifier
Signature Property A signer uses the dsp:Identifier
signature property to uniquely identify the signature (for example, to
enable signature management).
Note: Signing parties are expected to ensure that the
dsp:Identifier
signature property value is unique for the
widget packages that they sign.
An implementation MUST follow the rules specified in [XMLDSIG11] regarding use of the following algorithms.
Note: Signing a widget with an optional algorithm can result in signatures that are not interoperable with implementations that do not support these algorithms. Authors are cautioned to take this into consideration when signing widget packages.
This section defines the signature algorithms that this specification relies upon. The recommended key length of the key used to generate a signature is 2048 bits.
The following signature algorithms MUST be supported by a validator:
http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
http://www.w3.org/2000/09/xmldsig#dsa-sha1
The following signature algorithms MUST be supported by a signer:
http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
It is OPTIONAL for a signer to support the following signature algorithm:
http://www.w3.org/2000/09/xmldsig#dsa-sha1
The following signature algorithm SHOULD be supported by a signer and validator:
http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256
Note: Although not all validators may support this optional algorithm, implementation is encouraged since it may become mandatory in a subsequent release of this specification. This may also be necessary if any security issues are discovered with the currently required algorithm.
It is OPTIONAL for an implementation to support additional signature algorithms.
The following digest algorithms MUST be supported by an implementation:
http://www.w3.org/2001/04/xmlenc#sha256
It is OPTIONAL for an implementation to support additional digest algorithms.
The following canonicalization algorithms MUST be supported by an implementation:
http://www.w3.org/2001/10/xml-exc-c14n#
It is OPTIONAL for an implementation to support additional canonicalization algorithms.
This section defines for how to locate signature files in a widget package for the purpose of signature validation.
An implementation MUST perform a case-sensitive comparisons on file names.
Let signatures
be an empty list.
For each file entry at the root of the widget package, if
the file name matches the naming convention for
a distributor signature then append this file
entry to the signatures
list.
If the signatures
list is not empty, sort the list of
signatures
by the file name in
ascending numerical order.
For example, signature1.xml
followed by
signature2.xml
followed by signature3.xml
and
so on.
As another example, signature9.xml
followed by signature44.xml
followed by
signature122134.xml
and so on.
Search the root of the widget
package for any file name that matches the
naming convention
for an author signature and then append this file entry to the signatures
list.
If the signatures
list is empty (meaning no signature files were
found), terminate this algorithm and treat this widget package as an unsigned widget package.
Validate the signature files in the signatures list in descending numerical order, with distributor signatures first (if any).
For example, validate signature3.xml
,
then signature2.xml
, then signature1.xml
and
lastly author-signature.xml
.
As another example, validate
signature122134.xml
, then signature44.xml
,
and then signature9.xml
, and lastly
author-signature.xml
.
The decision of which (if any) distributor signatures are to be validated and whether the author signature is validated is out of scope of this specification. This MAY be determined by the security policy used by the validator.
Numerical order is the order based on the numeric portion of the signature file name. Thus in the case more than one distributor signature is to be processed, the highest numbered distributor signature is processed first.
Note: Ordering of widget signature files by the numeric portion of the file name can be used to allow consistent processing and possible optimization.
This section defines a set of common constraints for signature generation and validation.
When validating a signature, a validator MUST verify each condition is met (as indicated by the [RFC2119] keywords) and treat the signature as being in error if any constraint is violated.
When generating a signature, a signer MUST generate the appropriate content in the signature document as required by the algorithm below (as indicated by the [RFC2119] keywords within the algorithm).
The set of constraints are as follows:
A widget signature MUST have a ds:Reference
for every file entry that is not a widget signature.
A distributor
signature MUST have a ds:Reference
for any author signature, if one is
present within the widget package.
For each ds:Reference
element:
For references that are not same-document references,
the URI
attribute MUST be a zip relative
path from the root of the
widget package to the file entry being
referenced.
The Algorithm
attribute of the
ds:digestMethod
MUST be one of the
digest algorithms.
A ds:Reference
to same-document XML
content MUST have a ds:Transform
element child that specifies the canonicalization method. Canonical
XML 1.1 MUST be specified as the Canonicalization
Algorithm for this transform. A ds:Reference
that is not
to same-document XML content MUST NOT have any
ds:Transform
elements.
An implementation SHOULD be able to
process a ds:Reference
to same-document XML content when
that ds:Reference
does not have a
ds:Transform
child element, for backward compatibility.
In this case the default canonicalization algorithm Canonical XML 1.0
will be used, as specified in XML Signature 1.1.
Note: The relevant section in XML Signature 1.1 is section 4.4.3.2, "The Reference Processing Model". This section states "Unless the URI- Reference is such a 'same-document' reference , the result of dereferencing the URI-Reference MUST be an octet stream. In particular, an XML document identified by URI is not parsed by the signature application unless the URI is a same-document reference or unless a transform that requires XML parsing is applied." In the same section the specification notes, "In this specification, a 'same- document' reference is defined as a URI-Reference that consists of a hash sign ('#') followed by a fragment or alternatively consists of an empty URI…" [XMLDSIG11].
Every Signature Property required by this specification is to be incorporated into the signature as follows:
A widget signature MUST include a ds:Object
element within
the ds:Signature
element. This ds:Object
element MUST have an Id
attribute
that is referenced by a ds:Reference
element within the
signature ds:SignedInfo
element.
This ds:Object
element MUST contain a single
ds:SignatureProperties
element that MUST contain a different
ds:SignatureProperty
element for each property required
by this specification.
Each ds:Signature
property required by this
specification MUST meet the syntax requirements
of [XMLDSIG-Properties].
The ds:Signature
needs to meet the following
requirements:
The Algorithm
attribute of the
ds:CanonicalizationMethod
element MUST be one of the canonicalization algorithms.
The ds:SignatureMethod
algorithm used in
the ds:SignatureValue
element MUST
be one of the signature
algorithms. The ds:Signature
MUST be produced using a key of the recommended key length or stronger
(meaning larger than 2048 bits).
The ds:KeyInfo
element MAY be
included, which MAY include CRL and/or OCSP
information in a manner compliant with the [XMLDSIG11] specification.
If one or more certificates are in the
ds:KeyInfo
element, they MUST be of
the mandatory certificate
format.
The ds:SignedInfo
element MUST
include all the ds:Reference
elements listed in items 1,
2 and 4 of this section.
The widget signature MUST be serialized as a [UTF-8] encoded [XML] document and be named using the appropriate naming convention: either the naming convention for a distributor signature or the naming convention for an author signature.
This section is non-normative.
The signature scheme described in this document deals with the content present inside a potentially compressed widget package. This implies that, in order to verify a widget signature, implementations need to decompress a data stream that can come from an arbitrary source. A signature according to this specification does not limit the attack surface of decompression and unpacking code used during signature extraction and verification.
Care needs to be taken to avoid resource exhaustion attacks through maliciously crafted widget packages during signature validation.
Implementations need to be careful about trusting path components found in the widget package. Such path components might be interpreted by operating systems as pointing at security critical files outside the widget environment proper, and naive unpacking of widget packages into the file system might lead to undesirable and security relevant effects, such as overwriting of startup or system files.
There is no single signature file that includes all files of a widget package, including all of the signature files. This leaves a widget package subject to an attack where distributor signatures can be removed or added. An author signature could also be attacked by removing the signature and any distributor signatures, if they are present. A signature file can also be renamed, which can affect the order in which distributor signatures are processed.
Mechanisms to install new root certificates in a user agent need to be subject to security critical mechanisms. End-users should be made aware of what they are doing and why when installing a new root certificate.
The Web Applications working group would like to thank members of the W3C XML Security working group for their comments and suggestions, as well as all reviewers of drafts of this document.