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

Side by Side Diff: chrome/browser/chromeos/platform_keys/platform_keys_nss.cc

Issue 306433003: enterprise.platformKeys: Support the publicExponent parameter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months 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
OLDNEW
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 "chrome/browser/chromeos/platform_keys/platform_keys.h" 5 #include "chrome/browser/chromeos/platform_keys/platform_keys.h"
6 6
7 #include <cryptohi.h> 7 #include <cryptohi.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 FROM_HERE, 119 FROM_HERE,
120 base::Bind(&GetCertDatabaseOnIOThread, 120 base::Bind(&GetCertDatabaseOnIOThread,
121 profile->GetResourceContext(), 121 profile->GetResourceContext(),
122 callback, 122 callback,
123 state)); 123 state));
124 } 124 }
125 125
126 class GenerateRSAKeyState : public NSSOperationState { 126 class GenerateRSAKeyState : public NSSOperationState {
127 public: 127 public:
128 GenerateRSAKeyState(unsigned int modulus_length, 128 GenerateRSAKeyState(unsigned int modulus_length,
129 unsigned long public_exponent,
129 const GenerateKeyCallback& callback); 130 const GenerateKeyCallback& callback);
130 virtual ~GenerateRSAKeyState() {} 131 virtual ~GenerateRSAKeyState() {}
131 132
132 virtual void OnError(const tracked_objects::Location& from, 133 virtual void OnError(const tracked_objects::Location& from,
133 const std::string& error_message) OVERRIDE { 134 const std::string& error_message) OVERRIDE {
134 CallBack(from, std::string() /* no public key */, error_message); 135 CallBack(from, std::string() /* no public key */, error_message);
135 } 136 }
136 137
137 void CallBack(const tracked_objects::Location& from, 138 void CallBack(const tracked_objects::Location& from,
138 const std::string& public_key_spki_der, 139 const std::string& public_key_spki_der,
139 const std::string& error_message) { 140 const std::string& error_message) {
140 origin_task_runner_->PostTask( 141 origin_task_runner_->PostTask(
141 from, base::Bind(callback_, public_key_spki_der, error_message)); 142 from, base::Bind(callback_, public_key_spki_der, error_message));
142 } 143 }
143 144
144 unsigned int modulus_length_; 145 const unsigned int modulus_length_;
146 const long public_exponent_;
145 147
146 private: 148 private:
147 // Must be called on origin thread, use CallBack() therefore. 149 // Must be called on origin thread, use CallBack() therefore.
148 GenerateKeyCallback callback_; 150 GenerateKeyCallback callback_;
149 }; 151 };
150 152
151 class SignState : public NSSOperationState { 153 class SignState : public NSSOperationState {
152 public: 154 public:
153 SignState(const std::string& public_key, 155 SignState(const std::string& public_key,
154 const std::string& data, 156 const std::string& data,
155 const SignCallback& callback); 157 const SignCallback& callback);
156 virtual ~SignState() {} 158 virtual ~SignState() {}
157 159
158 virtual void OnError(const tracked_objects::Location& from, 160 virtual void OnError(const tracked_objects::Location& from,
159 const std::string& error_message) OVERRIDE { 161 const std::string& error_message) OVERRIDE {
160 CallBack(from, std::string() /* no signature */, error_message); 162 CallBack(from, std::string() /* no signature */, error_message);
161 } 163 }
162 164
163 void CallBack(const tracked_objects::Location& from, 165 void CallBack(const tracked_objects::Location& from,
164 const std::string& signature, 166 const std::string& signature,
165 const std::string& error_message) { 167 const std::string& error_message) {
166 origin_task_runner_->PostTask( 168 origin_task_runner_->PostTask(
167 from, base::Bind(callback_, signature, error_message)); 169 from, base::Bind(callback_, signature, error_message));
168 } 170 }
169 171
170 std::string public_key_; 172 const std::string public_key_;
171 std::string data_; 173 const std::string data_;
172 174
173 private: 175 private:
174 // Must be called on origin thread, use CallBack() therefore. 176 // Must be called on origin thread, use CallBack() therefore.
175 SignCallback callback_; 177 SignCallback callback_;
176 }; 178 };
177 179
178 class GetCertificatesState : public NSSOperationState { 180 class GetCertificatesState : public NSSOperationState {
179 public: 181 public:
180 explicit GetCertificatesState(const GetCertificatesCallback& callback); 182 explicit GetCertificatesState(const GetCertificatesCallback& callback);
181 virtual ~GetCertificatesState() {} 183 virtual ~GetCertificatesState() {}
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 private: 247 private:
246 // Must be called on origin thread, use CallBack() therefore. 248 // Must be called on origin thread, use CallBack() therefore.
247 RemoveCertificateCallback callback_; 249 RemoveCertificateCallback callback_;
248 }; 250 };
249 251
250 NSSOperationState::NSSOperationState() 252 NSSOperationState::NSSOperationState()
251 : origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) { 253 : origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
252 } 254 }
253 255
254 GenerateRSAKeyState::GenerateRSAKeyState(unsigned int modulus_length, 256 GenerateRSAKeyState::GenerateRSAKeyState(unsigned int modulus_length,
257 unsigned long public_exponent,
255 const GenerateKeyCallback& callback) 258 const GenerateKeyCallback& callback)
256 : modulus_length_(modulus_length), callback_(callback) { 259 : modulus_length_(modulus_length),
260 public_exponent_(public_exponent),
261 callback_(callback) {
257 } 262 }
258 263
259 SignState::SignState(const std::string& public_key, 264 SignState::SignState(const std::string& public_key,
260 const std::string& data, 265 const std::string& data,
261 const SignCallback& callback) 266 const SignCallback& callback)
262 : public_key_(public_key), data_(data), callback_(callback) { 267 : public_key_(public_key), data_(data), callback_(callback) {
263 } 268 }
264 269
265 GetCertificatesState::GetCertificatesState( 270 GetCertificatesState::GetCertificatesState(
266 const GetCertificatesCallback& callback) 271 const GetCertificatesCallback& callback)
267 : callback_(callback) { 272 : callback_(callback) {
268 } 273 }
269 274
270 ImportCertificateState::ImportCertificateState( 275 ImportCertificateState::ImportCertificateState(
271 scoped_refptr<net::X509Certificate> certificate, 276 scoped_refptr<net::X509Certificate> certificate,
272 const ImportCertificateCallback& callback) 277 const ImportCertificateCallback& callback)
273 : certificate_(certificate), callback_(callback) { 278 : certificate_(certificate), callback_(callback) {
274 } 279 }
275 280
276 RemoveCertificateState::RemoveCertificateState( 281 RemoveCertificateState::RemoveCertificateState(
277 scoped_refptr<net::X509Certificate> certificate, 282 scoped_refptr<net::X509Certificate> certificate,
278 const RemoveCertificateCallback& callback) 283 const RemoveCertificateCallback& callback)
279 : certificate_(certificate), callback_(callback) { 284 : certificate_(certificate), callback_(callback) {
280 } 285 }
281 286
282 // Does the actual key generation on a worker thread. Used by 287 // Does the actual key generation on a worker thread. Used by
283 // GenerateRSAKeyWithDB(). 288 // GenerateRSAKeyWithDB().
284 void GenerateRSAKeyOnWorkerThread(scoped_ptr<GenerateRSAKeyState> state) { 289 void GenerateRSAKeyOnWorkerThread(scoped_ptr<GenerateRSAKeyState> state) {
285 scoped_ptr<crypto::RSAPrivateKey> rsa_key( 290 scoped_ptr<crypto::RSAPrivateKey> rsa_key(
286 crypto::RSAPrivateKey::CreateSensitive(state->slot_.get(), 291 crypto::RSAPrivateKey::CreateSensitive(
287 state->modulus_length_)); 292 state->slot_.get(), state->modulus_length_, state->public_exponent_));
288 if (!rsa_key) { 293 if (!rsa_key) {
289 LOG(ERROR) << "Couldn't create key."; 294 LOG(ERROR) << "Couldn't create key.";
290 state->OnError(FROM_HERE, kErrorInternal); 295 state->OnError(FROM_HERE, kErrorInternal);
291 return; 296 return;
292 } 297 }
293 298
294 std::vector<uint8> public_key_spki_der; 299 std::vector<uint8> public_key_spki_der;
295 if (!rsa_key->ExportPublicKey(&public_key_spki_der)) { 300 if (!rsa_key->ExportPublicKey(&public_key_spki_der)) {
296 // TODO(pneubeck): Remove rsa_key from storage. 301 // TODO(pneubeck): Remove rsa_key from storage.
297 LOG(ERROR) << "Couldn't export public key."; 302 LOG(ERROR) << "Couldn't export public key.";
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 cert_db->DeleteCertAndKeyAsync( 468 cert_db->DeleteCertAndKeyAsync(
464 certificate, 469 certificate,
465 base::Bind( 470 base::Bind(
466 &DidRemoveCertificate, base::Passed(&state), certificate_found)); 471 &DidRemoveCertificate, base::Passed(&state), certificate_found));
467 } 472 }
468 473
469 } // namespace 474 } // namespace
470 475
471 void GenerateRSAKey(const std::string& token_id, 476 void GenerateRSAKey(const std::string& token_id,
472 unsigned int modulus_length, 477 unsigned int modulus_length,
478 unsigned long public_exponent,
473 const GenerateKeyCallback& callback, 479 const GenerateKeyCallback& callback,
474 Profile* profile) { 480 Profile* profile) {
475 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 481 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
476 scoped_ptr<GenerateRSAKeyState> state( 482 scoped_ptr<GenerateRSAKeyState> state(
477 new GenerateRSAKeyState(modulus_length, callback)); 483 new GenerateRSAKeyState(modulus_length, public_exponent, callback));
478 484
479 if (modulus_length > kMaxRSAModulusLength) { 485 if (modulus_length > kMaxRSAModulusLength) {
480 state->OnError(FROM_HERE, kErrorAlgorithmNotSupported); 486 state->OnError(FROM_HERE, kErrorAlgorithmNotSupported);
481 return; 487 return;
482 } 488 }
483 489
484 // Get the pointer to |state| before base::Passed releases |state|. 490 // Get the pointer to |state| before base::Passed releases |state|.
485 NSSOperationState* state_ptr = state.get(); 491 NSSOperationState* state_ptr = state.get();
486 GetCertDatabase(token_id, 492 GetCertDatabase(token_id,
487 base::Bind(&GenerateRSAKeyWithDB, base::Passed(&state)), 493 base::Bind(&GenerateRSAKeyWithDB, base::Passed(&state)),
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 // we would get more informative error messages. 560 // we would get more informative error messages.
555 GetCertDatabase(token_id, 561 GetCertDatabase(token_id,
556 base::Bind(&RemoveCertificateWithDB, base::Passed(&state)), 562 base::Bind(&RemoveCertificateWithDB, base::Passed(&state)),
557 profile, 563 profile,
558 state_ptr); 564 state_ptr);
559 } 565 }
560 566
561 } // namespace platform_keys 567 } // namespace platform_keys
562 568
563 } // namespace chromeos 569 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698