# Arquitetura do CyberCore Signer O **CyberCore Signer** é um agente desktop nativo desenvolvido em Java 21+ LTS (Java 25 LTS) com interface JavaFX e segurança criptográfica JCA/JCE pura, projetado para permitir que aplicações web autorizadas solicitem assinaturas digitais ICP-Brasil padrão **A1** e **A3** diretamente da máquina do usuário. --- ## 1. Visão Geral da Arquitetura em Módulos O projeto adota uma arquitetura desacoplada em múltiplos módulos Maven independentes: ``` cybercore-signer/ ├── modules/ │ ├── cybercore-core/ # Núcleo de criptografia, provedores, protocolo e segurança │ ├── cybercore-ui/ # Interface gráfica JavaFX, diálogos nativos e System Tray │ └── cybercore-app/ # Ponto de entrada (Main), bootstrap e empacotamento nativo ├── sdk/ # SDK Web em JavaScript (@cybercore/signer-sdk) ├── scripts/ # Scripts de build nativo jpackage para Windows e Linux └── docs/ # Especificações técnicas e manuais de integração ``` ### 1.1 `cybercore-core` - **Domínio:** Modelos imutáveis como `ManagedCertificate`, `SigningContext`, `SigningResult`, `CertificateType` e `CertificateStatus`. - **Criptografia:** `SigningService` e `DigestAlgorithm` utilizando exclusivamente os provedores padrão JCA/JCE (sem reimplementação manual de algoritmos). - **Provedores:** Abstração `CertificateProvider` com implementações: - `Pkcs12CertificateProvider`: leitura de arquivos `.pfx`/`.p12` em memória protegida. - `WindowsCertificateStoreProvider`: integração nativa com o repositório de chaves do Windows (`Windows-MY` via SunMSCAPI/CNG). - `Pkcs11CertificateProvider`: integração com drivers de middleware e tokens USB/Smartcards via `SunPKCS11`. - **Protocolo & Rede Local:** `CcspServer` escuta estritamente em `127.0.0.1:21325`, fornecendo a API REST CCSP/1. - **Segurança & Configurações:** `ApplicationRegistry`, `NonceManager` (proteção anti-replay), `OriginValidator`, `SmartCardSessionManager` e `AgentConfigurationService` (persistência em `~/.cybercore/config.json`). - **Validação Criptográfica:** `SignatureValidationService` com suporte a Assinaturas Incorporadas (PAdES PDF, CMS/P7M com conteúdo embutido, XMLDSig) e Assinaturas Destacadas (Detached CMS/P7S). - **Selos Visuais Personalizados:** `CustomSealStorage` (persistência em `~/.cybercore/seals/`), `PdfSealThemeRegistry` dinâmico e `CpfDisplayMode` (privacidade LGPD). ### 1.2 `cybercore-ui` - Interface desenvolvida com JavaFX 25, empregando layout moderno e simétrico de grade 3x3 de operações e coluna lateral de utilitários: - `MainAppView`: grade 3x3 otimizada: - Linha 0: Assinar PDF, Assinar XML, Assinatura Atachada - Linha 1: Co-Assinar Documento, Carimbo do Tempo, Gerenciar Selos - Linha 2: Validar Assinatura, Validar Carimbo, Sair do Agente - `SealDesignerDialog`: criador e instalador de selos digitais personalizados com pré-visualização ao vivo (Live Preview), seletores de cores, estilos de emblema, obrigatoriedade de nome completo, controle de mascaramento de CPF e estampa de data/hora. - `SignatureValidationDialog`: diálogo de validação criptográfica real com alternância entre Assinatura Incorporada e Assinatura Destacada, extração de documento embutido e relatório de signatários. - `PdfSignDialog`: modal de assinatura PAdES com posicionamento por clique na folha, atalho direto para criar/instalar selos e opções dinâmicas de CPF/data-hora. - `SettingsView`: configurações gerais persistentes, política de PIN e gerenciamento de selos instalados. ### 1.3 `cybercore-app` - Main bootstrap (`CyberCoreSignerApplication`). - Tratamento de parâmetros de inicialização (`--dev`, `--headless`). - Execução de diagnósticos preliminares de ambiente e engine criptográfica antes do início das threads de escuta. - Geração de Fat JAR autocontido via `maven-shade-plugin` e preparação para distribuição `jpackage`. --- ## 2. Fluxo de Dados e Princípio de Menor Privilégio O CyberCore Signer opera sob o **modelo de assinatura descentralizada por digest**: 1. A aplicação web calcula o hash criptográfico SHA-256 no próprio navegador utilizando a Web Crypto API nativa. 2. Apenas o hash Base64 de 32 bytes trafega localmente para o CyberCore Signer. 3. O documento completo nunca sai do navegador e a chave privada nunca sai do computador ou do hardware do usuário. ```mermaid sequenceDiagram autonumber actor Usuario as Usuário participant Web as Aplicação Web (SDK) participant CCSP as CcspServer (127.0.0.1) participant UI as CyberCore JavaFX participant Crypto as SigningService & Providers Web->>CCSP: POST /ccsp/v1/sign (digest, appId, certHint, nonce) CCSP->>CCSP: Valida autorização, nonce anti-replay e digest CCSP->>UI: Solicita confirmação visual (requestSignatureConfirmation) UI->>Usuario: Exibe Diálogo (Hash, Certificado, Aplicação) Usuario->>UI: Aprova assinatura (e insere PIN se A3) UI-->>CCSP: Confirmação concedida CCSP->>Crypto: sign(SigningContext) [Trava FIFO] Crypto->>Crypto: JCA/JCE Signature.update(digest) + sign() Crypto-->>CCSP: SigningResult (signatureBytes, certChain) CCSP-->>Web: JSON { status: "signed", signature: "...", certificate: "..." } ```