CRC32, CRC32C

Computes the CRC32 checksum for the source data buffer.

Syntax

IppStatus ippsCRC32_8u (const Ipp8u* pSrc, int srcLen, Ipp32u* pCRC32);

IppStatus ippsCRC32C_8u(const Ipp8u* pSrc, Ipp32u srcLen, Ipp32u* pCRC32C);

Parameters

pSrc

Pointer to the source data buffer.

srcLen

Number of elements in the source data buffer.

pCRC32, pCRC32C

Pointer to the checksum value.

Description

The functions ippsCRC32 and ippsCRC32C are declared in the ippdc.h file. These functions compute the checksum for srcLen elements of the source data buffer pSrc using different algorithms and stores it in the pCRC32 or pCRC32C respectively.

The function ippsCRC32 uses algorithm described in [Griff87], [Nel92], the function ippsCRC32C uses algorithm described in [Cast93].

These functions can be used to compute the accumulated value of the checksum for multiple buffers in the data stream by specifying as an input parameter the checksum value obtained in the preceding function call.

Example below shows how to use the function ippsCRC32C_8u.

Return Values

ippStsNoErr

Indicates no error.

ippStsNullPtrErr

Indicates an error if the pSrc pointer is NULL.

ippStsSizeErr

Indicates an error if the length of the source vector is less than or equal to 0.

Using the ippsCRC32C_8u Function

#include <iostream>
#include <iomanip>
#include "ipp.h"
using namespace std;
void crc32c_core( Ipp8u* src, Ipp32u src_len )
{
    Ipp32u crc32c = ~(Ipp32u)0;
    ippsCRC32C_8u( src, src_len, &crc32c );
    ippsSwapBytes_32u_I( &crc32c, 1 );
    cout << "0x" << setbase(16) << ~crc32c << endl;
}
int main()
{
    Ipp8u buff[48] = { 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                       0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
                       0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x18,
                       0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                       0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
    cout << "An iSCSI - SCSI Read (10) Command PDU: ";
    crc32c_core( buff, 48 );
 
    cout << "32 bytes of zeroes: ";
    for( int i = 0; i < 32; i++ ) buff[i] = 0;
    crc32c_core( buff, 32 );
 
    cout << "32 bytes of ones: ";
    for( int i = 0; i < 32; i++ ) buff[i] = 0xff;
    crc32c_core( buff, 32 );
 
    cout << "32 bytes of incrementing 00..1f: ";
    for( int i = 0; i < 32; i++ ) buff[i] = i;
    crc32c_core( buff, 32 );
 
    cout << "32 bytes of decrementing 1f..00: ";
    for( int i = 0; i < 32; i++ ) buff[i] = 31 - i;
    crc32c_core( buff, 32 );
 
    return 0;
}
Output:
An iSCSI - SCSI Read (10) Command PDU: 0x563a96d9
32 bytes of zeroes: 0xaa36918a
32 bytes of ones: 0x43aba862
32 bytes of incrementing 00..1f: 0x4e79dd46
32 bytes of decrementing 1f..00: 0x5cdb3f11


Submit feedback on this help topic

Copyright © 2000 - 2011, Intel Corporation. All rights reserved.