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

Side by Side Diff: crypto/rsa_private_key_win.cc

Issue 8727014: Implement RSAPrivateKey::Copy() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/rsa_private_key.h" 5 #include "crypto/rsa_private_key.h"
6 6
7 #include <list> 7 #include <list>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 RSAPrivateKey::RSAPrivateKey() : provider_(NULL), key_(NULL) {} 128 RSAPrivateKey::RSAPrivateKey() : provider_(NULL), key_(NULL) {}
129 129
130 RSAPrivateKey::~RSAPrivateKey() {} 130 RSAPrivateKey::~RSAPrivateKey() {}
131 131
132 bool RSAPrivateKey::InitProvider() { 132 bool RSAPrivateKey::InitProvider() {
133 return FALSE != CryptAcquireContext(provider_.receive(), NULL, NULL, 133 return FALSE != CryptAcquireContext(provider_.receive(), NULL, NULL,
134 PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); 134 PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
135 } 135 }
136 136
137 RSAPrivateKey* RSAPrivateKey::Copy() const {
138 scoped_ptr<RSAPrivateKey> copy(new RSAPrivateKey());
139 if (!copy->InitProvider())
wtc 2011/11/30 00:58:10 Instead of calling copy->InitProvider(), I think i
Sergey Ulanov 2011/11/30 22:30:03 Done.
140 return NULL;
141 if (!CryptDuplicateKey(key_.get(), NULL, 0, copy->key_.receive()))
142 return NULL;
143 return copy.release();
144 }
145
137 bool RSAPrivateKey::ExportPrivateKey(std::vector<uint8>* output) { 146 bool RSAPrivateKey::ExportPrivateKey(std::vector<uint8>* output) {
138 // Export the key 147 // Export the key
139 DWORD blob_length = 0; 148 DWORD blob_length = 0;
140 if (!CryptExportKey(key_, 0, PRIVATEKEYBLOB, 0, NULL, &blob_length)) { 149 if (!CryptExportKey(key_, 0, PRIVATEKEYBLOB, 0, NULL, &blob_length)) {
141 NOTREACHED(); 150 NOTREACHED();
142 return false; 151 return false;
143 } 152 }
144 153
145 scoped_array<uint8> blob(new uint8[blob_length]); 154 scoped_array<uint8> blob(new uint8[blob_length]);
146 if (!CryptExportKey(key_, 0, PRIVATEKEYBLOB, 0, blob.get(), &blob_length)) { 155 if (!CryptExportKey(key_, 0, PRIVATEKEYBLOB, 0, blob.get(), &blob_length)) {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 &encoded_length)) { 229 &encoded_length)) {
221 NOTREACHED(); 230 NOTREACHED();
222 return false; 231 return false;
223 } 232 }
224 233
225 output->assign(encoded.get(), encoded.get() + encoded_length); 234 output->assign(encoded.get(), encoded.get() + encoded_length);
226 return true; 235 return true;
227 } 236 }
228 237
229 } // namespace crypto 238 } // namespace crypto
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698