summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authornick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-11 18:33:10 +0000
committernick@chromium.org <nick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-11 18:33:10 +0000
commited5048f0a953756353f2a856aa78c9f70a5ea322 (patch)
treeb5f0211ba5b8748d88eecae7c7112d6ce7674458 /chrome/browser
parent89d5718f6ad37a02fc254b6759a32d86d0d557a6 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/sync/util/crypto_helpers.cc20
-rw-r--r--chrome/browser/sync/util/crypto_helpers_unittest.cc10
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] == ' ');
+ }
+}