Manual do Desenvolvedor Criptografia de Arquivos do WebTA



Documentos relacionados
ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

Objetivos do Capítulo

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Manual de Integração

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Persistência de Dados

INTERFACE PARA ECF SWEDA

Ler e escrever bytes, caracteres e Strings de/para a entrada e saída padrão. Ler e escrever bytes, caracteres e Strings de/para arquivos

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Programação de Computadores - I. Profª Beatriz Profº Israel

Algoritmos e Programação Estruturada

FBV - Linguagem de Programação II. Um pouco sobre Java

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Programação com sockets (em Java)

Índice: Nitgen do Brasil

Procedimento para Atualização do DDFinance

DESCRIÇÃO DO TRABALHO - VERSÃO DE 29/04/ :00.

P R O G R A M A. Stream Stream. Stream. Figura 1. Streams representam fluxos unidirecionais de dados, seja em entrada ou saída.

Procedimentos para Reinstalação do Sisloc

Projeto: Camada Independente de Dispositivo

Procedimentos para Instalação do Sisloc

1 Funções básicas de implementação de arquivos

Arquivos. Profa. Thienne Johnson EACH/USP

Outlook XML Reader Versão Manual de Instalação e Demonstração UNE Tecnologia

CONVENÇÃO DE CÓDIGO JAVA

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

Programação Orientada a Objetos com Java. Prof. Júlio Machado julio.machado@pucrs.br

Safeweb DLL biblioteca para desenvolvimento

Manual de Instalação. SafeSign Standard (Para MAC OS 10.7)

Introdução à Programação

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

insfcanceof new public switch transient while byte continue extends for int null

atube Catcher versão 3.8 Manual de instalação do software atube Catcher

Target. Manual de Integração SOAP. versão 1.0 /

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

CAPÍTULO 35 Como utilizar os componentes ColdFusion

Plugins TerraView. Última revisão: 12/12/32006 Versão TerraLib: 3.1.4

Manual de Integração

CONFIGURAÇÃO Cobian Backup Programa gratuito e de qualidade para realizar seus backups automáticos

INF1013 MODELAGEM DE SOFTWARE

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage

Criando documentação com javadoc

Java. Marcio de Carvalho Victorino

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Exercícios de Revisão Java Básico

V - Lista de Exercícios de SO e Lab. 1-) Escreva um programa em C para criar um arquivo texto, com informações fornecidas pelo usuário não formatadas.

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

1. Apresentação Objetivos

Procedimentos para Instalação do SISLOC

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

Um pouco do Java. Prof. Eduardo

Android e Bancos de Dados

Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. Rodrigo Hjort. Robson Ximenes

Um Driver NDIS Para Interceptação de Datagramas IP

Instalação do ByYou ESB. Guia de Instalação e Atualização do ByYou ESB

Trabalho Prático Nº1 Introdução ao C#.NET

e à Linguagem de Programação Python

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

CURSO DE PROGRAMAÇÃO EM JAVA

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

1.6. Tratamento de Exceções

STREAMS (FLUXOS) EM JAVA uma Introdução

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Capítulo 6. Java IO - Ficheiros

Manual de Instalação

enbsp - NBioBSP NITGEN Biometric Service Provider SDK Manual do Desenvolvedor SDK version 4.xx

Arquivos. Em relação ao Scilab, existem alguns tipos de arquivos que podem ser lidos, criados ou modificados.

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Gravação da quantidade de expostos por grupo homogêneo

LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 1 APRESENTANDO O C#

MANUAL EXPORTAÇÃO IMPORTAÇÃO

Guia rápido de uso de Web Services do NFS-e Easy

Arquivos de Instalação Instalação JDK Instalação Apache Tomcat Configurando Tomcat... 9

Instalação do TOTVS ESB. Guia de Instalação do TOTVS ESB

ROTEIRO DE INSTALAÇÃO / DESINSTALAÇÃO SiB Finame V Rev.1

Autoridade Certificadora Notarial CONFIGURAÇÃO DA MÁQUINA DA AR COM WINDOWS VISTA E WINDOWS 7 AC NOTARIAL. Página 1 de 14

Capítulo II Modelos de Programação Distribuída

RevISTa: Publicação técnico-científica do IST-Rio. nº 05 Data: Dezembro / 2012 ISSN

Funções de um SO. Gerência de processos Gerência de memória Gerência de Arquivos Gerência de I/O Sistema de Proteção

FTP Protocolo de Transferência de Arquivos

Tutorial de Integração JAVA

Manual de Administração

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Comunicação USB com o PIC Vitor Amadeu Souza Parte II vitor@cerne-tec.com.br

Tutorial de Integração.NET

FTP FILE F TRANSFER PROTOCOL. Tópicos

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

GUIA INTEGRA SERVICES E STATUS MONITOR

Manual de operação. BS Ponto Versão 5.1

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Transcrição:

Manual do Desenvolvedor Criptografia de Arquivos do WebTA Versão 1.4

Índice 1. Objetivo..3 2. Processo..3 3. API de Criptografia - Biblioteca Java..4 3.1 WEBTACryptoUtil..4 3.1.1 decodekeyfile..4 3.1.2 getidfromdecodedfilekey..5 3.1.3 getkeyfromdecodedfilekey..5 3.2 WEBTAOutputStream 6 3.2.1 WEBTAOutputStream6 3.2.2 write 6 3.2.3 size7 3.2.4 flush.7 3.2.5 close.7 3.3 WEBTAInputStream8 3.3.1 WEBTAInputStream8 3.3.2 read.8 3.3.3 close.9 3.4 CryptoException, ParameterException e GZipException..10 4. API de Criptografia - Biblioteca C - Windows.11 4.1 Decodificação dos arquivos de chaves.11 4.1.1 fdecodekeyfile.11 4.1.2 fdecodekeyfileex12 4.2 Criptografia de arquivos..13 4.2.1 finitencoder 13 4.2.2 fwritedata 13 4.2.3 fcloseencoder 13 4.3 Descriptografia de arquivos15 4.3.1 finitdecoder 15 4.3.2 freaddata.15 4.3.3 fclosedecoder 15

Manual para utilização da Criptografia de Arquivos do WebTA 1. Objetivo Este documento tem como objetivo descrever os procedimentos para ativação/utilização do mecanismo de criptografia de arquivos utilizados na Transferência de Arquivos WebTA. A Criptografia do WebTA tem como principal objetivo aumentar a segurança da informação dos dados que são trafegados entre a Empresa e o Banco. Por exemplo, quando o Sistema da Empresa cria um arquivo de remessa, gera-o em formato texto. Este formato permite a visualização de seu conteúdo, bem como a edição do mesmo. Com as novas bibliotecas de Criptografia é possível customizar o Sistema da Empresa para que gere os arquivos de remessa com conteúdo criptografado. Neste manual existem seções para os desenvolvedores da aplicação com as descrições das interfaces de programação (Linguagens C e Java) das funções/métodos para a criação e leitura dos arquivos criptografados que serão intercambiados entre o Sistema da Empresa e o WebTA. 2. Processo Abaixo são descritos os passos necessários para a utilização da Criptografia de arquivos do WebTA: 1º. Entre em contato com a Central de Atendimento e peça a disponibilização deste serviço; 2º. O Master da Empresa deverá acessar o Ambiente Gerencial do WebTA e gerar as chaves de criptografia. Neste processo o Sistema irá gerar 2 arquivos de chaves: - TRANSFERENCIAaaaammddhhmm.bin: contém a chave e o ID necessários para realizar a transmissão/recepção automática de arquivos. - CRIPTOGRAFIAaaaammddhhmm.bin: contém a chave utilizada para criptografar os arquivos de remessa ou descriptografar o conteúdo dos arquivos de retorno. Estes arquivos serão gerados criptografados com a senha que é solicitada ao Master. Esta senha precisará ser passada à API (Application Programming Interface) de criptografia, para que a mesma possa acessar os arquivos das chaves. Onde aaaammddhhmm representam a data e hora de geração dos arquivos. 3º. Peça ao Desenvolvedor de seu Sistema para que utilizando este Kit de Desenvolvimento e o arquivo de chave CRIPTOGRAFIAaaaammddhhmm.bin, faça os ajustes necessários no seu Sistema para que o mesmo gere e leia os arquivos no modo criptografado; 4º. O Master da Empresa deverá acessar o Ambiente Gerencial do WebTA e ativar a utilização da transmissão dos arquivos no modo criptografado. Manual_Desenv_Cripto.doc página 3 18/12/2008

3. API de Criptografia - Biblioteca Java A biblioteca Java de Criptografia de Arquivos do WebTA disponibiliza para o Desenvolvedor as classes: - WEBTACryptoUtil: classe para decodificar os arquivos de chaves do cliente; - WEBTAOutputStream: classe para gerar os arquivos de remessa comprimidos e criptografados no formato WebTA; - WEBTAInputStream: classe para descriptografar e descomprimir os arquivos de retorno criptografados do WebTA; - CryptoException, GZipException e ParameterException: classes para tratamento de exceções das anteriormente descritas. No Kit de Desenvolvimento são distribuídos o arquivo webta-cripto-v.1.4.jar, que é a biblioteca propriamente dita, e o Javadoc correspondente. É pré-requisito para sua utilização o Java SDK 1.3.1 ou superior. 3.1 WEBTACryptoUtil Esta classe contém os métodos necessários para decodificar os arquivos de chaves que foram gerados pelo Master da Empresa no Ambiente Gerencial do site WebTA. Pacote: br.com.bradesco.webta.security.crypto.webtacryptoutil Descrição dos métodos: 3.1.1 decodekeyfile Método estático que decodifica os arquivos gerados no Ambiente Gerencial do WebTA: CRIPTOGRAFIAaaaammddhhMM.bin e TRANSFERENCIAaaaammddhhMM.bin. public static byte[] decodekeyfile(file file, String senha) throws IOException, CryptoException - file: descritor do arquivo que contém a chave de criptografia; - senha: senha utilizada para abrir o arquivo. Array de bytes contendo o conteúdo do arquivo passado como parâmetro. Se for o arquivo CRIPTOGRAFIAaaaammddhhMM.bin o array conterá a chave que será utilizada como parâmetro nos métodos das classes de Criptografia e Descriptografia. Se for o arquivo Transferenciaaaaammddhhmm.bin deve-se utilizar os métodos descritos a seguir para obter o Id e a chave de criptografia necessárias para o processo de autenticação da transferência automática de arquivos. Exceções: - IOException: se ocorrer um erro de I/O; - CryptoException: erro ao decodificar o arquivo. Manual_Desenv_Cripto.doc página 4 18/12/2008

3.1.2 getidfromdecodedfilekey Método estático que obtém o Id do Cliente a partir do conteúdo decodificado do arquivo TRANSFERENCIAaaaammddhhMM.bin. Este Id é necessário no processo de Autenticação da Transferência Automática de Arquivos. public static String getidfromdecodedfilekey(byte[] key) throws ParameterException Parâmetro de entrada: - key: Chave de Transferência decodificada pelo método decodekeyfile, a partir do arquivo TRANSFERENCIAaaaammddhhMM.bin. String contendo o Id do Cliente. Exceções: - ParameterException: se a chave for inválida. 3.1.3 getkeyfromdecodedfilekey Método estático que obtém a Chave de Criptografia a partir do conteúdo decodificado do arquivo TRANSFERENCIAaaaammddhhMM.bin. Esta chave é necessária no processo de Autenticação da Transferência Automática de Arquivos. public static byte[] getkeyfromdecodedfilekey(byte[] key) throws ParameterException Parâmetro de entrada: - key: Chave de Transferência decodificada pelo método decodekeyfile, a partir do arquivo TRANSFERENCIAaaaammddhhMM.bin. Array de bytes contendo a Chave de Criptografia. Exceçôes: - ParameterException: se a chave for inválida. Exemplo de utilização da classe: //Decodifica arquivo que contém a chave //necessária para criptografar os arquivos de //remessa e descriptografar os arquivos de //retorno byte[] filekey = WEBTACryptoUtil.decodeKeyFile(new File ("e:/criptografia200805191537.bin"), "a2owdf089"); //Decodifica arquivo que contém parâmetros //necessários para o processo de Autenticação //na Transferência Automática de Arquivos byte[] filekey = WEBTACryptoUtil.decodeKeyFile(new File ("e:/transferencia200805191537.bin"), "a2owdf089"); //Obtem id do cliente String idcliente = WEBTACryptoUtil.getIdFromDecodedFileKey(fileKey); //Obtem chave de criptografia para a transferência automática byte[] transfkey = WEBTACryptoUtil.getKeyFromDecodedFileKey(fileKey); Manual_Desenv_Cripto.doc página 5 18/12/2008

3.2 WEBTAOutputStream Esta classe contém os métodos necessários para geração dos arquivos criptografados no formato WebTA. Além de criptografado o conteúdo do arquivo também é compactado. Estes métodos deverão ser inseridos no seu Sistema, no trecho de código onde são gerados os arquivos de remessa. Desta forma estaremos adicionando uma característica de Segurança ao processo, pois os arquivos deixarão de ser gerados em formato texto-aberto. Esta classe é uma especialização da classe OutputStream. Pacote: br.com.bradesco.webta.security.crypto.webtaoutputstream Descrição dos métodos: 3.2.1 WEBTAOutputStream Construtor da classe, cria um objeto de saída de dados criptografados e compactados no formato WebTA. public WEBTAOutputStream(String outputfilename, String directory, byte[] key) throws ParameterException, GZipException - outputfilename: nome do arquivo onde os dados criptografados de saída serão gravados; - directory: diretório onde o arquivo final será gerado; - key: chave para criptografar os dados. Exceções: - ParameterException: erro na passagem dos parâmetros; - GZipException: erro na execução do algoritmo de compactação. 3.2.2 write Grava no arquivo os dados, compactando e criptografando-os. Este método possui duas assinaturas, descritas a seguir: public void write(byte[] b, int off, int len) throws IOException Comprime e criptografa len bytes do buffer b, iniciando na posição off do buffer. Os dados resultantes são gravados no arquivo de saída. - b: buffer contendo os dados a serem compactados e criptografados; - off: posição (0 = posição inicial) do buffer a partir da qual o dado será compactado e criptografado; - len: quantidade de bytes para compactar e criptografar. Este método tratará buffer de dados com até 64 Kbytes por chamada deste método; para quantidade superior a este valor será gerada uma exceção. Exceção: IOException: se ocorrer um erro de I/O. public void write(byte[] b) throws IOException Comprime e criptografa todo o conteúdo do buffer b, sendo que os dados resultantes são gravados no arquivo de saída. - b: buffer contendo os dados a serem compactados e criptografados. Este método tratará buffer de dados com até 64 Kbytes por chamada deste método; para buffer com tamanho superior a este valor será gerada uma exceção. Manual_Desenv_Cripto.doc página 6 18/12/2008

Exceção: IOException: se ocorrer um erro de I/O. 3.2.3 size Retorna a quantidade de bytes armazenados no objeto de saída. public int size() A quantidade de bytes dos dados armazenados no arquivo/objeto de saída. 3.2.4 flush Executa um flush no buffer de saída, forçando que quaisquer bytes armazenados sejam gravados. public void flush() throws IOException Exceção: IOException: se ocorrer um erro de I/O. 3.2.5 close Executa um flush dos dados e fecha o arquivo/objeto de saída. public void close() throws IOException Exceção: IOException: se ocorrer um erro de I/O. Exemplo de utilização da classe WEBTAOutputStream: WEBTAOutputStream wos = null; byte[] bufcripto = new byte[8192]; try //Obtem chave de criptografia byte[] chavecripto = WEBTACryptoUtil.decodeKeyFile(new File("c:/CRIPTOGRAFIA200805191017.bin"), "U9dsdfos"); //Cria objeto para gerar o arquivo criptografado wos = new WEBTAOutputStream("COBN1205.REM", "C:/REMESSA", chavecripto); //Loop para gerar um arquivo de remessa criptografado while (temdados) //Aplicação processa as informações para gerar o arquivo de remessa //e o armazena em bufcripto. //Escreve o buffer, criptografando-o wos.write(bufcripto); catch (GZipException e) //Efetua tratamento da excecao catch (ParameterException e) //Efetua tratamento da excecao catch (IOException e) //Efetua tratamento da excecao catch (CryptoException e) Manual_Desenv_Cripto.doc página 7 18/12/2008

//Efetua tratamento da excecao finally if (wos!= null) try wos.close(); catch (IOException e) 3.3 WEBTAInputStream Esta classe contém os métodos necessários para descriptografar e descomprimir os arquivos no formato WebTA gerados pela classe WEBTAOutputStream. Estes métodos deverão ser inseridos no seu Sistema no trecho de código onde são lidos os arquivos de retorno. Para mantermos a característica de Segurança proposta, é recomendável que durante o processo de descriptografia o conteúdo do arquivo não seja gravado em disco, seja processado diretamente por seu Sistema. Esta classe é uma especialização da classe InputStream. Pacote: br.com.bradesco.webta.security.crypto.webtainputstream Descrição dos métodos: 3.3.1 WEBTAInputStream Construtor da classe, cria um objeto de entrada de dados que trata um arquivo criptografado e compactado no formato WebTA, ou seja, descriptografa e descompacta um arquivo gerado pela classe WEBTAOutputStream. public WEBTAInputStream(String inputfilename, String directory, byte[] key) throws ParameterException - inputfilename: nome do arquivo a ser descriptografado; - directory: diretório onde encontra-se o arquivo; - key: chave para descriptografar o arquivo. Exceção: ParameterException: erro na passagem de parâmetros 3.3.2 read Lê os dados do arquivo/objeto de entrada, descriptografando e descompactando-os. Este método possui 2 assinaturas, descritas a seguir: public int read(byte[] b, int off, int len) throws IOException Lê o arquivo/objeto de entrada, armazenando os dados descriptografados e descompactados no buffer b. - off: posição a partir da qual os dados devem ser armazenados no buffer ; - len: quantidade máxima de bytes que podem ser copiados no buffer. b: buffer para armazenar os dados descriptografados e descompactados. A quantidade de bytes retornados, equivale ao número de bytes inseridos no buffer b. Exceção: IOException: erro na passagem de parâmetros public int read(byte[] b) throws IOException Manual_Desenv_Cripto.doc página 8 18/12/2008

Lê o arquivo/objeto de entrada, descriptografa e descompacta os dados. O método detectará o tamanho do buffer (b.length), e preencherá o buffer com no máximo o seu tamanho. Este método é equivalente a chamar read (b, 0, b.length). b: buffer para armazenar os dados descriptografados e descompactados. A quantidade de bytes efetivamente armazenada em b. Exceção: IOException: erro na passagem de parâmetros 3.3.3 close Finaliza o objeto de entrada, fecha o arquivo e libera os recursos alocados pelo objeto. public void close() throws IOException Exceção: IOException: erro na passagem de parâmetros Exemplo de utilização da classe WEBTAInputStream: WEBTAInputStream wis = null; byte[] bufdecripto = null; try //Obtem chave de criptografia byte[] chavecripto = WEBTACryptoUtil.decodeKeyFile(new File("c:/CRIPTOGRAFIA200805191017.bin"), "U9dsdfos"); //Cria objeto para ler o arquivo criptografado wis = new WEBTAInputStream("CB2904100.RET", "C:/RETORNO", chavecripto); //Loop de leitura, onde o conteudo do arquivo //é lido, descriptografado, descomprimido e armazenado em bufdecripto. //Este loop e executado enquanto houver dados para leitura while(wis.read(bufdecripto) > 0) // //A aplicação processa os dados //do arquivo de retorno // catch (ParameterException e) //Efetua tratamento da excecao catch (IOException e) //Efetua tratamento da excecao catch (CryptoException e) //Efetua tratamento da excecao finally if (wis!= null) try wis.close(); catch (IOException e) //Efetua tratamento da excecao Manual_Desenv_Cripto.doc página 9 18/12/2008

3.4 CryptoException, ParameterException e GZipException Pacotes: br.com.bradesco.webta.security.exception.cryptoexception br.com.bradesco.webta.security.exception.gzipexception br.com.bradesco.webta.security.exception.parameterexception Estas são as exceções que devem ser tratadas para a utilização das classes de Criptografia. Manual_Desenv_Cripto.doc página 10 18/12/2008

4. API de Criptografia - Biblioteca C - Windows A biblioteca C de Criptografia de Arquivos do WebTA contém as funções necessárias para manipulação dos dados no processo de transmissão/recepção de arquivos criptografados no formato WebTA. Esta biblioteca é uma DLL para utilização no desenvolvimento de aplicações executadas em ambiente Microsoft Windows 32 bits, dentre os arquivos distribuídos no Kit de Desenvolvimento estão: - WEBTAEncoderLib.dll: a DLL propriamente dita; - ZLIB1.dll *: DLL necessária para a compactação dos dados; - WEBTAEncoderLib.h: arquivo de inclusão, necessário para utilização no desenvolvimento em Linguagem C; - WEBTAEncoderLib.lib: arquivo para linkagem estática, necessário para utilização no desenvolvimento em Linguagem C; É pré-requisito para sua utilização a instalação prévia do Microsoft Framework.NET 2.0: http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd- AAB15C5E04F5&displaylang=pt-br Para facilitar o entendimento, agrupamos as funções contidas na DLL em: - Decodificação dos arquivos de chaves: funções para decodificar os arquivos de chaves do cliente; - Criptografia de arquivos: funções para gerar os arquivos de remessa comprimidos e criptografados no formato WebTA; - Descriptografia de arquivos: funções para descriptografar e descomprimir os arquivos de retorno criptografados do WebTA. (*) A ZLIB1.dll é uma DLL gratuita, disponibilizada para quaisquer fins. (http://www.zlib.net) 4.1 Decodificação dos arquivos de chaves Neste item estão agrupadas as funções necessárias para decodificar os arquivos de chave que foram gerados pelo Master da Empresa no Ambiente Gerencial do site WebTA. Descrição das funções: 4.1.1 fdecodekeyfile Este método decodifica o arquivo CRIPTOGRAFIAaaaammddhhMM.bin, que é um dos arquivos gerados no Ambiente Gerencial do WebTA, obtendo a chave necessária para criptografar os arquivos de remessa e descriptografar os arquivos de retorno. int fdecodekeyfile(char *filepath, char *senha, BYTE *key, char *msgerro) - filepath: caminho completo do arquivo a ser decodificado; - senha: senha utilizada para abrir o arquivo; Parâmetros de saída: Manual_Desenv_Cripto.doc página 11 18/12/2008

- key: chave de criptografia/descriptografia de arquivos. Este parâmetro será utilizado nos métodos de iniciação para criptografia e descriptografia de arquivos. Neste parâmetro deve-se passar um ponteiro para um buffer pré-alocado com o tamanho de 16 bytes. - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. 1 = função executada com sucesso; 0 = erro na execução da função. Exemplo de utilização da função em linguagem C: unsigned char chavecripto[16]; char mensagemerro[512]; if (!fdecodekeyfile("e:/criptografia200805191537.bin", "uio32*a", chavecripto, mensagemerro)) //Tratar erro 4.1.2 fdecodekeyfileex Este método decodifica o arquivo TRANSFERENCIAaaaammddhhMM.bin, que é um dos arquivos gerados no Ambiente Gerencial do WebTA, obtendo o id do cliente e a chave de criptografia necessários no processo de Autenticação da Transferência Automática de Arquivos. int fdecodekeyfileex(char *filepath, char *senha, char *id, BYTE *key, char *msgerro) - filepath: caminho completo do arquivo a ser decodificado; - senha: senha utilizada para abrir o arquivo. - id: identificação do usuário, deve-se passar neste parâmetro um ponteiro para um buffer pré-alocado com o tamanho de 21 caracteres; - key: chave de criptografia, deve-se passar neste parâmetro um ponteiro para um buffer pré-alocado com o tamanho de 16 bytes. - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. 1 = função executada com sucesso; 0 = erro na execução da função. Exemplo de utilização da função em linguagem C: char idcliente[21]; unsigned char chavetransferencia[16]; char mensagemerro[512]; //Decodifica arquivo que contem parametros //necessarios para o processo de Autenticacao //na Transferência Automática de Arquivos if (!fdecodekeyfileex("e:/transferencia200805191537.bin", "au8df9s", idcliente, chavetransferencia, mensagemerro)) //Tratar erro Manual_Desenv_Cripto.doc página 12 18/12/2008

4.2 Criptografia de arquivos Neste item estão agrupadas as funções necessárias para geração dos arquivos criptografados no formato WebTA. Além de criptografado o conteúdo do arquivo também é compactado. Estes métodos deverão ser inseridos no seu Sistema, no trecho de código onde são gerados os arquivos de remessa. Desta forma estaremos adicionando uma característica de Segurança ao processo, pois os arquivos deixarão de ser gerados em formato texto-aberto. Descrição das funções: 4.2.1 finitencoder Esta função prepara a API para a geração de um arquivo criptografado. void* finitencoder(const char *filename, const char *directory, const BYTE *key, char *msgerro) - filename: nome do arquivo onde os dados criptografados serão gravados; - directory: diretório onde o arquivo final será gerado; - key: chave para criptografar os dados. - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. <> NULL: handle para gerar o arquivo criptografado; = NULL: erro na execução da função. 4.2.2 fwritedata Grava no arquivo os dados, compactando e criptografando-os. int fwritedata(void *handle, const BYTE *data, const int datalen, char *msgerro) - handle: handle retornado pela função finitencoder(); - data: dados para serem comprimidos e criptografados; - datalen: tamanho dos dados para serem criptografados. Somente será permitido que sejam criptografados até 64 Kbytes por chamada desta função. - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. 1 = função executada com sucesso; 0 = erro na execução da função. 4.2.3 fcloseencoder Fecha o arquivo de saída e libera os recursos alocados para a criptografia dos dados. int fcloseencoder(void* handle, char *msgerro) Manual_Desenv_Cripto.doc página 13 18/12/2008

- handle: handle retornado pela função finitencoder(); - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. 1 = função executada com sucesso; 0 = erro na execução da função. Exemplo de utilização da Criptografia de arquivos em linguagem C: BOOL temdados = TRUE; unsigned char chavecripto[16]; void *criptohandle = NULL; unsigned char *bufferdados = NULL; int tambufferdados = 0; char mensagemerro[512]; //Decodifica chave para criptografar arquivo if (!fdecodekeyfile("e:/criptografia200805191537.bin", "afe8df", chavecripto, mensagemerro)) printf ("Erro ao decodificar Chave de Criptografia mensagem de erro: %s\n", mensagemerro); return -1; //Cria handle para processar a criptografia do arquivo criptohandle=finitencoder("cb2904100.rem", "C:/REMESSA",chaveCripto, mensagemerro); if (criptohandle == NULL) printf ("Erro na iniciacao da criptografia do arquivo mensagem de erro: %s\n", mensagemerro); return -1; //Loop para gerar o arquivo de remessa criptografado while (temdados) // //Recebe dados do Sistema //Aponta "bufferdados" para os dados a criptografar //Inicia "tambufferdados" com o tamanho dos dados a criptografar //Criptografa dados, armazenando-os no arquivo if (!fwritedata(criptohandle, bufferdados, tambufferdados, mensagemerro)) printf ("Erro na criptografia dos dados mensagem de erro: %s\n", mensagemerro); fcloseencoder(criptohandle, mensagemerro); return -1; // //Finaliza processamento de criptografia do arquivo fcloseencoder(criptohandle, mensagemerro); Manual_Desenv_Cripto.doc página 14 18/12/2008

4.3 Descriptografia de arquivos Neste item estão agrupadas as funções necessárias para descriptografar e descompactar os arquivos codificados no formato WebTA. Estes métodos deverão ser inseridos no seu Sistema no trecho de código onde são lidos os arquivos de retorno. Para mantermos a característica de Segurança proposta, é recomendável que durante o processo de descriptografia o conteúdo do arquivo não seja gravado em disco, seja processado diretamente por seu Sistema. Descrição das funções: 4.3.1 finitdecoder Esta função prepara a API para descriptografar um arquivo. void* finitdecoder(const char *filename, const char *directory, const BYTE *key, char *msgerro) - filename: nome do arquivo a ser descriptografado; - directory: diretório onde encontra-se o arquivo; - key: chave para descriptografar o arquivo. - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. <> NULL: handle para ler o arquivo criptografado; = NULL: erro na execução da função. 4.3.2 freaddata Lê o arquivo/objeto de entrada, armazenando os dados descriptografados e descompactados no buffer data. int freaddata(void *handle, BYTE *data, int datalen, char *msgerro) - handle: handle retornado pela função finitdecoder(); - datalen: tamanho do buffer passado como parâmetro. - - data: buffer onde os dados serão armazenados; - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. -1: não existem mais dados para leitura; 0: erro na execução da função; > 0: quantidade de dados lidos e armazenados no buffer. 4.3.3 fclosedecoder Fecha o arquivo de entrada e libera os recursos alocados para descriptografar os dados. int fclosedecoder(void* handle, char *msgerro) Manual_Desenv_Cripto.doc página 15 18/12/2008

- handle: handle retornado pela função finitdecoder(); - msgerro: ponteiro para string pré-alocada (com 512 bytes) onde, em caso de erro, será armazenada uma mensagem descritiva do erro. 1 = função executada com sucesso; 0 = erro na execução da função. Exemplo de utilização da Descriptografia de arquivos: unsigned char chavecripto[16]; void *decriptohandle = NULL; unsigned char bufferaux[8192]; int qtdebytelidos = 1; char mensagemerro[512]; //Decodifica chave para descriptografar arquivo if (!fdecodekeyfile("e:/criptografia200805191537.bin", "asd09w", chavecripto, mensagemerro)) printf ("Erro ao decodificar Chave de Criptografia mensagem de erro: %s\n", mensagemerro); return -1; //Cria handle para descriptografar arquivo recebido do WebTA //O arquivo CB2904100.RET foi recebido do WebTA e encontra-se //armazenado em C:/RETORNO decriptohandle = finitdecoder("cb2904100.ret", "C:/RETORNO", chavecripto, mensagemerro); if (decriptohandle == NULL) printf ("Erro na iniciacao da descriptografia do arquivo mensagem de erro: %s\n", mensagemerro); return -1; //Enquanto houver dados para descriptografar //do arquivo de retorno while(qtdebytelidos > 0) //Descriptografa e descomprimi os dados do arquivo qtdebytelidos = freaddata(decriptohandle, bufferaux, sizeof(bufferaux), mensagemerro); if (qtdebytelidos > 0) //O Sistema processa os dados do arquivo de retorno // //Verifica o que determinou a saída do loop if (qtdebytelidos == 0) //Tratamento de erro, pois houve erro //na descriptografia printf ("Erro na descriptografia do arquivo mensagem de erro: %s\n", mensagemerro); //Finaliza processamento de descriptografia do arquivo fclosedecoder (decriptohandle mensagemerro); Manual_Desenv_Cripto.doc página 16 18/12/2008