diff options
author | nick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-11 18:33:10 +0000 |
---|---|---|
committer | nick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-11 18:33:10 +0000 |
commit | ed5048f0a953756353f2a856aa78c9f70a5ea322 (patch) | |
tree | b5f0211ba5b8748d88eecae7c7112d6ce7674458 /chrome/browser/sync | |
parent | 89d5718f6ad37a02fc254b6759a32d86d0d557a6 (diff) | |
download | chromium_src-ed5048f0a953756353f2a856aa78c9f70a5ea322.zip chromium_src-ed5048f0a953756353f2a856aa78c9f70a5ea322.tar.gz chromium_src-ed5048f0a953756353f2a856aa78c9f70a5ea322.tar.bz2 |
sync crypto helpers: Generate smaller unique strings using the same
amount of randomness. This will reduce the size of bookmark IDs by
20 bytes per object: meaning potential savings of 40-60 bytes per bookmark
SyncEntity.
Old and new server IDs (for example):
0DXKZkVqHIRcWYy00MzUzMjc1MDMzNjU1MDIzOTkyeDgxNjQ4NzEyNjczODUyMTk4NzB4fC02NTUzOQ
0DXKZkVqHIRcWYzBaWVRHN29zdzV4OFpTR1RWSE1STEE9PXwtMg
BUG=
TEST=
Review URL: http://codereview.chromium.org/3614015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62162 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sync')
-rw-r--r-- | chrome/browser/sync/util/crypto_helpers.cc | 20 | ||||
-rw-r--r-- | chrome/browser/sync/util/crypto_helpers_unittest.cc | 10 |
2 files changed, 24 insertions, 6 deletions
diff --git a/chrome/browser/sync/util/crypto_helpers.cc b/chrome/browser/sync/util/crypto_helpers.cc index 9315d8b..36c5586 100644 --- a/chrome/browser/sync/util/crypto_helpers.cc +++ b/chrome/browser/sync/util/crypto_helpers.cc @@ -10,6 +10,7 @@ #include "base/basictypes.h" #include "base/format_macros.h" #include "base/logging.h" +#include "base/base64.h" #include "base/rand_util.h" #include "base/string_number_conversions.h" #include "base/string_util.h" @@ -50,14 +51,21 @@ std::string MD5Calculator::GetHexDigest() { } void GetRandomBytes(char* output, int output_length) { - for (int i = 0; i < output_length; i++) { - // TODO(chron): replace this with something less stupid. - output[i] = static_cast<char>(base::RandUint64()); + uint64 random_int; + const char* random_int_bytes = reinterpret_cast<const char*>(&random_int); + int random_int_size = sizeof(random_int); + for (int i = 0; i < output_length; i += random_int_size) { + random_int = base::RandUint64(); + int copy_count = std::min(output_length - i, random_int_size); + memcpy(output + i, random_int_bytes, copy_count); } } string Generate128BitRandomHexString() { - int64 chunk1 = static_cast<int64>(base::RandUint64()); - int64 chunk2 = static_cast<int64>(base::RandUint64()); - return StringPrintf("%016" PRId64 "x%016" PRId64 "x", chunk1, chunk2); + const int kNumberBytes = 128 / 8; + std::string random_bytes(kNumberBytes, ' '); + GetRandomBytes(&random_bytes[0], kNumberBytes); + std::string base64_encoded_bytes; + base::Base64Encode(random_bytes, &base64_encoded_bytes); + return base64_encoded_bytes; } diff --git a/chrome/browser/sync/util/crypto_helpers_unittest.cc b/chrome/browser/sync/util/crypto_helpers_unittest.cc index 0277ae6..7be1270 100644 --- a/chrome/browser/sync/util/crypto_helpers_unittest.cc +++ b/chrome/browser/sync/util/crypto_helpers_unittest.cc @@ -15,3 +15,13 @@ TEST(ChecksumTest, MD5ChecksumTest) { std::string checksum("e2c865db4162bed963bfaa9ef6ac18f0"); ASSERT_EQ(checksum, md5.GetHexDigest()); } + +TEST(CryptoHelpers, GetRandomBytes) { + for (int i = 1; i < 25; ++i) { + std::string random_bytes(i+1, ' '); + do { + GetRandomBytes(&random_bytes[0], i); + ASSERT_EQ(random_bytes[i], ' '); + } while (random_bytes[i - 1] == ' '); + } +} |