// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Uniitest for data encryption functions. #include "base/logging.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "rlz/lib/crc8.h" TEST(Crc8Unittest, TestCrc8) { struct Data { char string[10]; // Externally calculated checksums use // http://www.zorc.breitbandkatze.de/crc.html // with the ATM HEC paramters: // CRC-8, Polynomial 0x07, Initial value 0x00, Final XOR value 0x55 // (direct, don't reverse data byes, don't reverse CRC before final XOR) unsigned char external_crc; int random_byte; unsigned char corrupt_value; } data[] = { {"Google", 0x01, 2, 0x53}, {"GOOGLE", 0xA6, 4, 0x11}, {"My CRC 8!", 0xDC, 0, 0x50}, }; unsigned char* bytes; unsigned char crc; bool matches; int length; for (size_t i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { bytes = reinterpret_cast<unsigned char*>(data[i].string); crc = 0; matches = false; length = strlen(data[i].string); // Calculate CRC and compare against external value. rlz_lib::Crc8::Generate(bytes, length, &crc); EXPECT_TRUE(crc == data[i].external_crc); rlz_lib::Crc8::Verify(bytes, length, crc, &matches); EXPECT_TRUE(matches); // Corrupt string and see if CRC still matches. data[i].string[data[i].random_byte] = data[i].corrupt_value; rlz_lib::Crc8::Verify(bytes, length, crc, &matches); EXPECT_FALSE(matches); } }