|
UM20005_Linker.pdf
(720.84 KB, 下载次数: 51)
封装好了API,直接调用即可。
- * main()
- *
- * Function description
- * Application entry point for integrity verification.
- */
- int main(void) {
- unsigned char *pTestData = __TestData_start__;
- unsigned char *pCheckData = __TestData_end__;
- unsigned TestDataLen = __TestData_end__ - __TestData_start__;
- U32 CalcCRC;
- static U8 aHash[512/8];
- //
- // Initialize CRYPTO.
- //
- CRYPTO_MD5_Install (&CRYPTO_HASH_MD5_SW, NULL);
- CRYPTO_RIPEMD160_Install(&CRYPTO_HASH_RIPEMD160_SW, NULL);
- CRYPTO_SM3_Install (&CRYPTO_HASH_SM3_SW, NULL);
- CRYPTO_SHA1_Install (&CRYPTO_HASH_SHA1_SW, NULL);
- CRYPTO_SHA224_Install (&CRYPTO_HASH_SHA224_SW, NULL);
- CRYPTO_SHA256_Install (&CRYPTO_HASH_SHA256_SW, NULL);
- CRYPTO_SHA512_Install (&CRYPTO_HASH_SHA512_SW, NULL);
- CRYPTO_SHA3_224_Install (&CRYPTO_HASH_SHA3_224_SW, NULL);
- CRYPTO_SHA3_256_Install (&CRYPTO_HASH_SHA3_256_SW, NULL);
- CRYPTO_SHA3_384_Install (&CRYPTO_HASH_SHA3_384_SW, NULL);
- CRYPTO_SHA3_512_Install (&CRYPTO_HASH_SHA3_512_SW, NULL);
- //
- // Get address and length of data to check.
- //
- pTestData = __TestData_start__;
- TestDataLen = __TestData_end__ - __TestData_start__;
- //
- // Get address of the list of corresponding integrity check
- // values.
- //
- pCheckData = __TestData_end__;
- //
- // CRC-7/MMC.
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x00, 0x09, 7);
- _Assert(CalcCRC == *pCheckData);
- pCheckData += 1;
- //
- // CRC-8
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x00, 0x07, 8);
- _Assert(CalcCRC == *pCheckData);
- pCheckData += 1;
- //
- // CRC-8/CDMA2000
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0xFF, 0x9B, 8);
- _Assert(CalcCRC == *pCheckData);
- pCheckData += 1;
- //
- // CRC-8/DARC
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0x00, 0x9C);
- _Assert(CalcCRC == *pCheckData);
- pCheckData += 1;
- //
- // CRC-8/MAXIM.
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0x00, 0x8C);
- _Assert(CalcCRC == *pCheckData);
- pCheckData += 1;
- //
- // CRC-8/AUTOSAR
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0xFF, 0x1D, 8) ^ 0xFF;
- _Assert(CalcCRC == *pCheckData);
- pCheckData += 1;
- //
- // CRC-8/BLUETOOTH
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0x00, 0xE5);
- _Assert(CalcCRC == *pCheckData);
- pCheckData += 1;
- //
- // CRC-16/CCITT:AUG
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x1D0F, 0x1021, 16);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/CCITT:NOAUG
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0xFFFF, 0x1021, 16);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/KERMIT
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0x0000, 0x8408);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/X.25
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0xFFFF, 0x8408) ^ 0xFFFF;
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/XMODEM
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x0000, 0x1021, 16);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/MODBUS
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0xFFFF, 0xA001);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/USB
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0xFFFF, 0xA001) ^ 0xFFFF;
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/ARC
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0x0000, 0xA001);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/UMTS
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x0000, 0x8005, 16);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-16/CDMA2000
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0xFFFF, 0xC867, 16);
- _Assert(CalcCRC == _LoadU16(pCheckData));
- pCheckData += 2;
- //
- // CRC-32
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0xFFFFFFFF, 0xEDB88320) ^ 0xFFFFFFFF;
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // CRC-32/BZIP2
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0xFFFFFFFF, 0x04C11DB7, 32) ^ 0xFFFFFFFF;
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // CRC-32/MPEG2
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0xFFFFFFFF, 0x04C11DB7, 32);
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // CRC-32/POSIX
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x00000000, 0x04C11DB7, 32) ^ 0xFFFFFFFF;
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // CRC-32/XFER
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x00000000, 0x000000AF, 32);
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // CRC-32C
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0xFFFFFFFF, 0x82F63B78) ^ 0xFFFFFFFF;
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // CRC-32D
- //
- CalcCRC = SEGGER_CRC_Calc(pTestData, TestDataLen, 0xFFFFFFFF, 0xD419CC15) ^ 0xFFFFFFFF;
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // CRC-32Q
- //
- CalcCRC = SEGGER_CRC_Calc_MSB(pTestData, TestDataLen, 0x00000000, 0x814141AB, 32);
- _Assert(CalcCRC == _LoadU32(pCheckData));
- pCheckData += 4;
- //
- // MD5.
- //
- CRYPTO_MD5_Calc(aHash, CRYPTO_MD5_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_MD5_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_MD5_DIGEST_BYTE_COUNT;
- //
- // RIPEMD-160
- //
- CRYPTO_RIPEMD160_Calc(aHash, CRYPTO_RIPEMD160_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_RIPEMD160_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_RIPEMD160_DIGEST_BYTE_COUNT;
- //
- // SHA-1
- //
- CRYPTO_SHA1_Calc(aHash, CRYPTO_SHA1_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA1_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA1_DIGEST_BYTE_COUNT;
- //
- // SHA-224
- //
- CRYPTO_SHA224_Calc(aHash, CRYPTO_SHA224_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA224_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA224_DIGEST_BYTE_COUNT;
- //
- // SHA-256
- //
- CRYPTO_SHA256_Calc(aHash, CRYPTO_SHA256_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA256_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA256_DIGEST_BYTE_COUNT;
- //
- // SHA-384
- //
- CRYPTO_SHA384_Calc(aHash, CRYPTO_SHA384_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA384_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA384_DIGEST_BYTE_COUNT;
- //
- // SHA-512
- //
- CRYPTO_SHA512_Calc(aHash, CRYPTO_SHA512_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA512_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA512_DIGEST_BYTE_COUNT;
- //
- // SHA-512/224
- //
- CRYPTO_SHA512_224_Calc(aHash, CRYPTO_SHA512_224_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA512_224_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA512_224_DIGEST_BYTE_COUNT;
- //
- // SHA-512/256
- //
- CRYPTO_SHA512_256_Calc(aHash, CRYPTO_SHA512_256_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA512_256_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA512_256_DIGEST_BYTE_COUNT;
- //
- // SHA3-224
- //
- CRYPTO_SHA3_224_Calc(aHash, CRYPTO_SHA3_224_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA3_224_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA3_224_DIGEST_BYTE_COUNT;
- //
- // SHA3-256
- //
- CRYPTO_SHA3_256_Calc(aHash, CRYPTO_SHA3_256_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA3_256_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA3_256_DIGEST_BYTE_COUNT;
- //
- // SHA3-384
- //
- CRYPTO_SHA3_384_Calc(aHash, CRYPTO_SHA3_384_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA3_384_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA3_384_DIGEST_BYTE_COUNT;
- //
- // SHA3-512
- //
- CRYPTO_SHA3_512_Calc(aHash, CRYPTO_SHA3_512_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SHA3_512_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SHA3_512_DIGEST_BYTE_COUNT;
- //
- // SM3
- //
- CRYPTO_SM3_Calc(aHash, CRYPTO_SM3_DIGEST_BYTE_COUNT, pTestData, TestDataLen);
- _Assert(memcmp(aHash, pCheckData, CRYPTO_SM3_DIGEST_BYTE_COUNT) == 0);
- pCheckData += CRYPTO_SM3_DIGEST_BYTE_COUNT;
- //
- printf("All integrity checks passed!\n");
- asm("bkpt");
- }
复制代码
|
|