What is XAdES?
XAdES (XML Advanced Electronic Signatures) is a flexible digital signature format based on XML, compliant with the eIDAS regulation. It includes details about:
- Which files were signed
- Who signed them
- Optional features like timestamps and OCSP responses
- File references or even full file contents
More information: Wikipedia - XAdES
What Is ASIC-E?
ASIC-E (Associated Signature Containers - Extended) is a packaging method for digital signatures. It bundles:
- All signed files
- Corresponding XAdES digital signatures
Into one compressed container with the .asice
extension (other variants include .bdoc
, .edoc
, .adoc
, .ddoc
, .scs
).
More information: Wikipedia - ASIC
Advantages of ASIC-E over Digitally Signed PDFs (CAdES, PAdES, PKCS#7)
- You can sign any type of file (not just PDFs)
- Multiple files can be signed in one container
Compatibility and Variants
Due to XAdES/ASIC-E's flexibility, regional differences exist. For example:
- Estonia:
.bdoc
,.ddoc
- Latvia:
.edoc
- Lithuania:
.adoc
To verify a valid .asice
file across EU institutions, use the DigiDoc4 application:
If DigiDoc4 shows the signature as valid, it will be accepted by EU government institutions.
Structure of an .asice
File
An .asice
container is a ZIP file with a strict structure:
my-signed-container.asice
├── mimetype (must be the FIRST file in the ZIP, content: "application/vnd.etsi.asic-e+zip")
├── META-INF/
│ ├── manifest.xml
│ ├── signatures0.xml (or other XAdES signatures)
├── test.txt
└── small.pdf
mimetype
- Content must be:
application/vnd.etsi.asic-e+zip
- Must be the first entry in the ZIP file
META-INF/manifest.xml
Example if signing two files:
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
<manifest:file-entry manifest:full-path="/" manifest:media-type="application/vnd.etsi.asic-e+zip"/>
<manifest:file-entry manifest:full-path="test.txt" manifest:media-type="text/plain"/>
<manifest:file-entry manifest:full-path="small.pdf" manifest:media-type="application/pdf"/>
</manifest:manifest>
signatures0.xml
Contains the actual XAdES-Baseline-LT signature. (See full example in the original text.)
Creating an .asice
Container
- Put the signed files (
test.txt
,small.pdf
) and XML files (manifest.xml
,signatures0.xml
) into a folder. - Ensure
mimetype
is the first file added when creating the ZIP. - Zip the contents.
- Rename the
.zip
file to.asice
.
Note: If you see an error like:
"An error occurred while opening the document. ASiContainer.cpp:312 Failed to read mimetype"
Then the mimetype
file is not the first ZIP entry. Use a different ZIP tool or programmatically set the file order.
Tools and Resources
Sample code (PHP) for generating .asice
files:
eideasy/eideasy-php on GitHub
Sample .asice
container (for reference):container.asice
(hosted where applicable)