Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: crypto/hmac_win.cc

Issue 11419270: Use size_t as the type of key_length and digest_length arguments of HMAC. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fix compilation errors Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« crypto/hmac_openssl.cc ('K') | « crypto/hmac_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "crypto/hmac.h" 5 #include "crypto/hmac.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <wincrypt.h> 8 #include <wincrypt.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 // For HMAC-SHA-256 only. 102 // For HMAC-SHA-256 only.
103 std::vector<unsigned char> raw_key_; 103 std::vector<unsigned char> raw_key_;
104 }; 104 };
105 105
106 HMAC::HMAC(HashAlgorithm hash_alg) 106 HMAC::HMAC(HashAlgorithm hash_alg)
107 : hash_alg_(hash_alg), plat_(new HMACPlatformData()) { 107 : hash_alg_(hash_alg), plat_(new HMACPlatformData()) {
108 // Only SHA-1 and SHA-256 hash algorithms are supported now. 108 // Only SHA-1 and SHA-256 hash algorithms are supported now.
109 DCHECK(hash_alg_ == SHA1 || hash_alg_ == SHA256); 109 DCHECK(hash_alg_ == SHA1 || hash_alg_ == SHA256);
110 } 110 }
111 111
112 bool HMAC::Init(const unsigned char* key, int key_length) { 112 bool HMAC::Init(const unsigned char* key, size_t key_length) {
113 if (plat_->provider_ || plat_->key_ || !plat_->raw_key_.empty()) { 113 if (plat_->provider_ || plat_->key_ || !plat_->raw_key_.empty()) {
114 // Init must not be called more than once on the same HMAC object. 114 // Init must not be called more than once on the same HMAC object.
115 NOTREACHED(); 115 NOTREACHED();
116 return false; 116 return false;
117 } 117 }
118 118
119 if (hash_alg_ == SHA256) { 119 if (hash_alg_ == SHA256) {
120 plat_->raw_key_.assign(key, key + key_length); 120 plat_->raw_key_.assign(key, key + key_length);
121 return true; 121 return true;
122 } 122 }
(...skipping 17 matching lines...) Expand all
140 BYTE key_data[1]; 140 BYTE key_data[1];
141 }; 141 };
142 size_t key_blob_size = std::max(offsetof(KeyBlob, key_data) + key_length, 142 size_t key_blob_size = std::max(offsetof(KeyBlob, key_data) + key_length,
143 sizeof(KeyBlob)); 143 sizeof(KeyBlob));
144 std::vector<BYTE> key_blob_storage = std::vector<BYTE>(key_blob_size); 144 std::vector<BYTE> key_blob_storage = std::vector<BYTE>(key_blob_size);
145 KeyBlob* key_blob = reinterpret_cast<KeyBlob*>(&key_blob_storage[0]); 145 KeyBlob* key_blob = reinterpret_cast<KeyBlob*>(&key_blob_storage[0]);
146 key_blob->header.bType = PLAINTEXTKEYBLOB; 146 key_blob->header.bType = PLAINTEXTKEYBLOB;
147 key_blob->header.bVersion = CUR_BLOB_VERSION; 147 key_blob->header.bVersion = CUR_BLOB_VERSION;
148 key_blob->header.reserved = 0; 148 key_blob->header.reserved = 0;
149 key_blob->header.aiKeyAlg = CALG_RC2; 149 key_blob->header.aiKeyAlg = CALG_RC2;
150 key_blob->key_size = key_length; 150 key_blob->key_size = static_cast<DWORD>(key_length);
151 memcpy(key_blob->key_data, key, key_length); 151 memcpy(key_blob->key_data, key, key_length);
152 152
153 if (!CryptImportKey(plat_->provider_, &key_blob_storage[0], 153 if (!CryptImportKey(plat_->provider_, &key_blob_storage[0],
154 (DWORD)key_blob_storage.size(), 0, 154 (DWORD)key_blob_storage.size(), 0,
155 CRYPT_IPSEC_HMAC_KEY, plat_->key_.receive())) { 155 CRYPT_IPSEC_HMAC_KEY, plat_->key_.receive())) {
156 NOTREACHED(); 156 NOTREACHED();
157 return false; 157 return false;
158 } 158 }
159 159
160 // Destroy the copy of the key. 160 // Destroy the copy of the key.
161 SecureZeroMemory(key_blob->key_data, key_length); 161 SecureZeroMemory(key_blob->key_data, key_length);
162 162
163 return true; 163 return true;
164 } 164 }
165 165
166 HMAC::~HMAC() { 166 HMAC::~HMAC() {
167 } 167 }
168 168
169 bool HMAC::Sign(const base::StringPiece& data, 169 bool HMAC::Sign(const base::StringPiece& data,
170 unsigned char* digest, 170 unsigned char* digest,
171 int digest_length) const { 171 size_t digest_length) const {
172 if (hash_alg_ == SHA256) { 172 if (hash_alg_ == SHA256) {
173 if (plat_->raw_key_.empty()) 173 if (plat_->raw_key_.empty())
174 return false; 174 return false;
175 ComputeHMACSHA256(&plat_->raw_key_[0], plat_->raw_key_.size(), 175 ComputeHMACSHA256(&plat_->raw_key_[0], plat_->raw_key_.size(),
176 reinterpret_cast<const unsigned char*>(data.data()), 176 reinterpret_cast<const unsigned char*>(data.data()),
177 data.size(), digest, digest_length); 177 data.size(), digest, digest_length);
178 return true; 178 return true;
179 } 179 }
180 180
181 if (!plat_->provider_ || !plat_->key_) 181 if (!plat_->provider_ || !plat_->key_)
(...skipping 13 matching lines...) Expand all
195 memset(&hmac_info, 0, sizeof(hmac_info)); 195 memset(&hmac_info, 0, sizeof(hmac_info));
196 hmac_info.HashAlgid = CALG_SHA1; 196 hmac_info.HashAlgid = CALG_SHA1;
197 if (!CryptSetHashParam(hash, HP_HMAC_INFO, 197 if (!CryptSetHashParam(hash, HP_HMAC_INFO,
198 reinterpret_cast<BYTE*>(&hmac_info), 0)) 198 reinterpret_cast<BYTE*>(&hmac_info), 0))
199 return false; 199 return false;
200 200
201 if (!CryptHashData(hash, reinterpret_cast<const BYTE*>(data.data()), 201 if (!CryptHashData(hash, reinterpret_cast<const BYTE*>(data.data()),
202 static_cast<DWORD>(data.size()), 0)) 202 static_cast<DWORD>(data.size()), 0))
203 return false; 203 return false;
204 204
205 DWORD sha1_size = digest_length; 205 DWORD sha1_size = static_cast<DWORD>(digest_length);
206 return !!CryptGetHashParam(hash, HP_HASHVAL, digest, &sha1_size, 0); 206 return !!CryptGetHashParam(hash, HP_HASHVAL, digest, &sha1_size, 0);
207 } 207 }
208 208
209 } // namespace crypto 209 } // namespace crypto
OLDNEW
« crypto/hmac_openssl.cc ('K') | « crypto/hmac_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698