crypto_helpers.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/sync/util/crypto_helpers.h" 6 7#include <string> 8#include <vector> 9 10#include "base/basictypes.h" 11#include "base/format_macros.h" 12#include "base/logging.h" 13#include "base/rand_util.h" 14#include "base/string_util.h" 15 16using std::string; 17using std::vector; 18 19MD5Calculator::MD5Calculator() { 20 MD5Init(&context_); 21} 22 23void MD5Calculator::AddData(const unsigned char* data, int length) { 24 CHECK(bin_digest_.empty()); 25 MD5Update(&context_, data, length); 26} 27 28void MD5Calculator::CalcDigest() { 29 if (bin_digest_.empty()) { 30 MD5Digest digest; 31 MD5Final(&digest, &context_); 32 bin_digest_.assign(digest.a, digest.a + arraysize(digest.a)); 33 } 34} 35 36vector<uint8> MD5Calculator::GetDigest() { 37 CalcDigest(); 38 return bin_digest_; 39} 40 41std::string MD5Calculator::GetHexDigest() { 42 CalcDigest(); 43 string hex = HexEncode(reinterpret_cast<char*>(&bin_digest_.front()), 44 bin_digest_.size()); 45 StringToLowerASCII(&hex); 46 return hex; 47} 48 49void GetRandomBytes(char* output, int output_length) { 50 for (int i = 0; i < output_length; i++) { 51 // TODO(chron): replace this with something less stupid. 52 output[i] = static_cast<char>(base::RandUint64()); 53 } 54} 55 56string Generate128BitRandomHexString() { 57 int64 chunk1 = static_cast<int64>(base::RandUint64()); 58 int64 chunk2 = static_cast<int64>(base::RandUint64()); 59 return StringPrintf("%016" PRId64 "x%016" PRId64 "x", chunk1, chunk2); 60} 61