A presente prova de conceito (POC) é um artefato fruto do Contrato de Encomenda Tecnológica nº 001/2020, firmado entre a Secretaria de Estado da Fazenda de Santa Catarina e o Instituto Federal de Santa Catarina - IFSC.
O objetivo desta prova de conceito é restrito aos objetivos contratados entre a SEF e o IFSC, compatível apenas com a versão 1.0.0 da especificação técnica de requisitos do DAF. Este artefato não tem como objetivo implementar completamente todos os processos de negócio previstos na especificação, visto que seu intuito foi demonstrar a viabilidade de implementação, tanto do DAF quanto da integração entre o PAF, DAF e a SEF-SC, utilizando tecnologias amplamente adotadas pelo mercado de desenvolvimento de software.
Não cabe à SEF ou ao IFSC prestar suporte sobre os componentes, códigos ou excertos de código disponíveis nesta POC, sendo a presente versão considerada final, sem previsão de alterações, correção de bugs ou melhorias.
A SEF e o IFSC eximem-se de qualquer responsabilidade, direta ou indireta, por perdas ou danos, comprovadamente ou alegadamente, causados pelos artefatos disponibilizados nesta POC. Caso deseje usar os componentes e softwares aqui disponibilizados, você estará fazendo isto exclusivamente por sua conta e risco.
Sumário
- Introdução
- Kit de desenvolvimento MAX32552 EV KIT
- Instalação da prova de conceito do DAF
- Facilidades específicas da prova de conceito para ajudar no desenvolvimento do PAF
- Certificado da SEF e chave de ateste
- Limitações conhecidas
- Dependências e bibliotecas de terceiros
Na Especificação 1.0.0 do Dispositivo Autorizador Fiscal (DAF) são apresentados todos os casos de uso e protocolos que devem ser implementados pelo DAF para que o mesmo possa ser comandado pelo Programa Aplicativo Fiscal (PAF) para emissão de Nota Fiscal de Consumidor Eletrônica (NFC-e) em Santa Catarina.
Este repositório contém a prova de conceito do Dispositivo Autorizador Fiscal (DAF). Esta implementação contempla todos os casos de uso do DAF, bem como implementa o protocolo de comunicação especificado na Especificação Técnica de Requisitos do DAF para fazer a interação com o Programa Aplicativo Fiscal (PAF). Um kit de desenvolvimento contendo uma implementação de um PAF, uma SEFAZ Autorizadora e uma SEF foi implementado para a validação desta prova de conceito. A figura abaixo apresenta as entidades que fazem parte do contexto do projeto do DAF, bem como a interação entre elas.
- DAF (este repositório)
- Implementação em C++ de todos os casos de uso da Especificação 1.0.0 do Dispositivo Autorizador Fiscal (DAF)
- PAF
- O PAF do kit de desenvolvimento só implementa as rotinas cruciais para interação com o DAF, SEFAZ autorizadora e SEF. Trata-se assim de uma ferramenta de apoio que poderá ser usada por desenvolvedores de PAF e fabricantes de DAF.
- SEFAZ Autorizadora
- A SEFAZ Autorizadora no kit de desenvolvimento tem como foco somente o caso de uso para autorização de uso de DF-e. A implementação consiste de uma simples rotina de persistência do DF-e autorizado para uso no banco de dados relacional usado pelo PAF. Sendo assim, não consiste de uma implementação real da SEFAZ autorizadora.
- Secretaria de Estado da Fazenda de Santa Catarina (SEF)
- A SEF no kit de desenvolvimento provê implementação para os todos os casos de uso que envolvam diretamente o contribuinte e seu DAF, conforme apresentado na Especificação 1.0.0 do Dispositivo Autorizador Fiscal (DAF). Por exemplo, registro de DAF, remoção de registro, autorização para remoção de autorização retida no DAF, entre outras.
Disponibilizamos aqui uma composição Docker que permite facilmente montar um ambiente local de desenvolvimento composto pelas entidades PAF, SEFAZ autorizadora e SEF, apresentadas acima.
A implementação desta prova de conceito foi feita utilizando o kit de desenvolvimento MAX32552 EV KIT. Este kit de desenvolvimento contém o microcontrolador MAX 32552, um microcontrolador seguro que atende os requisitos de hardware especificados na Especificação Técnica de Requisitos do DAF. Dentre as características deste microcontrolador, estão:
- Sistema anti-violação
- Memória segura
- True Random Number Generator (TRNG)
- Aceleradores criptográficos
- Kit de desenvolvimento MAX32552 EV KIT
-
IDE Eclipse modificada pela Maxim
SDK versão 3.7.0
-
Biblioteca criptográfica da Maxim
UCL 2.6.0
O SDK e a biblioteca criptográfica são propriedade da Maxim e não são disponibilizados neste repositório. Entrar em contato com a fabricante para mais informações.
- Clonar este repositório
git clone https://github.com/ifsc-lased/daf-poc
- Criar um novo projeto no Eclipse
file -> New -> Project... -> C++ Managed Build
- Selecionar o microcontrolador MAX32552
- Clicar em
Next
até finalizar a criação do projeto - Substituir a pasta
src
que foi criada no projeto pela pastasrc
deste repositório - Substituir o arquivo
.cproject
que foi criado no projeto pelo o arquivo.cproject
deste repositório - Criar uma pasta no projeto chamada
lib
e adicionar a biblioteca criptográfica pré compilada disponibilizada pela Maxim - Criar uma pasta no projeto chamada
include
e adicionar os headers da biblioteca criptográfica disponibilizada pela Maxim - Fazer o build do projeto
Project -> Build All
- Transmitir o código ao kit de desenvolvimento
Run -> Run
👏 Pronto! O DAF da prova de conceito está instalado no Kit de desenvolvimento MAX32552 EV KIT.
Nessa seção são apresentadas comandos específicos que o DAF da prova de conceito implementa para gerar facilidades para o desenvolvimento do PAF. O comando aqui apresentado não está de acordo com a Especificação 1.0.0 do Dispositivo Autorizador Fiscal (DAF).
O DAF da prova de conceito pode a qualquer momento ser colocado no modo padrão de fábrica
, estado no qual o dispositivo se comporta como um DAF recém adquirido. O PAF disponível no kit de desenvolvimento possui a funcionalidade para colocar o DAF no modo padrão de fábrica
. Ao ser invocada, o PAF envia a mensagem com o código 9999
ao DAF
De acordo com a Especificação Técnica de Requisitos do DAF, o DAF deverá conter o certificado digital da SEF. Por outro lado, a SEF já deverá ter a chave pública par da chave de ateste do DAF.
A especificação do DAF permite o uso de chaves criptográficas RSA ou EC. A chave de ateste do DAF da prova de conceito é uma chave EC P-384, enquanto que a chave pública contida no certificado da SEF também é uma chave EC P-384.
A chave SEF deve ser transmitida ao DAF de forma cifrada, dentro de um Token JWE. No entanto, nesta implementação o DAF espera a chave SEF dentro do Token JWE em texto claro, codificada em Base64URL.
O PAF disponível no kit de desenvolvimento transmite a chave SEF de forma cifrada conforme a Especificação Técnica de Requisitos do DAF
Esta implementação não obtém a chave pública da SEF a partir do certificado da SEF. A chave pública par da chave privada que assina as mensagens da SEF foi armazenada de forma separada ao certificado e a mesma é obtida nos casos de uso necessários.
Biblioteca | Função | Licença |
---|---|---|
ArduinoJson | Documentos JSON | MIT License |