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

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

Issue 875373002: First implementation of chrome.platformKeys. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cert_idl
Patch Set: Fix .gn file. Created 5 years, 10 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
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_service.h" 5 #include "chrome/browser/chromeos/platform_keys/platform_keys_service.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/chromeos/platform_keys/platform_keys.h" 10 #include "chrome/browser/chromeos/platform_keys/platform_keys.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 #include "extensions/browser/state_store.h" 12 #include "extensions/browser/state_store.h"
13 #include "net/cert/x509_certificate.h"
13 14
14 using content::BrowserThread; 15 using content::BrowserThread;
15 16
16 namespace chromeos { 17 namespace chromeos {
17 18
18 namespace { 19 namespace {
19 20
20 const char kErrorKeyNotAllowedForSigning[] = 21 const char kErrorKeyNotAllowedForSigning[] =
21 "This key is not allowed for signing. Either it was used for signing " 22 "This key is not allowed for signing. Either it was used for signing "
22 "before or it was not correctly generated."; 23 "before or it was not correctly generated.";
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 extensions::StateStore* state_store) 68 extensions::StateStore* state_store)
68 : browser_context_(browser_context), 69 : browser_context_(browser_context),
69 state_store_(state_store), 70 state_store_(state_store),
70 weak_factory_(this) { 71 weak_factory_(this) {
71 DCHECK(state_store); 72 DCHECK(state_store);
72 } 73 }
73 74
74 PlatformKeysService::~PlatformKeysService() { 75 PlatformKeysService::~PlatformKeysService() {
75 } 76 }
76 77
78 void PlatformKeysService::DisablePermissionCheckForTesting() {
79 permission_check_enabled_ = false;
80 }
81
77 void PlatformKeysService::GenerateRSAKey(const std::string& token_id, 82 void PlatformKeysService::GenerateRSAKey(const std::string& token_id,
78 unsigned int modulus_length, 83 unsigned int modulus_length,
79 const std::string& extension_id, 84 const std::string& extension_id,
80 const GenerateKeyCallback& callback) { 85 const GenerateKeyCallback& callback) {
81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 86 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
82 87
83 platform_keys::subtle::GenerateRSAKey( 88 platform_keys::subtle::GenerateRSAKey(
84 token_id, 89 token_id,
85 modulus_length, 90 modulus_length,
86 base::Bind(&PlatformKeysService::GenerateRSAKeyCallback, 91 base::Bind(&PlatformKeysService::GenerateRSAKeyCallback,
(...skipping 14 matching lines...) Expand all
101 public_key_spki_der, 106 public_key_spki_der,
102 base::Bind(&CheckValidityAndSign, 107 base::Bind(&CheckValidityAndSign,
103 token_id, 108 token_id,
104 public_key_spki_der, 109 public_key_spki_der,
105 hash_algorithm, 110 hash_algorithm,
106 data, 111 data,
107 callback, 112 callback,
108 browser_context_)); 113 browser_context_));
109 } 114 }
110 115
116 void PlatformKeysService::SelectClientCertificates(
117 const platform_keys::ClientCertificateRequest& request,
118 const std::string& extension_id,
119 const SelectCertificatesCallback& callback) {
120 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
121
122 platform_keys::subtle::SelectClientCertificates(
123 request,
124 base::Bind(&PlatformKeysService::SelectClientCertificatesCallback,
125 weak_factory_.GetWeakPtr(), extension_id, callback),
126 browser_context_);
127 }
128
111 void PlatformKeysService::RegisterPublicKey( 129 void PlatformKeysService::RegisterPublicKey(
112 const std::string& extension_id, 130 const std::string& extension_id,
113 const std::string& public_key_spki_der, 131 const std::string& public_key_spki_der,
114 const base::Closure& callback) { 132 const base::Closure& callback) {
115 GetPlatformKeysOfExtension( 133 GetPlatformKeysOfExtension(
116 extension_id, 134 extension_id,
117 base::Bind(&PlatformKeysService::RegisterPublicKeyGotPlatformKeys, 135 base::Bind(&PlatformKeysService::RegisterPublicKeyGotPlatformKeys,
118 weak_factory_.GetWeakPtr(), 136 weak_factory_.GetWeakPtr(),
119 extension_id, 137 extension_id,
120 public_key_spki_der, 138 public_key_spki_der,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 const std::string& error_message) { 174 const std::string& error_message) {
157 if (!error_message.empty()) { 175 if (!error_message.empty()) {
158 callback.Run(std::string() /* no public key */, error_message); 176 callback.Run(std::string() /* no public key */, error_message);
159 return; 177 return;
160 } 178 }
161 base::Closure wrapped_callback( 179 base::Closure wrapped_callback(
162 base::Bind(&RunGenerateKeyCallback, callback, public_key_spki_der)); 180 base::Bind(&RunGenerateKeyCallback, callback, public_key_spki_der));
163 RegisterPublicKey(extension_id, public_key_spki_der, wrapped_callback); 181 RegisterPublicKey(extension_id, public_key_spki_der, wrapped_callback);
164 } 182 }
165 183
184 void PlatformKeysService::SelectClientCertificatesCallback(
185 const std::string& extension_id,
186 const SelectCertificatesCallback& callback,
187 scoped_ptr<net::CertificateList> matches,
188 const std::string& error_message) {
189 if (permission_check_enabled_)
190 matches->clear();
191
192 // TODO(pneubeck): Remove all certs that the extension doesn't have access to.
193 callback.Run(matches.Pass(), error_message);
194 }
195
166 void PlatformKeysService::RegisterPublicKeyGotPlatformKeys( 196 void PlatformKeysService::RegisterPublicKeyGotPlatformKeys(
167 const std::string& extension_id, 197 const std::string& extension_id,
168 const std::string& public_key_spki_der, 198 const std::string& public_key_spki_der,
169 const base::Closure& callback, 199 const base::Closure& callback,
170 scoped_ptr<base::ListValue> platform_keys) { 200 scoped_ptr<base::ListValue> platform_keys) {
171 scoped_ptr<base::StringValue> key_value( 201 scoped_ptr<base::StringValue> key_value(
172 GetPublicKeyValue(public_key_spki_der)); 202 GetPublicKeyValue(public_key_spki_der));
173 203
174 DCHECK(platform_keys->end() == platform_keys->Find(*key_value)) 204 DCHECK(platform_keys->end() == platform_keys->Find(*key_value))
175 << "Keys are assumed to be generated and not to be registered multiple " 205 << "Keys are assumed to be generated and not to be registered multiple "
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 241
212 keys = new base::ListValue; 242 keys = new base::ListValue;
213 value.reset(keys); 243 value.reset(keys);
214 } 244 }
215 245
216 ignore_result(value.release()); 246 ignore_result(value.release());
217 callback.Run(make_scoped_ptr(keys)); 247 callback.Run(make_scoped_ptr(keys));
218 } 248 }
219 249
220 } // namespace chromeos 250 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/platform_keys/platform_keys_service.h ('k') | chrome/browser/extensions/api/platform_keys/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698