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

Side by Side Diff: base/crypto/rsa_private_key_nss.cc

Issue 6085015: Order function definitions in base/ according to the header. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: lrn2merge Created 9 years, 11 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
« no previous file with comments | « base/crypto/rsa_private_key.cc ('k') | base/crypto/signature_creator_nss.cc » ('j') | 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "base/crypto/rsa_private_key.h" 5 #include "base/crypto/rsa_private_key.h"
6 6
7 #include <cryptohi.h> 7 #include <cryptohi.h>
8 #include <keyhi.h> 8 #include <keyhi.h>
9 #include <pk11pub.h> 9 #include <pk11pub.h>
10 10
(...skipping 23 matching lines...) Expand all
34 34
35 output->assign(item.data, item.data + item.len); 35 output->assign(item.data, item.data + item.len);
36 SECITEM_FreeItem(&item, PR_FALSE); 36 SECITEM_FreeItem(&item, PR_FALSE);
37 return true; 37 return true;
38 } 38 }
39 39
40 } // namespace 40 } // namespace
41 41
42 namespace base { 42 namespace base {
43 43
44 // static 44 RSAPrivateKey::~RSAPrivateKey() {
45 RSAPrivateKey* RSAPrivateKey::CreateWithParams(uint16 num_bits, 45 if (key_)
46 bool permanent, 46 SECKEY_DestroyPrivateKey(key_);
47 bool sensitive) { 47 if (public_key_)
48 base::EnsureNSSInit(); 48 SECKEY_DestroyPublicKey(public_key_);
49
50 scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey);
51
52 PK11SlotInfo *slot = GetDefaultNSSKeySlot();
53 if (!slot)
54 return NULL;
55
56 PK11RSAGenParams param;
57 param.keySizeInBits = num_bits;
58 param.pe = 65537L;
59 result->key_ = PK11_GenerateKeyPair(slot, CKM_RSA_PKCS_KEY_PAIR_GEN, &param,
60 &result->public_key_, permanent, sensitive, NULL);
61 PK11_FreeSlot(slot);
62 if (!result->key_)
63 return NULL;
64
65 return result.release();
66 } 49 }
67 50
68 // static 51 // static
69 RSAPrivateKey* RSAPrivateKey::Create(uint16 num_bits) { 52 RSAPrivateKey* RSAPrivateKey::Create(uint16 num_bits) {
70 return CreateWithParams(num_bits, 53 return CreateWithParams(num_bits,
71 PR_FALSE /* not permanent */, 54 PR_FALSE /* not permanent */,
72 PR_FALSE /* not sensitive */); 55 PR_FALSE /* not sensitive */);
73 } 56 }
74 57
75 // static 58 // static
76 RSAPrivateKey* RSAPrivateKey::CreateSensitive(uint16 num_bits) { 59 RSAPrivateKey* RSAPrivateKey::CreateSensitive(uint16 num_bits) {
77 return CreateWithParams(num_bits, 60 return CreateWithParams(num_bits,
78 PR_TRUE /* permanent */, 61 PR_TRUE /* permanent */,
79 PR_TRUE /* sensitive */); 62 PR_TRUE /* sensitive */);
80 } 63 }
81 64
82 // static 65 // static
83 RSAPrivateKey* RSAPrivateKey::CreateFromPrivateKeyInfoWithParams(
84 const std::vector<uint8>& input, bool permanent, bool sensitive) {
85 // This method currently leaks some memory.
86 // See http://crbug.com/34742.
87 ANNOTATE_SCOPED_MEMORY_LEAK;
88 base::EnsureNSSInit();
89
90 scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey);
91
92 PK11SlotInfo *slot = GetDefaultNSSKeySlot();
93 if (!slot)
94 return NULL;
95
96 SECItem der_private_key_info;
97 der_private_key_info.data = const_cast<unsigned char*>(&input.front());
98 der_private_key_info.len = input.size();
99 SECStatus rv = PK11_ImportDERPrivateKeyInfoAndReturnKey(slot,
100 &der_private_key_info, NULL, NULL, permanent, sensitive,
101 KU_DIGITAL_SIGNATURE, &result->key_, NULL);
102 PK11_FreeSlot(slot);
103 if (rv != SECSuccess) {
104 NOTREACHED();
105 return NULL;
106 }
107
108 result->public_key_ = SECKEY_ConvertToPublicKey(result->key_);
109 if (!result->public_key_) {
110 NOTREACHED();
111 return NULL;
112 }
113
114 return result.release();
115 }
116
117 // static
118 RSAPrivateKey* RSAPrivateKey::CreateFromPrivateKeyInfo( 66 RSAPrivateKey* RSAPrivateKey::CreateFromPrivateKeyInfo(
119 const std::vector<uint8>& input) { 67 const std::vector<uint8>& input) {
120 return CreateFromPrivateKeyInfoWithParams(input, 68 return CreateFromPrivateKeyInfoWithParams(input,
121 PR_FALSE /* not permanent */, 69 PR_FALSE /* not permanent */,
122 PR_FALSE /* not sensitive */); 70 PR_FALSE /* not sensitive */);
123 } 71 }
124 72
125 // static 73 // static
126 RSAPrivateKey* RSAPrivateKey::CreateSensitiveFromPrivateKeyInfo( 74 RSAPrivateKey* RSAPrivateKey::CreateSensitiveFromPrivateKeyInfo(
127 const std::vector<uint8>& input) { 75 const std::vector<uint8>& input) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 PK11_FreeSlot(slot); 134 PK11_FreeSlot(slot);
187 SECITEM_FreeItem(ck_id, PR_TRUE); 135 SECITEM_FreeItem(ck_id, PR_TRUE);
188 136
189 // If we didn't find it, that's ok. 137 // If we didn't find it, that's ok.
190 if (!result->key_) 138 if (!result->key_)
191 return NULL; 139 return NULL;
192 140
193 return result.release(); 141 return result.release();
194 } 142 }
195 143
196 RSAPrivateKey::RSAPrivateKey() : key_(NULL), public_key_(NULL) {
197 EnsureNSSInit();
198 }
199
200 RSAPrivateKey::~RSAPrivateKey() {
201 if (key_)
202 SECKEY_DestroyPrivateKey(key_);
203 if (public_key_)
204 SECKEY_DestroyPublicKey(public_key_);
205 }
206 144
207 bool RSAPrivateKey::ExportPrivateKey(std::vector<uint8>* output) { 145 bool RSAPrivateKey::ExportPrivateKey(std::vector<uint8>* output) {
208 PrivateKeyInfoCodec private_key_info(true); 146 PrivateKeyInfoCodec private_key_info(true);
209 147
210 // Manually read the component attributes of the private key and build up 148 // Manually read the component attributes of the private key and build up
211 // the PrivateKeyInfo. 149 // the PrivateKeyInfo.
212 if (!ReadAttribute(key_, CKA_MODULUS, private_key_info.modulus()) || 150 if (!ReadAttribute(key_, CKA_MODULUS, private_key_info.modulus()) ||
213 !ReadAttribute(key_, CKA_PUBLIC_EXPONENT, 151 !ReadAttribute(key_, CKA_PUBLIC_EXPONENT,
214 private_key_info.public_exponent()) || 152 private_key_info.public_exponent()) ||
215 !ReadAttribute(key_, CKA_PRIVATE_EXPONENT, 153 !ReadAttribute(key_, CKA_PRIVATE_EXPONENT,
(...skipping 17 matching lines...) Expand all
233 return false; 171 return false;
234 } 172 }
235 173
236 for (size_t i = 0; i < der_pubkey->len; ++i) 174 for (size_t i = 0; i < der_pubkey->len; ++i)
237 output->push_back(der_pubkey->data[i]); 175 output->push_back(der_pubkey->data[i]);
238 176
239 SECITEM_FreeItem(der_pubkey, PR_TRUE); 177 SECITEM_FreeItem(der_pubkey, PR_TRUE);
240 return true; 178 return true;
241 } 179 }
242 180
181 RSAPrivateKey::RSAPrivateKey() : key_(NULL), public_key_(NULL) {
182 EnsureNSSInit();
183 }
184
185 // static
186 RSAPrivateKey* RSAPrivateKey::CreateWithParams(uint16 num_bits,
187 bool permanent,
188 bool sensitive) {
189 base::EnsureNSSInit();
190
191 scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey);
192
193 PK11SlotInfo *slot = GetDefaultNSSKeySlot();
194 if (!slot)
195 return NULL;
196
197 PK11RSAGenParams param;
198 param.keySizeInBits = num_bits;
199 param.pe = 65537L;
200 result->key_ = PK11_GenerateKeyPair(slot, CKM_RSA_PKCS_KEY_PAIR_GEN, &param,
201 &result->public_key_, permanent, sensitive, NULL);
202 PK11_FreeSlot(slot);
203 if (!result->key_)
204 return NULL;
205
206 return result.release();
207 }
208
209 // static
210 RSAPrivateKey* RSAPrivateKey::CreateFromPrivateKeyInfoWithParams(
211 const std::vector<uint8>& input, bool permanent, bool sensitive) {
212 // This method currently leaks some memory.
213 // See http://crbug.com/34742.
214 ANNOTATE_SCOPED_MEMORY_LEAK;
215 base::EnsureNSSInit();
216
217 scoped_ptr<RSAPrivateKey> result(new RSAPrivateKey);
218
219 PK11SlotInfo *slot = GetDefaultNSSKeySlot();
220 if (!slot)
221 return NULL;
222
223 SECItem der_private_key_info;
224 der_private_key_info.data = const_cast<unsigned char*>(&input.front());
225 der_private_key_info.len = input.size();
226 SECStatus rv = PK11_ImportDERPrivateKeyInfoAndReturnKey(slot,
227 &der_private_key_info, NULL, NULL, permanent, sensitive,
228 KU_DIGITAL_SIGNATURE, &result->key_, NULL);
229 PK11_FreeSlot(slot);
230 if (rv != SECSuccess) {
231 NOTREACHED();
232 return NULL;
233 }
234
235 result->public_key_ = SECKEY_ConvertToPublicKey(result->key_);
236 if (!result->public_key_) {
237 NOTREACHED();
238 return NULL;
239 }
240
241 return result.release();
242 }
243
243 } // namespace base 244 } // namespace base
OLDNEW
« no previous file with comments | « base/crypto/rsa_private_key.cc ('k') | base/crypto/signature_creator_nss.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698