This Candidate Recommendation has been approved for publication by the XBRL Standards Board. Candidate Recommendation status indicates that the document meets all relevant requirements and is ready for implementation and testing.
This specification defines a standard approach for applying digital signatures to XBRL and Inline XBRL reports. The approach makes use of XBRL Report Packages to combine signatures with the report being signed.
The specification does not prescribe the use of any specific standards or technologies for creating the signatures, in order to enable the re-use of existing infrastructure for digital signatures, and to permit the use of any legally recognised digital signature technology.
QNames in parenthetical red text after a "MUST" or "MUST NOT" statement prescribe standardised error codes to be used if the associated condition is violated.
Text in blue boxes provides non-normative explanatory information.
Text in yellow boxes provide editorial notes and questions on a draft specification. These will not appear in the final specification.
This specification makes use of QNames to represent values, such as error codes. The following prefixes are used in this specification:
Prefix | Namespace URI |
---|---|
d6 | https://xbrl.org/CR/2025-01-28/d6 |
d6e | https://xbrl.org/CR/2025-01-28/d6/error |
xs | http://www.w3.org/2001/XMLSchema |
Certain values in this specification are required to be valid values for specified XML Schema datatypes. Such datatypes are identified using a QName with a prefix of xs
.
A signed XBRL report is an XBRL or Inline XBRL report that is accompanied by a digital signature that conforms to the constraints of this specification. The digital signature is defined by a digital signature header file named d6.json
. The specification supports a range of report formats, including Inline XBRL, xBRL-XML, xBRL-JSON, and xBRL-CSV (see Section 3.2).
A signed report package is a signed XBRL report that is contained within a report package, and which conforms to the constraints of this specification.
A signed report package is identified by the presence of a d6.json
file within the report package's META-INF
. If the d6.json
file is not present, the report package is treated as an unsigned report package.
An example file structure for a signed report package is shown below:
example-report/
├─ META-INF/
│ ├─ reportPackage.json
│ ├─ d6.json
│ ├─ signatures/
│ │ ├─ signature-subset.json
│ │ └─ signature.xml
│ └─ entry-points/
│ └─ ixbrl-entry-point.json
└─ reports/
└─ ixbrl-report.xhtml
The additional files defined by this specification are:
d6.json
– a digital signature header file (identifies the specification version)signature-subset.json
– a subset selection file (name is an example, may be repeated). This optional file is used to identifiy subset of a report that is the subject of the signature.ixbrl-entry-point.json
– an Inline XBRL entry point file (name is an example, may be repeated). This is one type of report root, and provides digests of all dependencies of the report, and in the case of an Inline XBRL entry point file, selects the Inline XBRL target document to be included in a signature.signature.xml
– a digital signature file (name and extension are an example, may be repeated). This is a digital signature of a subset selection file or a report root.The digital signature header file is a JSON file that identifies the specification version that the signed XBRL report conforms to, and provides a list of the signatures that have been applied to the report.
The digital signature header file is a JSON file that conforms to the following format:
/documentInfo/documentType
MUST resolve to a string (d6e:invalidJSONStructure).The value of this string is handled as follows:
https://xbrl.org/CR/2025-01-28/d6
, then the content of the file the file MUST be a signature header object (d6e:invalidJSONStructure), and it is processed as described in this application;A signed report package MUST contain a digital signature header file named d6.json
in the META-INF
directory. If this file is not present, a processor MAY either raise the error d6e:packageNotSigned, or it it MAY raise no error and treat the package as an unsigned report package. In either case, no further processing of this specification is performed.
The signature header object is the top-level object of a digital signature header file. The object has the following properties:
documentInfo
(object)signatures
(array)A header file documentInfo object provides document-level information for a digital signature header file. The object has a single property:
documentType
(string)https://xbrl.org/CR/2025-01-28/d6
A signature object provides the type and location of a signature. The object has the following properties:
type
(string)filename
(string)signatures
directory. The filename MUST be a valid xs:NCName
(d6e:invalidFilename). The specified file MUST exist in the signatures
directory (d6e:missingSignature).targets
(array)If the file specified by filename
does not contain a signature that is valid according to the specified type
, processors MUST raise d6e:invalidSignature. Processors MAY additionally raise more specific codes from specifications that define the signature format.
The targets
property MUST be a non-empty array of xs:anyURI
values (d6e:invalidJSONStructure) and each entry MUST be a URL that resolves to a report root or subset selection file. Violations of this are handled as follows:
.json
, d6e:invalidFileExtension is raised;/documentInfo/documentType
does not resolve to a string, d6e:invalidJSONStructure is raised;If the digital signature file provides a mechanism for identifying the subject or subjects of the signature then this MUST be the same set of files as those identified by this property (d6e:signatureTargetMismatch).
In the case of a signed report package, the URIs MUST be relative-path reference URIs (d6e:illegalURIReference). Relative URIs are resolved relative to the location of the file in which they appear.
The d6e:invalidSignature and d6e:invalidSignatureTarget error codes are only raised for supported signature types. Where a processor does not support the signature type, it must raise d6e:unsupportedSignatureType as per Section 3.7.
A subset selection file is used when a signature only pertains to part of a report. Where a signature covers the whole report, a report root may be signed directly, although it is also acceptable to use a subset selection file with no selection
property.
{
"documentInfo": {
"documentType": "https://xbrl.org/CR/2025-01-28/d6"
},
"signatures": [
{
"filename": "signature1.xml",
"type": "https://xbrl.org/d6/xades",
"targets": ["ixbrl-target-1.json"]
},
{
"filename": "signature2.xml",
"type": "https://xbrl.org/d6/xades",
"targets": ["ixbrl-target-2.json"]
}
]
}
A report root is a JSON file that is, or identifies, an XBRL or Inline XBRL report.
A signed XBRL report MAY use other XBRL formats provided that it is, or is identified by, a report root.
A report root MUST:
.json
file extension; (d6e:invalidFileExtension)/documentInfo/documentType
resolves to a string (d6e:invalidJSONStructure).The above constraints are checked by handling of the targets
property in Section 3.1.2, and so no error codes are prescribed here.
The documentType
string is treated as described in Open Information Model Common Definitions Section 2.
If /documentInfo/documentType
does not resolve to a string, it should be
treated as if a "document type is not present".
Processors of this specification MUST apply the above validation, but are not required to support any specific report formats.
The following additional constraints apply to report roots appearing in a signed report packages:
META-INF
directory named entry-points
(d6e:invalidReportRoot).A subset selection file specifies a subset of a report that is the target of a signature.
A subset selection file is a JSON file that conforms to the following format:
In the case of a signed report package, subset selection files MUST be in the META-INF/signatures
directory (d6e:misplacedSubsetSelectionFile).
The signature subset object is the top-level object of a subset selection file.
The object has the following properties:
documentInfo
(object)report
(string)digest
(string)report
property.selection
(object)The report
property MUST be an xs:anyURI
(d6e:invalidJSONStructure) and MUST resolve to a report root (d6e:invalidReportProperty is raised if the URI does not resolve to a file, otherwise the file is processed as per Section 3.2).
In the case of a signed report package the report
property MUST be a relative-path reference URI (d6e:illegalURIReference).
Relative URIs are resolved relative to the location of the file in which they appear.
The digest
property MUST:
report
property (d6e:invalidReportRootDigest).A subset selection file documentInfo object provides document-level information for a subset selection file. The object has the following properties:
documentType
(string)https://xbrl.org/CR/2025-01-28/d6/subset
A signature may optionally target a subset of a report. A report subset selection object describes the subset of a report that is the target of a signature. The object has the following properties:
facts
(array)cssSelectors
(object)If cssSelectors
is present, then the report
property of the enclosing signature subset object MUST resolve to an Inline XBRL entry point file (d6e:invalidUseOfCSSSelectors).
At least one of facts
and cssSelectors
MUST be present (d6e:invalidJSONStructure).
This specification does not constrain how fact ID selections and CSS selections
are used. If both cssSelectors
and facts
are present there is no
requirement that the subsets of XHTML selected by CSS selectors has any
relationship to the XBRL facts selected by fact IDs. Collectors of Inline XBRL
Reports may impose specific requirements on how these features are
used.
The name of each property in this object MUST:
xs:anyURI
(d6e:invalidJSONStructure); andixds
property of the Inline XBRL entry point object of the Inline XBRL entry point file for the report (d6e:invalidSubsetDocument). In the case of a signed report package, the URIs MUST be relative-path reference URIs (d6e:illegalURIReference). Relative URIs are resolved relative to the location of the file in which they appear.
The value of each property is an array of strings, each containing a CSS selector identifying a subset of the Inline XBRL Document.
The CSS selectors MUST conform to the constraints defined in Section 3.3.5.
The default namespace for CSS selectors is http://www.w3.org/1999/xhtml
. No other namespaces are available for use in CSS selectors.
{
"documentInfo": {
"documentType": "https://xbrl.org/CR/2025-01-28/d6/subset"
},
"report": "../entry-points/sample-ixr.json",
"manifestDigest": "sha256-7dfe895602f53469e010afd7446c07030eb5d35839b6e6a321f52dbb5f8e2b4b",
"selection": {
"facts": [
"f-3",
"f-32",
"f-239"
],
"cssSelectors": {
"../../reports/report1.xhtml": [
"div#auditors-report"
]
}
}
}
CSS selectors used in a CSS report subset selection object MUST be valid selector, as defined in Selectors Level 3 and MUST only contain the following constructs (d6e:invalidCSSSelector):
:root
, :nth-child()
, :nth-last-child()
, :nth-of-type()
, :nth-last-of-type()
, :first-child
, :last-child
, :first-of-type
, :last-of-type
, :only-child
, :only-of-type
and :empty
structural pseudo-classesInline XBRL reports can comprise one or more Inline XBRL Documents (an Inline XBRL Document Set), and can define multiple, distinct XBRL reports ("target documents").
This specification uses an Inline XBRL entry point file to unambiguously identify the Inline XBRL Documents and target documents included in a signature.
An Inline XBRL entry point file is a JSON file that conforms to the following format:
/documentInfo/documentType
MUST resolve to the string https://xbrl.org/CR/2025-01-28/ixr
(oimce:UnsupportedDocumentType); andThe Inline XBRL entry point object is the top-level object of a Inline XBRL entry point file.
The object has the following properties:
documentInfo
(object)ixds
(array)target
(string)ixds
property, or the empty string, denoting the default target document (d6e:invalidTargetProperty).d6:resources
(object)Each entry in the ixds
property MUST:
xs:anyURI
(d6e:invalidJSONStructure); anddocuments
object of d6:resources
object (d6e:missingDigestForReport).In the case of a signed report package:
reports
directory of the report package or a sub-directory of the reports
directory (d6e:invalidIXDSProperty); andRelative URIs are resolved relative to the location of the file in which they appear.
The set of files identified by the URIs MUST form a valid Inline XBRL Document Set, but processors of this specification are not required to validate this as part of signature validation. Appropriate errors from the Inline XBRL Specification MUST be raised when the report is opened.
A signed XBRL report MAY include multiple Inline XBRL entry point files for the same Inline XBRL Document Set, in order to allow signatures covering different target documents.
See Section 3.10 for information on the d6:resources
property.
An Inline XBRL entry point documentInfo object provides document-level information for an Inline XBRL entry point file. The object has the following properties:
documentType
(string)https://xbrl.org/CR/2025-01-28/ixr
namespaces
(object){
"documentInfo": {
"documentType": "https://xbrl.org/CR/2025-01-28/ixr",
"namespaces": {
"d6": "https://xbrl.org/CR/2025-01-28/d6"
}
},
"ixds": [
"../../reports/ixds1/a.xhtml",
"../../reports/ixds1/b.xhtml"
],
"target": "t1",
"d6:resources": {
"documents": {
"../../reports/ixds1/a.xhtml": "sha256-2b213cf87c748e574cfcd06ee8a1f530b356315e87b36e40b73c4c31c037511c",
"../../reports/ixds1/b.xhtml": "sha256-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"../../reports/ixds1/styles.css": "sha256-c373c697c20c98a745b0659ad5884c4b3b572a97ab28301366291345cf24caa5",
"../../reports/ixds1/image.png": "sha256-41600933328d6735e18c10553662e69b2d6e021c93628bf92d9d7c3d7dbe54b3"
}
}
}
In order to permit the use of a resources object to capture the dependencies of an xBRL-XML report, this specification defines an xBRL-XML entry point file format.
An xBRL-XML entry point file is a JSON file that conforms to the following format:
/documentInfo/documentType
MUST resolve to the string https://xbrl.org/CR/2025-01-28/xbrl-xml
(oimceUnsupportedDocumentType); andThe xBRL-XML entry point object is the top-level object of a xBRL-XML entry point file.
The object has the following properties:
documentInfo
(object)report
(string)d6:resources
(object)The report
property MUST:
xs:anyURI
(d6e:invalidJSONStructure); anddocuments
object of the d6:resources
object (d6e:missingDigestForReport).In the case of a signed report package, the URI MUST:
Relative URIs are resolved relative to the location of the file in which they appear.
The file identified by the URI MUST be a valid XBRL v2.1 report, but processors of this specification are not required to validate this as part of signature validation. Validation against the XBRL v2.1 specification MUST be applied when the report is opened.
See Section 3.10 for information on the d6:resources
property.
An xBRL-XML entry point documentInfo object provides document-level information for an xBRL-XML entry point file. The object has the following properties:
documentType
(string)https://xbrl.org/CR/2025-01-28/xbrl-xml
namespaces
(object){
"documentInfo": {
"documentType": "https://xbrl.org/CR/2025-01-28/xbrl-xml"
},
"report": "../../reports/sample-report.xbrl"
}
A digital signature file contains a digital signature for one or more reports or report subsets in a signed XBRL report. The format of digital signature files is not prescribed by this specification.
A digital signature file MUST provide a signature of one or more subset selection file. d6e:invalidSignature MUST be raised for any signature that is of a type (see Section 3.7) that is supported by the processor, but does not provide a valid signature of a subset selection file.
This specification does not constrain the mechanism used to sign the subset selection file. The type of signature is specified by a signature type URI (see signature object).
A signature type URI is a URI that uniquely identifies a signature type.
This specification defines a single signature type for production use:
https://xbrl.org/CR/2025-01-28/d6/xades
– indicates that the signature has been created in accordance with XML Advanced Electronic Signatures (XAdES).Users of the specification MAY use other signature mechanisms, and should choose appropriate URIs to identify them. Signature URIs MUST NOT use the xbrl.org
domain, unless they are defined by XBRL International.
Processors MUST raise d6e:unsupportedSignatureType if a signature uses a signature type URI that is not supported by the processor. Processors are not required to support XAdES signatures.
In addition to the above, this specification defines a signature type that is to be used for conformance testing purposes only:
https://xbrl.org/CR/2025-01-28/d6/conformance/sha256
When this signature type is specified, the corresponding digital signature file MUST be a test signature file.
A test signature file is a simple JSON file containing a digest of the subset selection file, and is used for conformance testing of processors. Note that this signature type provides no security, and exists purely for testing purposes. Processors MUST support this signature type, but MUST ensure that it is not accepted as a valid signature in production systems.
If a test signature file does not conform to any of the constraints in, or referenced from, this section, then the error code d6e:invalidSignature MUST be raised, as per Section 3.1.2. Other error codes defined in this section are optional, and if used MUST be in addition to d6e:invalidSignature.
Test signature files MUST have a .json
extension, MUST conform to the JSON
syntax constraints in Section 4 and MUST contain an object with the following
properties: (d6e:invalidJSONStructure)
documentInfo
(object)signatureTarget
(string)targetDigest
(string)signatureTarget
expressed as a digest string.The digest in targetDigest
MUST:
A test signature file documentInfo object is a JSON object with the following property:
documentType
(string)https://xbrl.org/CR/2025-01-28/d6/conformance/sha256
{
"documentInfo": {
"documentType": "https://xbrl.org/CR/2025-01-28/d6/conformance/sha256"
},
"signatureTarget": "foo-target.json",
"targetDigest": "sha256-78ca0fa3de1cfc450c2b623a8e98420d16f203a6e6103ad08a32a2a6c2ca3543"
}
Signed XBRL reports SHOULD include digests for all dependencies. This includes all XBRL taxonomy files required to consume the report, and in the case of Inline XBRL reports, this SHOULD also include HTML dependencies, such as images, stylesheets and fonts.
This allows users of a report to ensure that they are consuming the report using exactly the same dependencies as the report author used.
Digests can either be provided directly for each dependency, or by providing a digest of a taxonomy package that provides the dependency.
Information on dependencies is defined by including a resources object in the report root.
A resources object is a JSON object with the name d6:resources
and provides digests and location hints for XBRL documents and their dependencies. The object has the following properties:
documents
(object)taxonomyPackages
(object)Note that the name d6:resources
is a QName, and the d6
prefix MUST be declared in namespaces
object in the file in which it appears.
Each key of the object MUST be an xs:anyURI
(d6e:invalidJSONStructure). Relative URIs are resolved relative to the location of the file in which they appear.
The values of the object are digest strings representing the digest for the file identified by the key. The error code d6e:invalidDocumentDigest is raised if the value is not the correct digest for the file.
All files in a signed report package MUST fall into one of three categories (d6e:unknownOrUnsignedFile):
resources
object of one of the above report roots; orMETA-INF
directory defined or sanctioned by an XBRL specification. Where a documents object is used within a signed report package, any keys that are relative-path reference URIs:
A supporting taxonomy packages object provides digests and location hints for taxonomy packages. The object has the following properties:
digests
(array)locationHints
(object)Each value in the digests
property is the digest of a taxonomy package containing XBRL dependencies that were used when preparing the report.
Processors are not required to perform any validation of the contents of the supporting taxonomy packages object as part of validating signed XBRL report signatures. When opening a signed XBRL report, a processor SHOULD raise a warning if it cannot find a taxonomy package with any of the specified digests (using either the location hints or other means), or if the report's DTS includes files that are not available in the supporting taxonomy packages.
A location hints object provides location hints for taxonomy packages.
The keys of the object are digest strings. Each key MUST appear in the digests
property of the supporting taxonomy packages object. It is not required that all entries in the digests
property are included in the location hints object.
Each value in the object is an array of strings. The array MUST contain at least one string, and each string MUST be an xs:anyURI
(d6e:invalidJSONStructure).
The values are URLs where a taxonomy package matching the digest string of the key may be obtained. Users MAY use taxonomy packages with the correct digest obtained from other locations.
An example resources object is shown below:
{
"d6:resources": {
"documents": {
"../../reports/style.css": "sha256-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"../../reports/image1.png": "sha256-4ad4c718c7f2d34b81ee169d2a5eb997288a5b16ef9492260a428bdbc667538f",
"../../taxonomy/www.example.com/extension.xsd": "sha256-c373c697c20c98a745b0659ad5884c4b3b572a97ab28301366291345cf24caa5"
},
"taxonomyPackages": {
"digests": [ "sha256-41600933328d6735e18c10553662e69b2d6e021c93628bf92d9d7c3d7dbe54b3" ],
"locationHints": {
"sha256-41600933328d6735e18c10553662e69b2d6e021c93628bf92d9d7c3d7dbe54b3": ["http://example.com/xbrl-json/taxonomy/example.zip"]
}
}
}
}
All dependencies of a signed XBRL report SHOULD be included in either the documents object, or be available in a taxonomy package with a digest that matches an entry in the supporting taxonomy packages object.
Due the complexity of determining all dependencies of a report, including the support for different XBRL report formats (see Section 3.2), processors are not required to validate the completeness of all dependencies. Data collectors can ensure the completeness of signature coverage for dependencies by:
A digest string is a string encapsulating a digest algorithm and digest value. A digest string consists of a digest algorithm prefix and a lower case hexadecimal digest value, separated by the -
character (d6e:invalidDigestString).
The digest algorithm prefix MUST be the prefix for a supported digest type (see Section 3.12) (d6e:unsupportedDigestType).
The hexadecimal value MUST be of the correct length for the digest type (d6e:invalidDigestValue).
Example digest string:
sha256-7b7fd29647c0ced9a71541ca2eb041d07fdbafb46d1f193d2c4b02ac0a059f7e
The supported digest methods are SHA-256, SHA-384 and SHA-512 (SHA-2, as defined in FIPS PUB 180-4). These are denoted by the prefixes sha256
, sha384
and sha512
respectively in a digest string. Digest values for these methods represented in hexadecimal are 64, 96 and 128 bytes in length respectively.
Future specifications may define additional permitted digest methods.
JSON files defined by this specification MUST be valid JSON, per RFC 8259 (d6e:invalidJSON).
In order to avoid interoperability issues, objects within JSON documents defined by this specification MUST have unique keys (d6e:invalidJSON).
Such JSON documents MUST use the UTF-8 character encoding (d6e:invalidJSON), and MAY include a Unicode Byte Order Mark, although this is neither required nor recommended.
A URI map object is a JSON object providing a map of URI aliases to full URIs. The content of the URI map MUST conform to the constraints defined in OIM Common for URI maps.
The keys of the object provide the URI alias to be defined, and the values provide the URI to be associated with the alias.
The term relative-path reference URI refers to a Relative URI with a relative path component, as defined in section 4.2 of RFC 3986.
Relative-path reference URIs are used where a URI needs to be constrained
to referring to another file in the same report package. The term
"relative reference" (or "relative URI") technically refers to any URI that
does not include a scheme component, and would permit the use of absolute path
components (starting with /
), hence the need to use the more constrained
"relative-path reference" term.
Inline XBRL reports may reference other resources from XHTML, including CSS, images, and fonts. Where an Inline XBRL Report is included in a signed report package all such dependencies MUST be included in the report package containing the report. This ensures that such dependencies are covered by the signature or signatures.
In order to simplify validation of this requirement, Inline XBRL reports that are included in a signed report package are required to use a Content Security Policy that restricts access to external resources. All such Inline XBRL Documents:
<xhtml:meta>
tag with the following attributes:http-equiv
with value Content-Security-Policy
content
with value default-src 'self'
<xhtml:head>
element of all Inline XBRL Documents and MUST appear before any <xhtml:link>
, <xhtml:style>
or <xhtml:script>
elements.<xhtml:meta>
tags with an http-equiv
attribute of Content-Security-Policy
.Processors MUST raise (d6e:invalidContentSecurityPolicy) if any of the above constraints are not met but are not otherwise required to check the dependencies of the XHTML.
The Content Security Policy defined above only guarantees that any referenced resources have the same "origin". For example, where Inline XBRL files are extracted from a package and served on a web server, the policy would not prevent access to other files on the same server, even if they were not included in the package. One possible mitigation for this problem would be to serve the files on a dedicated subdomain for the filing.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to XBRL International or XBRL organizations, except as required to translate it into languages other than English. Members of XBRL International agree to grant certain licenses under the XBRL International Intellectual Property Policy (https://www.xbrl.org/legal).
This document and the information contained herein is provided on an "AS IS" basis and XBRL INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
The attention of users of this document is directed to the possibility that compliance with or adoption of XBRL International specifications may require use of an invention covered by patent rights. XBRL International shall not be responsible for identifying patents for which a license may be required by any XBRL International specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. XBRL International specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents. XBRL International takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Members of XBRL International agree to grant certain licenses under the XBRL International Intellectual Property Policy (https://www.xbrl.org/legal).