#include <stdio.h>
#include <string.h>
char *getcrcmessage(char *input, char *key)
{
int i, j, keylen, msglen;
char temp[30], quot[100], rem[30], key1[30];
keylen = strlen(key);
msglen = strlen(input);
strcpy(key1, key);
for (i = 0; i < keylen; i++)
{
input[msglen + i] = '0';
}
for (i = 0; i < keylen; i++)
temp[i] = input[i];
for (i = 0; i < msglen; i++)
{
quot[i] = temp[0];
if (quot[i] == '0')
for (j = 0; j < keylen; j++)
key[j] = '0';
else
for (j = 0; j < keylen; j++)
key[j] = key1[j];
for (j = keylen - 1; j > 0; j--)
{
if (temp[j] == key[j])
rem[j - 1] = '0';
else
rem[j - 1] = '1';
}
rem[keylen - 1] = input[i + keylen];
strcpy(temp, rem);
}
strcpy(rem, temp);
input[i] = '\0';
rem[keylen - 1] = '\0';
quot[msglen] = '\0';
char *response = strcat(input, rem);
printf(" ------------------------ CRC calculation --------------------");
printf("\nQuotient is: %s \n", quot);
printf("\nRemainder is : %s \n", rem);
printf("\nFinal data is: %s\n", response);
printf("--------------\n");
response[msglen+keylen-1] = '\0';
return response;
}
int verifycrc(char *input, char *key)
{
int i, j, keylen, msglen;
char temp[30], quot[100], rem[30], key1[30];
keylen = strlen(key);
msglen = strlen(input);
strcpy(key1, key);
for (i = 0; i < keylen; i++)
temp[i] = input[i];
for (i = 0; i < msglen - keylen; i++)
{
quot[i] = temp[0];
if (quot[i] == '0')
for (j = 0; j < keylen; j++)
key[j] = '0';
else
for (j = 0; j < keylen; j++)
key[j] = key1[j];
for (j = keylen - 1; j > 0; j--)
{
if (temp[j] == key[j])
rem[j - 1] = '0';
else
rem[j - 1] = '1';
}
rem[keylen - 1] = input[i + keylen];
strcpy(temp, rem);
}
strcpy(rem, temp);
input[i] = '\0';
rem[keylen] = '\0';
quot[msglen] = '\0';
printf(" ------------------------ CRC Verification --------------------");
printf("\nQuotient is: %s \n", quot);
printf("\nRemainder is : %s \n", rem);
printf("--------------\n");
if (strcmp(rem, "0000") == 0)
{
printf("\nChecksum Success\n");
return 1;
}
printf("Checksum Failure\n");
return -1;
}
Comments
Post a Comment