Пример #1
0
        ICRC getChecker()
        {
            if (CRCType == Helpers.CRCType.None)
            {
                return(null);
            }
            if (cr.ContainsKey(CRCType))
            {
                return(cr[this.CRCType]);
            }
            ICRC toret = null;

            switch (CRCType)
            {
            case Helpers.CRCType.CRC8:
                toret = new CRC8(InitialCrcValue.Zeros);
                break;

            //case Helpers.CRCType.CRC16:
            //    toret = new CRC16(InitialCrcValue.Zeros);
            //    break;
            case Helpers.CRCType.CRC16CCITT:
                toret = new CRC16CCITT(InitialCrcValue.Zeros);
                break;
                //case Helpers.CRCType.CRC32:
                //    toret = new CRC32(InitialCrcValue.Zeros);
                //    break;
            }
            if (toret == null)
            {
                return(null);
            }
            cr.Add(CRCType, toret);
            return(toret);
        }
Пример #2
0
        protected override bool VerificarIntegridade(string arquivoNome)
        {
            const int posCRC1 = 2;
            const int posCRC2 = 3;

            this.ArquivoNome = arquivoNome;
            Byte[]      dados        = this.ToBytes();
            List <byte> dadosValidos = new List <byte>();

            for (int i = 0; i < dados.Length; i++)
            {
                if ((i == posCRC1) || (i == posCRC2))
                {
                    continue;
                }
                else
                {
                    dadosValidos.Add(dados[i]);
                }
            }
            ushort crc16 = (ushort)(dados[posCRC1] << 8);

            crc16 += (ushort)(dados[posCRC2]);

            return(CRC16CCITT.Calcular(dadosValidos.ToArray()) == crc16);
        }
Пример #3
0
 public static String ComputeCrc16Ccitt(this byte[] bytes, CRC16CCITT.Seeds seed, HashFormat hashFormat)
 {
     using (var hashImpl = new CRC16CCITT(seed))
     {
         var hashBytes = hashImpl.ComputeHash(bytes);
         return(ConvertToString(hashBytes, hashFormat));
     }
 }
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoIdioma *parametros = (FormatoIdioma *)pSrc;

                Array.Copy(dados, 0, dadosCRC, 0, (int)&parametros->crc - (int)pSrc);
                Array.Copy(dados, ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC,
                           (int)&parametros->crc - (int)pSrc,
                           dados.Length - ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
Пример #5
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            Byte[] dadosCRC = new byte[sizeof(FormatoParametrosVariaveis) - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoParametrosVariaveis *parametros = (FormatoParametrosVariaveis *)pSrc;

                Array.Copy(dados, 0, dadosCRC, 0, (int)&parametros->crc - (int)pSrc);
                Array.Copy(dados, ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC,
                           (int)&parametros->crc - (int)pSrc,
                           sizeof(FormatoParametrosVariaveis) - ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
Пример #6
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoMotoristaPaths *motorista = (FormatoMotoristaPaths *)pSrc;

                Array.Copy(dados, 0, dadosCRC, 0, (int)&motorista->crc - (int)pSrc);
                Array.Copy(dados,
                           ((int)&motorista->crc - (int)pSrc + sizeof(UInt16)),
                           dadosCRC,
                           (int)&motorista->crc - (int)pSrc,
                           dados.Length - ((int)&motorista->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
Пример #7
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            int tamanho;

            Byte[] dadosCRC = new byte[sizeof(FormatoRoteiros) - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoRoteiros *regiao = (FormatoRoteiros *)pSrc;

                Array.Copy(dados, 0, dadosCRC, 0, (int)&regiao->crc - (int)pSrc);
                Array.Copy(dados, ((int)&regiao->crc - (int)pSrc + sizeof(UInt16)), dadosCRC,
                           (int)&regiao->crc - (int)pSrc,
                           sizeof(FormatoRoteiros) - ((int)&regiao->crc - (int)pSrc + sizeof(UInt16)));

                return(CRC16CCITT.Calcular(dadosCRC));
            }
        }
Пример #8
0
        public virtual bool EnviarDados(byte[] arrayEntrada, byte[] parametrosProtocolo)
        {
            Byte[]  arraySaida          = new Byte[arrayEntrada.Length + 2];
            Int32   tamanhoArrayEntrada = arrayEntrada.Length;
            Boolean resultado           = true;
            Byte    resposta;

            // PREPARAR ARRAY A SER ENVIADO
            for (int i = 0; i < arrayEntrada.Length; i++)
            {
                arraySaida[i] = arrayEntrada[i];
            }

            // PASSO 1 - ENVIAR PROTOCOLO
            this.Enviar(parametrosProtocolo, 0, parametrosProtocolo.Length);

            // PASSO 2 - RECEBER CONFIRMAÇÃO
            resposta = (byte)this.ReceberByte();

            if (resposta != ACK)
            {
                throw new FalhaComunicacaoException("NACK");
            }

            // PASSO 3 - ENVIAR DADOS
            ushort crc16 = CRC16CCITT.Calcular(arrayEntrada);

            arraySaida[tamanhoArrayEntrada + 0] = (byte)(crc16 % 256);
            arraySaida[tamanhoArrayEntrada + 1] = (byte)(crc16 / 256);

            this.Enviar(arraySaida, 0, arraySaida.Length);

            // PASSO 4 - RECEBER CONFIRMAÇÃO
            resposta = (byte)this.ReceberByte();

            if (resposta != ACK)
            {
                //throw new SenhaNaoConfereException("Senha não confere");
                resultado = false;
            }

            return(resultado);
        }
Пример #9
0
        private unsafe UInt16 CalcularCRC(Byte[] dados)
        {
            int         tamanho;
            List <byte> dadosBitmaps = new List <byte>();

            Byte[] dadosCRC = new byte[dados.Length - sizeof(UInt16)];

            fixed(byte *pSrc = dados)
            {
                FormatoFonte *parametros = (FormatoFonte *)pSrc;

                Array.Copy(dados, 0, dadosCRC, 0, (int)&parametros->crc - (int)pSrc);
                Array.Copy(dados, ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)), dadosCRC,
                           (int)&parametros->crc - (int)pSrc,
                           sizeof(FormatoFonte) - ((int)&parametros->crc - (int)pSrc + sizeof(UInt16)));

                for (int i = sizeof(FormatoFonte); i < dados.Length; i++)
                {
                    dadosCRC[i - 2] = dados[i];
                }

                //return CRC16CCITT.Calcular(dadosCRC);
            }

            //foreach (Bitmap bmp in this.bitmaps)
            //{
            //    dadosBitmaps.AddRange(bmp.FromMatrixToArray());
            //}

            //tamanho = dadosCRC.Length;

            //Array.Resize(ref dadosCRC, dadosCRC.Length + dadosBitmaps.Count);

            //byte[] aux = dadosBitmaps.ToArray();
            //Array.Copy(aux, 0, dadosCRC, tamanho, aux.Length);

            return(CRC16CCITT.Calcular(dadosCRC));
        }
Пример #10
0
        public void AtualizarCRC()
        {
            /*
             * Byte[] dados = toByteArray();
             *
             * fixed (byte* pSrc = dados)
             * {
             *  FormatoFonte* parametros = (FormatoFonte*)pSrc;
             *
             *  this.crc = CalcularCRC(dados);
             * }
             */

            const int posCRC1 = 62;
            const int posCRC2 = 63;

            Byte[] dados = FonteToByteArray();

            List <byte> dadosValidos = new List <byte>();

            for (int i = 0; i < dados.Length; i++)
            {
                if ((i == posCRC1) || (i == posCRC2))
                {
                    continue;
                }
                else
                {
                    dadosValidos.Add(dados[i]);
                }
            }
            ushort crc16 = CRC16CCITT.Calcular(dadosValidos.ToArray());

            dados[posCRC1] = (byte)(crc16 >> 8);
            dados[posCRC2] = (byte)(crc16);

            this.crc = crc16;
        }