diff --git a/.gitea/issue_template/bug_report.md b/.gitea/issue_template/bug_report.md new file mode 100644 index 0000000..f5d5ca6 --- /dev/null +++ b/.gitea/issue_template/bug_report.md @@ -0,0 +1,31 @@ +--- +name: "Relato de Bug" +about: "Relate um problema ou comportamento inesperado no CyberCore Signer" +title: "[BUG] " +labels: + - "bug" +--- + +### Descrição do Problema +Uma descrição clara e concisa do comportamento inesperado ocorrido. + +### Passos para Reproduzir +1. Iniciar o CyberCore Signer com o comando `...` +2. Acessar a aplicação web ou endpoint `...` +3. Tentar executar a operação de assinatura `...` +4. Observar o erro reportado. + +### Comportamento Esperado +O que você esperava que acontecesse normalmente. + +### Logs e Mensagens de Diagnóstico +```text +Cole aqui o trecho relevante de log do agente (sem expor dados sensíveis ou chaves). +``` + +### Informações do Ambiente +* **Sistema Operacional:** Windows 10 / Windows 11 / Ubuntu / Outro (especifique) +* **Versão do Java:** 25 LTS (especifique a vendor: Temurin, Corretto, Oracle) +* **Tipo de Certificado Utilizado:** A1 (arquivo `.pfx`) / A3 (Token USB / Smart Card / Windows-MY) +* **Fabricante do Hardware A3 (se aplicável):** SafeSign / SafeNet / GD Burti / Outro +* **Navegador e Versão (se aplicável ao SDK):** Chrome / Edge / Firefox diff --git a/.gitea/issue_template/feature_request.md b/.gitea/issue_template/feature_request.md new file mode 100644 index 0000000..01ecfa6 --- /dev/null +++ b/.gitea/issue_template/feature_request.md @@ -0,0 +1,26 @@ +--- +name: "Solicitação de Funcionalidade" +about: "Sugira uma nova funcionalidade ou melhoria para o agente ou SDK" +title: "[FEAT] " +labels: + - "enhancement" +--- + +### Problema ou Necessidade +Descreva o cenário de uso ou o desafio que motivou esta solicitação. + +### Solução Proposta +Uma descrição clara do recurso ou melhoria que você gostaria de ver implementado no CyberCore Signer. + +### Módulos Afetados +* [ ] `modules/cybercore-core` (regras criptográficas, provedores, protocolo CCSP) +* [ ] `modules/cybercore-ui` (telas JavaFX, diálogos, selo visual, system tray) +* [ ] `modules/cybercore-app` (ponto de entrada, empacotamento nativo) +* [ ] `sdk/` (SDK Web JavaScript) +* [ ] `docs/` (especificações e manuais) + +### Alternativas Consideradas +Descreva quaisquer alternativas ou soluções de contorno que você considerou. + +### Contexto Adicional +Adicione qualquer imagem, rascunho de tela ou especificação relevante. diff --git a/.gitea/pull_request_template.md b/.gitea/pull_request_template.md new file mode 100644 index 0000000..244bb51 --- /dev/null +++ b/.gitea/pull_request_template.md @@ -0,0 +1,21 @@ +### Descrição das Alterações +Resuma de forma clara o objetivo deste Pull Request e as alterações realizadas. + +### Tipo de Mudança +* [ ] Correção de bug (`fix`) +* [ ] Nova funcionalidade (`feat`) +* [ ] Refatoração sem alteração de comportamento (`refactor`) +* [ ] Atualização de documentação (`docs`) +* [ ] Ajuste de testes ou métricas de cobertura (`test`) +* [ ] Manutenção de infraestrutura ou CI (`ci` / `chore`) + +### Checklist de Qualidade e Segurança +* [ ] O código segue o padrão e regras de arquitetura do projeto. +* [ ] Nenhuma credencial, PIN, senha ou chave privada real foi comitada. +* [ ] A validação `./mvnw clean verify` foi executada e passou com 100% de sucesso. +* [ ] A cobertura mínima do JaCoCo foi respeitada em todos os módulos afetados. +* [ ] As mensagens de commit seguem a convenção *Conventional Commits*. +* [ ] A documentação técnica foi atualizada (quando aplicável). + +### Issue Relacionada +Fecha # diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e101a6a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,56 @@ +# Changelog + +Todas as mudanças relevantes deste projeto serão documentadas neste arquivo. + +O formato é baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/), +e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR/). + +--- + +## [Não publicado] + +### Adicionado +- Pipeline de integração contínua (CI) via Gitea Actions para Linux e Windows. +- Verificação de cobertura mínima de testes via meta `jacoco:check` calibrada por módulo. +- Configuração de atualização automatizada de dependências via Renovate com agrupamento específico. +- Templates de issues e pull requests para Gitea em `.gitea/`. +- Guia de contribuição `CONTRIBUTING.md` e especificação de release em `docs/release-and-versioning.md`. + +### Modificado +- Alinhamento da documentação e scripts de automação para exigir estritamente o JDK 25 LTS. +- Refinamento do `.gitignore` para ignorar a pasta `scratch/` e mover script utilitário para `scripts/`. +- Atualização do filtro de exclusão do SpotBugs com justificativas técnicas detalhadas para garantir verificação completa e limpa. + +--- + +## [0.1.0] - 2026-10-08 + +### Adicionado +- **Núcleo Criptográfico (`cybercore-core`):** + - Gerenciador central de certificados digitais (`CertificateManager`). + - Provedor para certificados em arquivo A1 PKCS#12 (`.pfx` / `.p12`). + - Provedor para repositório do Windows (`Windows-MY` via SunMSCAPI / CNG). + - Provedor para dispositivos criptográficos A3 PKCS#11 (tokens USB e smartcards). + - Assinatura digital padrão PAdES (PDF) em conformidade com as normas ICP-Brasil (Apache PDFBox e Bouncy Castle). + - Assinatura digital padrão XAdES-BES / XMLDSig para notas e documentos fiscais eletrônicos. + - Suporte a carimbo de tempo TSA e validação de longo prazo (LTV). + - Servidor HTTP local CCSP/1 (`127.0.0.1:21325`) com bind exclusivo em loopback, proteção anti-replay via nonce e controle de concorrência por fila. +- **Interface Gráfica Nativa (`cybercore-ui`):** + - Aplicação moderna em JavaFX 25 com suporte a tema Claro e Escuro (Dual-Theme). + - Dashboard de status do agente e leitor de certificados em tempo real. + - Diálogos de autorização prévia de aplicações web e confirmação visual de assinaturas. + - Designer e visualizador de selos visuais em PDF com renderização SVG e Java2D. + - Integração com a bandeja do sistema operacional (System Tray). +- **Módulo Executável (`cybercore-app`):** + - Ponto de entrada consolidado (`CyberCoreSignerApplication`), rotinas de telemetria diagnóstica e testes de arquitetura com ArchUnit. + - Empacotamento de Fat JAR autocontido via Maven Shade Plugin. +- **SDK JavaScript (`@cybercore/signer-sdk`):** + - Cliente web com métodos `connect()`, `isInstalled()`, `getCertificates()`, `sign()`, `verify()`. + - Página de demonstração interativa para testes de integração web. +- **Documentação Técnica:** + - Especificação do protocolo CCSP/1 (`docs/CCSP.md`). + - Diretrizes de segurança, arquitetura, diagnóstico e manuais de instalação. + +### Segurança +- Isolamento estrito de chaves privadas e senhas na máquina do usuário local (nunca trafegadas pela rede nem registradas em logs). +- Destruição segura de senhas em memória após uso via `Arrays.fill(..., '\0')`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..82e16ac --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,62 @@ +# Guia de Contribuição — CyberCore Signer + +Agradecemos o interesse em contribuir com o **CyberCore Signer**! Para garantir a segurança criptográfica, a estabilidade e a manutenibilidade do projeto, siga as orientações descritas abaixo. + +--- + +## 1. Pré-requisitos do Ambiente + +* **Java Development Kit (JDK):** Versão 25 LTS (Eclipse Temurin, OpenJDK ou Amazon Corretto). +* **Maven Wrapper:** Utilize sempre o executável `./mvnw` (Linux/macOS) ou `mvnw.cmd` (Windows) embutido no projeto. +* **Git:** Com suporte a quebra de linha `LF`. + +--- + +## 2. Princípios de Segurança Invioláveis + +Como este é um software de assinatura digital e custódia de credenciais criptográficas: + +1. **Nunca exponha credenciais:** É estritamente proibido registrar, logar ou comitar PINs, senhas de arquivos A1, chaves privadas ou certificados de produção. +2. **Testes isolados:** Use fixtures mockadas ou certificados autoassinados temporários gerados dinamicamente nos testes. +3. **Loopback estrito:** O servidor CCSP escuta exclusivamente em `127.0.0.1:21325`. Nunca altere o bind para interfaces externas. + +--- + +## 3. Padrão de Commits + +Adotamos a especificação [Conventional Commits](https://www.conventionalcommits.org/pt-br/v1.0.0/). Cada commit deve representar uma alteração coesa e atômica: + +* `feat:` Nova funcionalidade no agente, SDK ou UI. +* `fix:` Correção de bug sem alteração de escopo. +* `docs:` Alterações exclusivas na documentação. +* `test:` Adição ou melhoria de suítes de testes. +* `refactor:` Alterações de código que não mudam o comportamento funcional. +* `chore:` Tarefas de manutenção de build, scripts ou dependências. +* `ci:` Alterações no pipeline de CI/CD. + +Exemplo: `feat(core): add support for custom pkcs11 pin retry limit` + +--- + +## 4. Validação Pré-Commit / Pré-PR + +Antes de submeter um Pull Request, certifique-se de que o build completo e todas as análises de qualidade passam localmente: + +```bash +# Executa compilação, testes, checagem JaCoCo, SpotBugs e ArchUnit: +./mvnw clean verify +``` + +Critérios obrigatórios: +* Todos os testes unitários e de integração devem passar com sucesso. +* A cobertura mínima definida no `jacoco:check` de cada módulo deve ser mantida ou superada. +* Nenhum novo apontamento de segurança ou erro do SpotBugs deve ser introduzido. + +--- + +## 5. Fluxo de Pull Requests + +1. Crie uma branch descritiva a partir de `main` (ex: `feature/suporte-token-safenet` ou `fix/pades-timestamp-timeout`). +2. Mantenha os commits organizados e pequenos. +3. Abra o Pull Request preenchendo o template oficial do repositório em `.gitea/pull_request_template.md`. +4. Garanta que o pipeline de CI do Gitea Actions finalize com status verde.