示例#1
0
        public byte[] readAnswer(Tcp tcp, int qtdBytesBuffer)
        {
            byte[] retorno = new byte[qtdBytesBuffer];

            int qdeRecebida = tcp.recebeBytes(retorno, 0, qtdBytesBuffer, Protocol.TIMEOUT);

            if ((qdeRecebida == -1))
            {
                return(null);
            }
            else if ((qdeRecebida != qtdBytesBuffer))
            {
                return(new byte[0]);
            }

            retorno = AES.Decrypt(retorno);

            return(retorno);
        }
示例#2
0
 public static void sendBuffer(byte[] buffer, bool sendAll, Tcp tcp)
 {
     byte[] bufferCriptografado = AES.Encrypt(buffer);
     tcp.enviaBytes(bufferCriptografado);
 }
示例#3
0
        public ErrorCommand execute(String ip, String porta, String cpf, Company company)
        {
            ErrorCommand errorCommand = new ErrorCommand();
            Tcp          tcp          = null;

            try
            {
                tcp = new Tcp(ip, Convert.ToInt16(porta));
            }
            catch (IOException e) {
                errorCommand.setErro(ErrorCommand.SUCESSO);
                return(errorCommand);
            }

            try
            {
                try
                {
                    byte[] bytesCpf = Conversor.cpfToByte(cpf);
                    byte[] cabecalhoDadosGravaEmpregador = Command.criarPacoteCabecalho(CommandCodes.START_PC, CommandCodes.ENVIAR_EMPREGADOR, new byte[] { 0x00, 0x00, 0x00, 0x01 }, new byte[4], bytesCpf, (byte)ErrorCommand.ADICIONAR_SUBSTITUIR, CommandCodes.END);
                    // Envia o cabeçalho
                    sendBuffer(cabecalhoDadosGravaEmpregador, true, tcp);
                    // Lê 1ª resposta do REP
                    byte[] retornoReal       = readAnswer(tcp, Protocol.QTD_BYTES_CABECALHO_CRIPTOGRAFADO);
                    int    qtdBytesRecebidos = -1;
                    if (retornoReal != null)
                    {
                        qtdBytesRecebidos = retornoReal.Length;
                    }
                    // Trata a 1ª resposta do REP
                    errorCommand = tratarResposta(CommandCodes.ENVIAR_EMPREGADOR, retornoReal, qtdBytesRecebidos, Protocol.QTD_BYTES_CABECALHO_CRIPTOGRAFADO);
                    if (errorCommand.getErro() == ErrorCommand.SUCESSO)
                    {
                        cabecalhoDadosGravaEmpregador = criarPacoteCabecalho(CommandCodes.START_PC, CommandCodes.ENVIAR_EMPREGADOR,
                                                                             new byte[] { 0x00, 0x01, 0x00, 0x01 }, new byte[] { 0x00, 0x00, 0x01, 0x0C },
                                                                             bytesCpf, (byte)ErrorCommand.DADOS_OK, CommandCodes.END);

                        byte   checkSumCabecalho    = cabecalhoDadosGravaEmpregador[cabecalhoDadosGravaEmpregador.Length - 2];
                        byte[] dadosGravaEmpregador = criaPacoteDados(checkSumCabecalho, bytesCpf, company);

                        // Envia os dados do empregador
                        sendBuffer(ProtocolUtils.merge(cabecalhoDadosGravaEmpregador, dadosGravaEmpregador), true, tcp);
                        retornoReal = new byte[Protocol.QTD_BYTES_CABECALHO_CRIPTOGRAFADO];
                        // Lê 2ª resposta do REP
                        retornoReal       = readAnswer(tcp, Protocol.QTD_BYTES_CABECALHO_CRIPTOGRAFADO);
                        qtdBytesRecebidos = -1;
                        if (retornoReal != null)
                        {
                            qtdBytesRecebidos = retornoReal.Length;
                        }
                        // Trata a 2ª resposta do REP
                        errorCommand = tratarResposta(CommandCodes.ENVIAR_EMPREGADOR, retornoReal, qtdBytesRecebidos, Protocol.QTD_BYTES_CABECALHO_CRIPTOGRAFADO);
                    }
                }
                catch (Exception e)
                {
                    errorCommand.setErro(ErrorCommand.OCORREU_EXCECAO);
                }
                tcp.finalizaConexao();
            }
            catch (Exception e)
            {
                errorCommand.setErro(ErrorCommand.ERRO_FINALIZAR_CONEXAO);
            }

            return(errorCommand);
        }
示例#4
0
        public ErrorCommand execute(String ip, String porta, List <Digital> digitals, String pis)
        {
            errorCommand = new ErrorCommand();
            tcp          = null;
            try
            {
                tcp = new Tcp(ip, Convert.ToInt16(porta));
            }
            catch (IOException e1) {
                errorCommand.setErro(ErrorCommand.COMUNICACAO_NAO_ESTABELECIDA);
                return(errorCommand);
            }
            int totalDigitais = 0;

            try
            {
                try
                {
                    totalDigitais = digitals.Count;
                    int  digitalAtual = 1;
                    byte flag;
                    if (totalDigitais == 1)
                    {
                        flag = ErrorCommand.UNICA_TEMPLATE_USUARIO;
                    }
                    else
                    {
                        flag = ErrorCommand.TODAS_TEMPLATE_USUARIO;
                    }
                    byte[] cabecalhoDadosGravaDigital = criarPacoteCabecalho(CommandCodes.START_PC, CommandCodes.ENVIAR_DIGITAL,
                                                                             new byte[] { 0x00, 0x00, 0x00, (byte)totalDigitais }, new byte[4],
                                                                             Conversor.pisToByte(pis),
                                                                             flag, CommandCodes.END);
                    byte[] primeiroBlocoCabecalho = ProtocolUtils.copyOfRange(cabecalhoDadosGravaDigital, 0, 16); // primeiros 16 bytes do cabeçalho
                    // Envia o cabeçalho
                    sendBuffer(primeiroBlocoCabecalho, true, tcp);

                    /**
                     * Envio dos bytes do cabeçalho ainda não enviados + bloco vazio (0xFF).
                     * Isto é necessário para o REP reconhecer tudo corretamente (visto empiricamente).
                     */
                    Boolean incluirBytesNoInicio = true;
                    enviaBlocoVazio(ProtocolUtils.copyOfRange(cabecalhoDadosGravaDigital, 16, cabecalhoDadosGravaDigital.Length), incluirBytesNoInicio);

                    // Lê 1ª resposta do REP
                    lerEtratarResposta(Protocol.QTD_BYTES_CABECALHO_CRIPTOGRAFADO);
                    if (errorCommand.getErro() == ErrorCommand.SUCESSO)
                    {
                        errorCommand.setErro(ErrorCommand.DADOS_OK);
                        incluirBytesNoInicio = false;
                        for (; (digitalAtual <= totalDigitais) && (errorCommand.getErro() == ErrorCommand.DADOS_OK); digitalAtual++)
                        {
                            cabecalhoDadosGravaDigital = criarPacoteCabecalho(CommandCodes.START_PC, CommandCodes.ENVIAR_DIGITAL,
                                                                              new byte[] { 0x00, (byte)totalDigitais, 0x00, (byte)digitalAtual },
                                                                              new byte[] { 0x00, 0x00, 0x03, 0x23 },          // 803 bytes
                                                                              new byte[6], (byte)ErrorCommand.DADOS_OK, CommandCodes.END);
                            byte    checkSumCabecalho  = cabecalhoDadosGravaDigital[cabecalhoDadosGravaDigital.Length - 2];
                            Digital digitalComunicador = digitals[digitalAtual - 1];
                            byte[]  dadosGravaDigital  = criaPacoteDados(checkSumCabecalho, digitalComunicador);

                            /**
                             * Envio de bloco vazio:
                             * Necessário para o REP reconhecer tudo corretamente (visto empiricamente).
                             */
                            if (digitalAtual == 1)
                            {
                                enviaBlocoVazio(ProtocolUtils.copyOfRange(cabecalhoDadosGravaDigital, 0, 2), incluirBytesNoInicio);
                                // Envia a digital
                                sendBuffer(ProtocolUtils.merge(ProtocolUtils.copyOfRange(cabecalhoDadosGravaDigital, 2, cabecalhoDadosGravaDigital.Length), dadosGravaDigital), true, tcp);
                            }
                            else
                            {
                                primeiroBlocoCabecalho = ProtocolUtils.copyOfRange(cabecalhoDadosGravaDigital, 0, 16); // primeiros 16 bytes
                                sendBuffer(primeiroBlocoCabecalho, true, tcp);
                                // Envia a digital
                                sendBuffer(ProtocolUtils.merge(ProtocolUtils.copyOfRange(cabecalhoDadosGravaDigital, 16, cabecalhoDadosGravaDigital.Length), dadosGravaDigital), true, tcp);
                            }

                            // Lê e trata 2ª resposta do REP
                            lerEtratarResposta(Protocol.QTD_BYTES_CABECALHO_CRIPTOGRAFADO);
                            incluirBytesNoInicio = true;
                        }
                    }
                }
                catch (Exception e)
                {
                    errorCommand.setErro(ErrorCommand.OCORREU_EXCECAO);
                }
                tcp.finalizaConexao();
            }
            catch (Exception e)
            {
                errorCommand.setErro(ErrorCommand.ERRO_FINALIZAR_CONEXAO);
            }

            return(errorCommand);
        }