OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/rappor/byte_vector_utils.h" | 5 #include "components/rappor/byte_vector_utils.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
71 return true; | 71 return true; |
72 // 4. K = HMAC(K, V || 0x01 || provided_data) | 72 // 4. K = HMAC(K, V || 0x01 || provided_data) |
73 if (!HMAC_Rotate(*hmac2, Concat(*value, 0x01, provided_data), out_hmac)) | 73 if (!HMAC_Rotate(*hmac2, Concat(*value, 0x01, provided_data), out_hmac)) |
74 return false; | 74 return false; |
75 // 5. V = HMAC(K, V) | 75 // 5. V = HMAC(K, V) |
76 return HMAC_Rehash(*out_hmac, value); | 76 return HMAC_Rehash(*out_hmac, value); |
77 } | 77 } |
78 | 78 |
79 } // namespace | 79 } // namespace |
80 | 80 |
81 void Uint64ToByteVector(uint64_t value, uint64_t size, ByteVector* output) { | |
82 DCHECK_LE(size, 8u); | |
83 DCHECK_EQ(size, output->size()); | |
84 for (size_t i = 0; i < size; i++) { | |
85 // Get the value of the i-th smallest byte and copy it to the byte vector. | |
86 uint64_t shift = i * 8; | |
brucedawson
2015/04/29 18:21:51
Why is shift a uint64_t? The legal values are from
| |
87 uint64_t byte_mask = uint64_t(0xff) << shift; | |
Alexei Svitkine (slow)
2015/04/29 15:01:07
Our style guide prefers static_cast<uint64_t>().
Steven Holte
2015/04/29 18:18:56
Done.
| |
88 (*output)[i] = (value & byte_mask) >> shift; | |
89 } | |
90 } | |
91 | |
81 ByteVector* ByteVectorAnd(const ByteVector& lhs, ByteVector* rhs) { | 92 ByteVector* ByteVectorAnd(const ByteVector& lhs, ByteVector* rhs) { |
82 DCHECK_EQ(lhs.size(), rhs->size()); | 93 DCHECK_EQ(lhs.size(), rhs->size()); |
83 for (size_t i = 0; i < lhs.size(); ++i) { | 94 for (size_t i = 0; i < lhs.size(); ++i) { |
84 (*rhs)[i] = lhs[i] & (*rhs)[i]; | 95 (*rhs)[i] = lhs[i] & (*rhs)[i]; |
85 } | 96 } |
86 return rhs; | 97 return rhs; |
87 } | 98 } |
88 | 99 |
89 ByteVector* ByteVectorOr(const ByteVector& lhs, ByteVector* rhs) { | 100 ByteVector* ByteVectorOr(const ByteVector& lhs, ByteVector* rhs) { |
90 DCHECK_EQ(lhs.size(), rhs->size()); | 101 DCHECK_EQ(lhs.size(), rhs->size()); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
216 bytes_to_go -= n; | 227 bytes_to_go -= n; |
217 generated_bytes_ += n; | 228 generated_bytes_ += n; |
218 // Check max_number_of_bits_per_request from 10.1 Table 2 | 229 // Check max_number_of_bits_per_request from 10.1 Table 2 |
219 // max_number_of_bits_per_request == 2^19 bits == 2^16 bytes | 230 // max_number_of_bits_per_request == 2^19 bits == 2^16 bytes |
220 DCHECK_LT(generated_bytes_, 1U << 16); | 231 DCHECK_LT(generated_bytes_, 1U << 16); |
221 } | 232 } |
222 return bytes; | 233 return bytes; |
223 } | 234 } |
224 | 235 |
225 } // namespace rappor | 236 } // namespace rappor |
OLD | NEW |