Click here to Skip to main content
13,298,965 members (39,036 online)
Rate this:
Please Sign up or sign in to vote.
See more:
Hi everybody. I have been looking for some c++ source code or example for a CRC 128 bits, I already have de polinomial: x128 + x127 + x65 + x64 + x + 1
I have found many examples for crc until crc-32 but I have no idea about how to transform these examples into a crc-128... Could anybody help me in any way? thanks in advance
Posted 8-Nov-12 6:55am
JackDingler 9-Nov-12 16:07pm
Are you just having trouble implementing 128 bit integers?

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 1

Try the following (not really a crc but anyway!):[^]
dpcfire 9-Nov-12 3:11am
Thank you very much for your fast answer, I have already been reading that link, but It is not suitable for my development.

I have an unsigned char message[256] (including the crc-128 (16 last bytes of message) and I need to check that this crc is correct.

I have to implement the ekms crc-128 but I can't find any information about it. I only have the polinomial but I don't know how to obtain the crc.
I have found this example (that appears like a generic crc implementation) but I have many problems with the lenght of data (which C++ type do I have to use for the polinomial, and how can I do the mathematical operations with it?): This example is a CRC-16 (I think)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void calcula_crc(unsigned longitud, BYTE *mensaje, BYTE *crc)
/* polinomio generador */
char polinomio[] = {1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0};

/* variables */
unsigned long resultado = -1;
char ctl;
int i,j,k;

/* bucle principal para el calculo del CRC */
for(i = 0; i < longitud; i++)
for(j = 0; j < 8; j++)
ctl = (resultado & 1) ^ ((mensaje >> j) & 1);
resultado = (resultado & ~1) >> 1;

for(k = 0; k < sizeof(polinomio); k++)
if(ctl && polinomio[sizeof(polinomio) - 1 - k])
resultado ^= (unsigned long) 1 << k;

/* pone a cero los bits del resultado no ocupados por el CRC */
for(i = sizeof(polinomio); i < sizeof(resultado) * 8; i++)

resultado |= (unsigned long) 1 << i;

/* devuelve el CRC de la secuencia */
resultado = ~resultado;
resultado >>= 16;
crc[0] = resultado & 0xff;
crc[1] = (resultado >> 8) & 0xff;

Thank you in advance everybody, I am a bit desperate...
dpcfire 12-Nov-12 3:14am
No ideas?...

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy |
Web03 | 2.8.171207.1 | Last Updated 8 Nov 2012
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100