Loading...
Loading...
Last updated: 2026-10-26 · Document ATV-VARSEL-001 v1.0
Every PDF produced by Varsel's screening and enrichment routes since 2026-10-18 carries a signed, machine-readable statement that the document contains AI-generated content, naming the AI providers and models recorded for that run and the time the document was generated (EU AI Act, Article 50(2)). The marking is applied fail-open: a key or library fault produces an unmarked document rather than no document, and is logged. The same statement travels in the report HTML and in the JSON preview response. This page publishes the certificate the statement is signed with, so that anyone holding a Varsel document can verify it without asking us.
The marking says that AI systems produced parts of the document. It says nothing about the accuracy of the screening and makes no determination about the screened entity. Varsel surfaces sourced signals; the decision, and the accountability for it, stay with the reader of the report.
The certificate is self-signed by Conshultocracy AB. A PDF viewer will therefore report the signature as valid but from an untrusted or unknown identity until you import this certificate as a trust anchor. That is the expected reading, not a fault. Trust rests on this published copy: compare the fingerprint below with the one in the published document (ATV-VARSEL-001) and with what your tools compute from the file.
| Subject | CN=Varsel AI transparency, O=Conshultocracy AB, C=SE (self-signed) |
|---|---|
| Valid | 2026-10-17 11:13:15 UTC to 2036-10-15 11:13:15 UTC |
| Key | ECDSA P-256 (secp256r1), ecdsa-with-SHA256 |
| SHA-256 fingerprint (DER) | 64082b8c14bc6ffc457d149d14b67a73256bd98b7ab717121c842fe60be91abf |
| In use since | 2026-10-18 (production release v315) |
-----BEGIN CERTIFICATE-----
MIIBtjCCAVygAwIBAgIUS3GY9LVzWnXxad7yKSSau/TF5NAwCgYIKoZIzj0EAwIw
SjEfMB0GA1UEAwwWVmFyc2VsIEFJIHRyYW5zcGFyZW5jeTEaMBgGA1UECgwRQ29u
c2h1bHRvY3JhY3kgQUIxCzAJBgNVBAYTAlNFMB4XDTI2MTAxNzExMTMxNVoXDTM2
MTAxNTExMTMxNVowSjEfMB0GA1UEAwwWVmFyc2VsIEFJIHRyYW5zcGFyZW5jeTEa
MBgGA1UECgwRQ29uc2h1bHRvY3JhY3kgQUIxCzAJBgNVBAYTAlNFMFkwEwYHKoZI
zj0CAQYIKoZIzj0DAQcDQgAE+S8i769dCmKBZc+0QX+GmoYmgf3a7ywSfdpekp9y
pEo0gzKOYZFoXxs9UdZndj+g0PFa21QtlT2+yZZP5agu96MgMB4wDAYDVR0TAQH/
BAIwADAOBgNVHQ8BAf8EBAMCBsAwCgYIKoZIzj0EAwIDSAAwRQIhALN+Z0OZHcGA
7Yo9arg1F9KQQFbs+BCEFduHtJITdnbZAiBzLOgsgkFRG6UoUHOGG4Z9EHvbMJc+
27rLF5YA7XdClw==
-----END CERTIFICATE-----Download: varsel-ai-transparency-prod-2026-10-18.pem (SHA-256 of the file: 9103f4ab9c8e195b50b31d7b4da159cd733f188460de3e0608f7419b9a21ebb2).
Key custody. The private key exists in exactly one place, as a secret of the production application; it is not in source control, not in any file and never logged. If the key is ever replaced, the new certificate is added here with its first-use date and the old one stays listed so earlier documents remain verifiable. Documents generated before 2026-10-18 carry no marking.
The reference verifier is one Python file with no Varsel code and no network access. It reads the file you give it, prints every check it performs and the manifest it found, and exits 0 (marked, all checks passed, signature verified against the anchor), 4 (marked but no anchor given, so unverified), 3 (unmarked), 1 (marked, a check failed) or 2 (usage or environment error). Always pass the anchor: without it the script never reports a pass.
pip install cryptography pikepdf pyHanko
python verify_varsel_ai_transparency.py <report.pdf> varsel-ai-transparency-prod-2026-10-18.pem
python verify_varsel_ai_transparency.py <report.html> varsel-ai-transparency-prod-2026-10-18.pem
python verify_varsel_ai_transparency.py --json <preview.json> varsel-ai-transparency-prod-2026-10-18.pemDownload: verify_varsel_ai_transparency.py. Expected on a marked PDF: RESULT: MARKED OK, with trusted=True, coverage ENTIRE_FILE and modification NONE.
Without our script, pyHanko's command line gives the same answer for the PDF signature (pip install pyhanko-cli):
pyhanko sign validate --trust varsel-ai-transparency-prod-2026-10-18.pem --trust-replace --no-revocation-check <report.pdf>
# expected: VarselAITransparency:64082b8c14bc6ffc457d149d14b67a73256bd98b7ab717121c842fe60be91abf:INTACT:TRUSTED,UNTOUCHEDThe manifest format (varsel-ai-transparency/1.0), the three carriers (PDF XMP packet plus PAdES signature in the field VarselAITransparency; four <meta> elements in the report HTML; the ai_transparency key of the preview response), the manual verification recipe and the known limits are set out in full in the published document:
A passing verification establishes that the file is byte-for-byte the file our production service signed at the stated time and that it carries a manifest stating the document contains AI-generated content. It does not establish that the screening is accurate or complete, that any finding is true, or anything about the screened entity.
Known limits, stated plainly: the marking does not survive printing, scanning, screenshots or copying text out of the document (only the visible label on the cover does); the time is our own signed server clock, not a third party's; marking is fail-open, so an unmarked document is possible on a key or library fault and is something we want to hear about; and the manifest lists the AI uses the run recorded, not every AI use in the product, and says so. Our feasibility assessment and Code of Practice gap analysis (AFG-VARSEL-001) are available on request.
If a document from our production service dated 2026-10-18 or later verifies as unmarked or fails a check, write to privacy@conshultocracy.com with the file's SHA-256 (the verifier's first output line) and the generated_at value. Do not send the document itself unless we ask. We treat this as a defect.
This page describes Conshultocracy AB's AI-transparency marking for the Varsel service. It is not legal advice and does not vary the terms of any agreement. See also the Terms of Service (section 8.2 on AI-transparency markings).