This document is the index of the technical documentation of hodeishield that Article 13 of the
Cyber Resilience Act, Regulation (EU) 2024/2847,
asks the manufacturer to draw up, as set out in Annex VII. It follows the eight items of Annex VII
in order. For each item it points to the file in this repository that holds the information, and
says plainly what does not apply or is not available yet. Every statement about the product names
the file that backs it, so that a reader can check it.
The manufacturer is Hodeitek S.L., Markole 17, 20550 Aretxabaleta, Gipuzkoa, Spain
(NOTICE, user-information.md). The
product is HodeiShield CLI; its command is hodeishield.
Each release keeps the copy of this document that applies to it, in that release's tag:
https://github.com/Hodeitek/hodeishield-cli/blob/v<version>/docs/technical-documentation.md.
- Product.
hodeishieldis a product with digital elements (Article 3(1)): software that is placed on the market and that connects to a remote data processing solution, the HodeiShield service (user-information.md). - Category. It is in the default category. Under Article 7(1), a product is important only if
its core functionality is one of those listed in Annex III (class I or class II), and critical
only if it is one of those in Annex IV. The core functionality of
hodeishieldis to read one organisation's data from the HodeiShield API, from a terminal or a script (risk-assessment.md). It is a read-only API client: it is not, for example, a password manager, a VPN, a SIEM or an identity management system, and no other entry of Annex III or Annex IV describes it. The technical descriptions of those categories are in Commission Implementing Regulation (EU) 2025/2392. - Conformity assessment. For a product in the default category, the manufacturer uses the internal control procedure, module A (Article 32(1)(a); Annex VIII, Part I). No notified body is involved. The manufacturer draws up this technical documentation, ensures that the design, development and vulnerability handling meet the requirements of Annex I, and draws up the EU declaration of conformity.
- Review of the category. The classification is checked again when the product changes substantially, or when the lists in Annex III and Annex IV or the implementing acts that describe them change (see Procedure).
- The obligations of Article 14 (reporting of actively exploited vulnerabilities and severe incidents) apply from 11 September 2026.
- The obligations of Article 13 and Annex I, the conformity assessment and the CE marking apply from 11 December 2027 (Article 71(2)).
- No declaration of conformity is signed and no CE marking is affixed before 11 December 2027. The template of the declaration is prepared now.
| Annex VII, item 1 | Where it is |
|---|---|
| (a) Intended purpose | user-information.md and risk-assessment.md: a read-only command-line client for the public /v1 API of HodeiShield |
| (b) Versions of the software that affect compliance with the essential requirements | Versions follow Semantic Versioning; each release is tagged v<version>, and the version is in Cargo.toml and printed by hodeishield --version (user-information.md). The notes of each release are in CHANGELOG.md. The risk assessment states the version it describes (risk-assessment.md) |
| (c) Photographs or illustrations of external features, marking and internal layout | Not applicable: the product is software only |
| (d) User information and instructions (Annex II) | user-information.md: manufacturer and contact, point of contact for vulnerabilities, intended purpose, secure use, support period, updates, decommissioning and the SBOM. The address of the declaration of conformity is in Product |
Releases before 0.4.0 were published before the user information existed, and releases before the first one that contains this file were published before this documentation existed.
- System architecture.
hodeishieldis a short-lived process on the user's machine, without a server part, daemon or plug-in interface (risk-assessment.md). The repository has two crates and a build tool (README.md):hodeishield-cli, the binary, andhodeishield-api, a Rust client for/v1generated from the OpenAPI document vendored in openapi/v1.json;xtaskis the generator and is not shipped. The CLI calls the client; the client builds the requests, authenticates, retries and limits the size of responses (CONTRIBUTING.md). - Assets, interfaces and data. risk-assessment.md, the attack surface and data minimisation.
- Design decisions. docs/decisions and the decisions in risk-assessment.md. Decision record 0001 is a proposal: nothing in it is decided or implemented.
- Development rules. CONTRIBUTING.md: the Rust toolchain is
pinned in
rust-toolchain.toml,unsafecode is forbidden in the workspace (Cargo.toml,[workspace.lints.rust]), changes reachmainonly through pull requests with passing checks and signed commits (release-signing.md). - Components. The dependencies are fixed in
Cargo.lock, and the components of each release are listed in its SBOM (item 8). How they are chosen, monitored and fixed is in third-party-components.md (Article 13(5)). Drawings and schemes other than the above are not kept: the product has no hardware.
| Element | Where it is |
|---|---|
| Software bill of materials | A CycloneDX SBOM for each archive, signed, and for the container image as an attestation (user-information.md) |
| Identification and monitoring of vulnerabilities and components | risk-assessment.md, point (1), and CONTRIBUTING.md |
| Vulnerabilities in third-party components | Assessment, fix and release rule, reporting to the component's maintainers with any fix, and the record of reports (third-party-components.md; Article 13(6)) |
| Coordinated vulnerability disclosure policy | SECURITY.md |
| Point of contact for reports | Private reporting on GitHub and security@hodeitek.com; security.txt (.well-known/security.txt; SECURITY.md) |
| What happens after a report, fix targets and advisories | SECURITY.md, fix targets and advisories; the advisory template is security-advisory-template.md |
| Secure distribution of updates | Signed releases with checksums, Sigstore signatures and SLSA provenance (verifying-releases.md, release-signing.md); the update command of each channel is in user-information.md. The CLI does not update itself (risk-assessment.md) |
Not yet available: the procedure for the reports of Article 14 to the CSIRT and ENISA, which is not documented in this repository yet. The APT and DNF repositories are not published yet; their signing key is described in release-signing.md.
The product is built from a tagged commit by release.yml, which
builds with --locked, signs, makes the SBOM and the provenance, and publishes a draft release.
container-image.yml and
package-managers.yml publish the container image and
the Homebrew, Scoop, APT and DNF channels when a release is published. Who may change these, and how
the pipeline is checked, is in release-signing.md and
release-signing.md. The checks that run
weekly after the release are listed under Test reports.
risk-assessment.md is the assessment of Article 13(2) to (4): assets, threats T1 to T13 and their controls, how each requirement of Annex I, Part I and Part II is met or why it does not apply, the decisions behind them, and the residual risks. It is reviewed as described in Review.
The information used to determine the support period (Article 13(8)) is this section and SECURITY.md, which is the commitment made to users.
- Period. From 1.0.0, each major version receives security fixes for five years, counted from the release of its first version. Until 1.0.0 is released, the 0.x series has no end-of-support date and security fixes go into the latest 0.x release. The end date of version 1 is set when 1.0.0 is released and is then published in SECURITY.md and in the release notes.
- Rationale.
- Expected time in use.
hodeishieldis a command-line client for a SaaS service that organisations use. It is installed on workstations, servers and CI runners (risk-assessment.md), where it can be part of scripts and pipelines that are expected to run for as long as the organisation uses the service. - Minimum. Article 13(8) requires a support period of at least five years, unless the product is expected to be used for less. Nothing in the intended purpose points to a shorter use.
- Security fixes stay available while a version is supported, even after a HodeiShield subscription ends: every release is a public download, and installing or updating the CLI never requires a subscription (SECURITY.md).
- Expected time in use.
- How end of support is announced. Twelve months before it ends, in SECURITY.md, in the security notice block of the README and in the release notes (SECURITY.md).
This rationale is open to review before 1.0.0 is released, because the support period starts then.
- Harmonised standards. No harmonised standard for the essential requirements of the Cyber Resilience Act is cited in the Official Journal of the European Union at the time of writing. None is applied. No common specification or European cybersecurity certification scheme is applied either.
- Solutions adopted. The requirements of Annex I, Part I and Part II are met by the measures in risk-assessment.md, point by point, with the reason when a point does not apply.
- Other specifications the project follows, as far as they can be seen in this repository:
| Specification | Used for | Where |
|---|---|---|
| Semantic Versioning | Version numbers and the scripting surface | README.md, CHANGELOG.md |
| Keep a Changelog | The release notes | CHANGELOG.md |
| CycloneDX | The SBOM of each release | user-information.md |
| Sigstore signatures | Signing archives, packages, checksums, SBOMs and the container image | verifying-releases.md |
| SLSA provenance | Build provenance of the release archives | verifying-releases.md |
RFC 9116 (security.txt) |
Machine-readable contact for vulnerabilities | SECURITY.md |
| OpenAPI 3.1 | The description of the /v1 API from which the client is generated |
openapi/README.md |
| OpenPGP | The key of the APT and DNF repositories, once they are published | release-signing.md |
The reports of the tests are the runs of the workflows in .github/workflows on GitHub. Each release's CI runs, on its tag and on the commits before it, are its test reports. What each test checks, when it runs and where the result is are in CONTRIBUTING.md. The workflows are:
| Workflow | What it does |
|---|---|
| ci.yml | Format, lint, code generation check, tests, cargo deny, cargo audit, the install script, the changelog and the commit messages, on every pull request and push to dev and main |
| security-tests.yml | CodeQL analysis of the Rust code and of the workflows, and OSV-Scanner on Cargo.lock, on every change and weekly |
| proxy-tls.yml | Behaviour behind a TLS-inspecting proxy, on changes to the CLI, the API client or Cargo.lock |
| workflow-lint.yml | actionlint and zizmor on the workflows, on every change under .github and weekly |
| scorecard.yml | OpenSSF Scorecard of the repository, on every push to main and weekly |
| openapi-sync.yml | Weekly check that the vendored OpenAPI document matches the one the API publishes |
| repo-builder-tests.yml | The APT and DNF repository builder refuses forged packages and indexes |
| release.yml | Builds, tests the MSI, signs and publishes a release, with its SBOM and provenance |
| container-image.yml | Builds, publishes and signs the container image when a release is published |
| package-managers.yml | Publishes the Homebrew, Scoop, APT and DNF channels when a release is published |
| release-integrity.yml | Weekly check that release runs, published files, signature log entries and image signatures match |
| repo-freshness.yml | Weekly check that the APT and DNF repositories are signed and current |
Not available: a test report from a third party. The tests are the manufacturer's own.
The template follows Annex V. No declaration has been issued. From
11 December 2027, each release has its issued declaration in its tag, at
https://github.com/Hodeitek/hodeishield-cli/blob/v<version>/docs/declaration-of-conformity.md.
Each release publishes a CycloneDX SBOM for each archive, and the container image carries one as a signed attestation (user-information.md). The SBOM is public, so it is available to a market surveillance authority without a request.
- Who signs. A legal representative of Hodeitek S.L. signs the EU declaration of conformity, for and on behalf of the manufacturer. The declaration is issued under the sole responsibility of the manufacturer.
- Before signing. The signatory checks that this documentation is up to date for the release, that the risk assessment has been reviewed for it, and that the CI runs of the release tag passed (item 6). Module A is internal control: the manufacturer decides on its own account that the product meets the requirements of Annex I.
- When the declaration is reviewed. It is reviewed and issued again for each release, and whenever the product is substantially modified (Article 3(30)), even between releases. The technical documentation is updated with each release.
- The declaration of a release is the file
docs/declaration-of-conformity.mdin that release's tag, with the fields of the template filled in. A simplified declaration (Annex VI) may be used and then points to the same address. - CE marking. The product is software with no physical form or packaging, so the CE marking is shown digitally (Article 30(1)): on the EU declaration of conformity, and in the README and the release notes of the release it applies to. The marking follows the general principles of Article 30 of Regulation (EC) No 765/2008. Nothing is marked before 11 December 2027.
- Records. The version, place and date of issue, and the name and function of the signatory are written in the declaration.
The technical documentation and the declaration of each release are kept for at least ten years after the product is placed on the market, or for the support period, whichever is longer (Article 13(13)). The support period is in item 4.
The method:
- the copy of the repository in each release's tag on GitHub, which holds this documentation and the
declaration as they were for that release, and the release's assets (archives, packages, SBOMs,
signatures, provenance and
SHA256SUMS); - an archive of each release, with its source and documentation, kept by the manufacturer.