Skip to content

Commit

Permalink
Check-in rlz code to src\rlz from http://code.google.com/p/rlz/.
Browse files Browse the repository at this point in the history
Review URL: https://chromiumcodereview.appspot.com/10597002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@143381 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
jam@chromium.org committed Jun 21, 2012
1 parent b049c38 commit 0a5e34a
Show file tree
Hide file tree
Showing 51 changed files with 6,974 additions and 0 deletions.
70 changes: 70 additions & 0 deletions rlz/DEPS
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# 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.
#
# This DEPS file exists so that it can capture the dependenciez of RLZ. This
# allows external projects to check it out and build it independently from all
# of chrome.

vars = {
"chrev": "@119173"
}

deps = {
"src/base":
"http://src.chromium.org/svn/trunk/src/base" + Var("chrev"),

"src/build":
"http://src.chromium.org/svn/trunk/src/build" + Var("chrev"),

"src/third_party/icu":
"http://src.chromium.org/svn/trunk/deps/third_party/icu42" + Var("chrev"),

"src/third_party/modp_b64":
"http://src.chromium.org/svn/trunk/src/third_party/modp_b64" + Var("chrev"),

"src/third_party/nss":
"http://src.chromium.org/svn/trunk/deps/third_party/nss" + Var("chrev"),

"src/third_party/sqlite":
"http://src.chromium.org/svn/trunk/src/third_party/sqlite" + Var("chrev"),

"src/third_party/wtl":
"http://src.chromium.org/svn/trunk/src/third_party/wtl" + Var("chrev"),

"src/third_party/zlib":
"http://src.chromium.org/svn/trunk/src/third_party/zlib" + Var("chrev"),

"src/testing":
"http://src.chromium.org/svn/trunk/src/testing" + Var("chrev"),

"src/testing/gmock":
"http://googlemock.googlecode.com/svn/trunk@374",

"src/testing/gtest":
"http://googletest.googlecode.com/svn/trunk@492",

"src/tools/gyp":
"http://gyp.googlecode.com/svn/trunk@1233",

"src/tools/win":
"http://src.chromium.org/svn/trunk/src/tools/win" + Var("chrev"),

# If using rlz with chrome's networking library, add it and its dependencies
# here.
}

include_rules = [
"+build",
"+net", # This is only used when force_rlz_use_chrome_net=1 is passed to gyp.
"+third_party/zlib",
]

hooks = [
{
# A change to a .gyp, .gypi, or to GYP itself should run the generator.
"pattern": ".",
"action": ["python", "src/build/gyp_chromium", "src/rlz/rlz.gyp"],
}
]

15 changes: 15 additions & 0 deletions rlz/lib/assert.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// 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.
//
// Macros specific to the RLZ library.

#include "rlz/lib/assert.h"

namespace rlz_lib {

#ifdef MUTE_EXPECTED_ASSERTS
std::string expected_assertion_;
#endif

} // namespace rlz_lib
53 changes: 53 additions & 0 deletions rlz/lib/assert.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// 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.
//
// Macros specific to the RLZ library.

#ifndef RLZ_LIB_ASSERT_H_
#define RLZ_LIB_ASSERT_H_

#include <string>
#include "base/logging.h"

// An assertion macro.
// Can mute expected assertions in debug mode.

#ifndef ASSERT_STRING
#ifndef MUTE_EXPECTED_ASSERTS
#define ASSERT_STRING(expr) LOG_IF(FATAL, false) << (expr)
#else
#define ASSERT_STRING(expr) \
do { \
std::string expr_string(expr); \
if (rlz_lib::expected_assertion_ != expr_string) { \
LOG_IF(FATAL, false) << (expr); \
} \
} while (0)
#endif
#endif


#ifndef VERIFY
#ifdef _DEBUG
#define VERIFY(expr) LOG_IF(FATAL, !(expr)) << #expr
#else
#define VERIFY(expr) (void)(expr)
#endif
#endif

namespace rlz_lib {

#ifdef MUTE_EXPECTED_ASSERTS
extern std::string expected_assertion_;
#endif

inline void SetExpectedAssertion(const char* s) {
#ifdef MUTE_EXPECTED_ASSERTS
expected_assertion_ = s;
#endif
}

} // rlz_lib

#endif // RLZ_LIB_ASSERT_H_
17 changes: 17 additions & 0 deletions rlz/lib/crc32.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// 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.
//
// A wrapper around ZLib's CRC function.

#ifndef RLZ_LIB_CRC32_H_
#define RLZ_LIB_CRC32_H_

namespace rlz_lib {

int Crc32(const unsigned char* buf, int length);
bool Crc32(const char* text, int* crc);

} // namespace rlz_lib

#endif // RLZ_LIB_CRC32_H_
52 changes: 52 additions & 0 deletions rlz/lib/crc32_unittest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// 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.
//
// A test for ZLib's checksum function.

#include "rlz/lib/crc32.h"

#include "base/logging.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

TEST(Crc32Unittest, ByteTest) {
struct {
const char* data;
int len;
// Externally calculated at http://crc32-checksum.waraxe.us/
int crc;
} kData[] = {
{"Hello" , 5, 0xF7D18982},
{"Google" , 6, 0x62B0F067},
{"" , 0, 0x0},
{"One more string.", 16, 0x0CA14970},
{NULL , 0, 0x0},
};

for (int i = 0; kData[i].data; i++)
EXPECT_EQ(kData[i].crc,
rlz_lib::Crc32(reinterpret_cast<const unsigned char*>(kData[i].data),
kData[i].len));
}

TEST(Crc32Unittest, CharTest) {
struct {
const char* data;
// Externally calculated at http://crc32-checksum.waraxe.us/
int crc;
} kData[] = {
{"Hello" , 0xF7D18982},
{"Google" , 0x62B0F067},
{"" , 0x0},
{"One more string.", 0x0CA14970},
{"Google\r\n" , 0x83A3E860},
{NULL , 0x0},
};

int crc;
for (int i = 0; kData[i].data; i++) {
EXPECT_TRUE(rlz_lib::Crc32(kData[i].data, &crc));
EXPECT_EQ(kData[i].crc, crc);
}
}
36 changes: 36 additions & 0 deletions rlz/lib/crc32_wrapper.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// 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.
//
// A wrapper around ZLib's CRC functions to put them in the rlz_lib namespace
// and use our types.

#include "rlz/lib/assert.h"
#include "rlz/lib/crc32.h"
#include "rlz/lib/string_utils.h"
#include "third_party/zlib/zlib.h"

namespace rlz_lib {

int Crc32(const unsigned char* buf, int length) {
return crc32(0L, buf, length);
}

bool Crc32(const char* text, int* crc) {
if (!crc) {
ASSERT_STRING("Crc32: crc is NULL.");
return false;
}

*crc = 0;
for (int i = 0; text[i]; i++) {
if (!IsAscii(text[i]))
return false;

*crc = crc32(*crc, reinterpret_cast<const unsigned char*>(text + i), 1);
}

return true;
}

} // namespace rlz_lib
90 changes: 90 additions & 0 deletions rlz/lib/crc8.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// 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.

#include "rlz/lib/crc8.h"

namespace {

// The CRC lookup table used for ATM HES (Polynomial = 0x07).
// These are 256 unique 8-bit values.
const unsigned char kCrcTable[256] = {
0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,
0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,
0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,
0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,
0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,
0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,
0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,
0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,
0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,
0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,
0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,
0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,
0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,
0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,
0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,
0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3
};

} // namespace anonymous


namespace rlz_lib {

bool Crc8::Generate(const unsigned char *data, int length,
unsigned char* check_sum) {
if (!check_sum)
return false;

*check_sum = 0;
if (!data)
return false;

// The inital and final constants are as used in the ATM HEC.
static const unsigned char kInitial = 0x00;
static const unsigned char kFinal = 0x55;
unsigned char crc = kInitial;
for (int i = 0; i < length; ++i) {
crc = kCrcTable[(data[i] ^ crc) & 0xFFU];
}

*check_sum = crc ^ kFinal;
return true;
}

bool Crc8::Verify(const unsigned char* data, int length,
unsigned char check_sum, bool* matches) {
if (!matches)
return false;

*matches = false;
if (!data)
return false;

unsigned char calculated_crc;
if (!Generate(data, length, &calculated_crc))
return false;

*matches = check_sum == calculated_crc;

return true;
}

} // namespace rlz_lib
24 changes: 24 additions & 0 deletions rlz/lib/crc8.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// 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.
//
// Crc8 utility functions.

#ifndef RLZ_LIB_CRC8_H_
#define RLZ_LIB_CRC8_H_

namespace rlz_lib {
// CRC-8 methods:
class Crc8 {
public:
static bool Generate(const unsigned char* data,
int length,
unsigned char* check_sum);
static bool Verify(const unsigned char* data,
int length,
unsigned char checksum,
bool * matches);
};
}; // namespace rlz_lib

#endif // RLZ_LIB_CRC8_H_
Loading

0 comments on commit 0a5e34a

Please sign in to comment.