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

Side by Side Diff: crypto/ec_private_key_nss.cc

Issue 10700099: NSS Channel ID: don't check ECC support on every socket creation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move/update the comment Created 8 years, 5 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 (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/ec_private_key.h" 5 #include "crypto/ec_private_key.h"
6 6
7 extern "C" { 7 extern "C" {
8 // Work around NSS missing SEC_BEGIN_PROTOS in secmodt.h. This must come before 8 // Work around NSS missing SEC_BEGIN_PROTOS in secmodt.h. This must come before
9 // other NSS headers. 9 // other NSS headers.
10 #include <secmodt.h> 10 #include <secmodt.h>
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 // static 107 // static
108 bool ECPrivateKey::ImportFromEncryptedPrivateKeyInfo( 108 bool ECPrivateKey::ImportFromEncryptedPrivateKeyInfo(
109 const std::string& password, 109 const std::string& password,
110 const uint8* encrypted_private_key_info, 110 const uint8* encrypted_private_key_info,
111 size_t encrypted_private_key_info_len, 111 size_t encrypted_private_key_info_len,
112 CERTSubjectPublicKeyInfo* decoded_spki, 112 CERTSubjectPublicKeyInfo* decoded_spki,
113 bool permanent, 113 bool permanent,
114 bool sensitive, 114 bool sensitive,
115 SECKEYPrivateKey** key, 115 SECKEYPrivateKey** key,
116 SECKEYPublicKey** public_key) { 116 SECKEYPublicKey** public_key) {
117 ScopedPK11Slot slot(GetPublicNSSKeySlot()); 117 ScopedPK11Slot slot(GetKeySlot());
118 if (!slot.get()) 118 if (!slot.get())
119 return false; 119 return false;
120 120
121 *public_key = SECKEY_ExtractPublicKey(decoded_spki); 121 *public_key = SECKEY_ExtractPublicKey(decoded_spki);
122 122
123 if (!*public_key) { 123 if (!*public_key) {
124 DLOG(ERROR) << "SECKEY_ExtractPublicKey: " << PORT_GetError(); 124 DLOG(ERROR) << "SECKEY_ExtractPublicKey: " << PORT_GetError();
125 return false; 125 return false;
126 } 126 }
127 127
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 DLOG(ERROR) << "ImportEncryptedECPrivateKeyInfoAndReturnKey: " 167 DLOG(ERROR) << "ImportEncryptedECPrivateKeyInfoAndReturnKey: "
168 << PORT_GetError(); 168 << PORT_GetError();
169 SECKEY_DestroyPublicKey(*public_key); 169 SECKEY_DestroyPublicKey(*public_key);
170 *public_key = NULL; 170 *public_key = NULL;
171 return false; 171 return false;
172 } 172 }
173 173
174 return true; 174 return true;
175 } 175 }
176 176
177 // static
178 PK11SlotInfo* ECPrivateKey::GetKeySlot() {
179 return GetPublicNSSKeySlot();
180 }
181
177 bool ECPrivateKey::ExportEncryptedPrivateKey( 182 bool ECPrivateKey::ExportEncryptedPrivateKey(
178 const std::string& password, 183 const std::string& password,
179 int iterations, 184 int iterations,
180 std::vector<uint8>* output) { 185 std::vector<uint8>* output) {
181 // We export as an EncryptedPrivateKeyInfo bundle instead of a plain PKCS #8 186 // We export as an EncryptedPrivateKeyInfo bundle instead of a plain PKCS #8
182 // PrivateKeyInfo because PK11_ImportDERPrivateKeyInfoAndReturnKey doesn't 187 // PrivateKeyInfo because PK11_ImportDERPrivateKeyInfoAndReturnKey doesn't
183 // support EC keys. 188 // support EC keys.
184 // https://bugzilla.mozilla.org/show_bug.cgi?id=327773 189 // https://bugzilla.mozilla.org/show_bug.cgi?id=327773
185 SECItem password_item = { 190 SECItem password_item = {
186 siBuffer, 191 siBuffer,
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 245
241 ECPrivateKey::ECPrivateKey() : key_(NULL), public_key_(NULL) {} 246 ECPrivateKey::ECPrivateKey() : key_(NULL), public_key_(NULL) {}
242 247
243 // static 248 // static
244 ECPrivateKey* ECPrivateKey::CreateWithParams(bool permanent, 249 ECPrivateKey* ECPrivateKey::CreateWithParams(bool permanent,
245 bool sensitive) { 250 bool sensitive) {
246 EnsureNSSInit(); 251 EnsureNSSInit();
247 252
248 scoped_ptr<ECPrivateKey> result(new ECPrivateKey); 253 scoped_ptr<ECPrivateKey> result(new ECPrivateKey);
249 254
250 ScopedPK11Slot slot(GetPrivateNSSKeySlot()); 255 ScopedPK11Slot slot(GetKeySlot());
251 if (!slot.get()) 256 if (!slot.get())
252 return NULL; 257 return NULL;
253 258
254 SECOidData* oid_data = SECOID_FindOIDByTag(SEC_OID_SECG_EC_SECP256R1); 259 SECOidData* oid_data = SECOID_FindOIDByTag(SEC_OID_SECG_EC_SECP256R1);
255 if (!oid_data) { 260 if (!oid_data) {
256 DLOG(ERROR) << "SECOID_FindOIDByTag: " << PORT_GetError(); 261 DLOG(ERROR) << "SECOID_FindOIDByTag: " << PORT_GetError();
257 return NULL; 262 return NULL;
258 } 263 }
259 264
260 // SECKEYECParams is a SECItem containing the DER encoded ASN.1 ECParameters 265 // SECKEYECParams is a SECItem containing the DER encoded ASN.1 ECParameters
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 327
323 SECKEY_DestroySubjectPublicKeyInfo(decoded_spki); 328 SECKEY_DestroySubjectPublicKeyInfo(decoded_spki);
324 329
325 if (success) 330 if (success)
326 return result.release(); 331 return result.release();
327 332
328 return NULL; 333 return NULL;
329 } 334 }
330 335
331 } // namespace crypto 336 } // namespace crypto
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698