| OLD | NEW |
| 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 #include <openssl/ec.h> | 7 #include <openssl/ec.h> |
| 8 #include <openssl/evp.h> | 8 #include <openssl/evp.h> |
| 9 #include <openssl/pkcs12.h> | 9 #include <openssl/pkcs12.h> |
| 10 #include <openssl/x509.h> | 10 #include <openssl/x509.h> |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 | 94 |
| 95 scoped_ptr<ECPrivateKey> result(new ECPrivateKey()); | 95 scoped_ptr<ECPrivateKey> result(new ECPrivateKey()); |
| 96 result->key_ = EVP_PKEY_new(); | 96 result->key_ = EVP_PKEY_new(); |
| 97 if (!result->key_ || !EVP_PKEY_set1_EC_KEY(result->key_, ec_key.get())) | 97 if (!result->key_ || !EVP_PKEY_set1_EC_KEY(result->key_, ec_key.get())) |
| 98 return NULL; | 98 return NULL; |
| 99 | 99 |
| 100 return result.release(); | 100 return result.release(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 // static | 103 // static |
| 104 ECPrivateKey* ECPrivateKey::CreateSensitive() { | |
| 105 NOTIMPLEMENTED(); | |
| 106 return NULL; | |
| 107 } | |
| 108 | |
| 109 // static | |
| 110 ECPrivateKey* ECPrivateKey::CreateFromEncryptedPrivateKeyInfo( | 104 ECPrivateKey* ECPrivateKey::CreateFromEncryptedPrivateKeyInfo( |
| 111 const std::string& password, | 105 const std::string& password, |
| 112 const std::vector<uint8>& encrypted_private_key_info, | 106 const std::vector<uint8>& encrypted_private_key_info, |
| 113 const std::vector<uint8>& subject_public_key_info) { | 107 const std::vector<uint8>& subject_public_key_info) { |
| 114 // NOTE: The |subject_public_key_info| can be ignored here, it is only | 108 // NOTE: The |subject_public_key_info| can be ignored here, it is only |
| 115 // useful for the NSS implementation (which uses the public key's SHA1 | 109 // useful for the NSS implementation (which uses the public key's SHA1 |
| 116 // as a lookup key when storing the private one in its store). | 110 // as a lookup key when storing the private one in its store). |
| 117 if (encrypted_private_key_info.empty()) | 111 if (encrypted_private_key_info.empty()) |
| 118 return NULL; | 112 return NULL; |
| 119 | 113 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 143 | 137 |
| 144 // Create a new EVP_PKEY for it. | 138 // Create a new EVP_PKEY for it. |
| 145 scoped_ptr<ECPrivateKey> result(new ECPrivateKey); | 139 scoped_ptr<ECPrivateKey> result(new ECPrivateKey); |
| 146 result->key_ = EVP_PKCS82PKEY(p8_decrypted.get()); | 140 result->key_ = EVP_PKCS82PKEY(p8_decrypted.get()); |
| 147 if (!result->key_) | 141 if (!result->key_) |
| 148 return NULL; | 142 return NULL; |
| 149 | 143 |
| 150 return result.release(); | 144 return result.release(); |
| 151 } | 145 } |
| 152 | 146 |
| 153 // static | |
| 154 ECPrivateKey* ECPrivateKey::CreateSensitiveFromEncryptedPrivateKeyInfo( | |
| 155 const std::string& password, | |
| 156 const std::vector<uint8>& encrypted_private_key_info, | |
| 157 const std::vector<uint8>& subject_public_key_info) { | |
| 158 NOTIMPLEMENTED(); | |
| 159 return NULL; | |
| 160 } | |
| 161 | |
| 162 bool ECPrivateKey::ExportEncryptedPrivateKey( | 147 bool ECPrivateKey::ExportEncryptedPrivateKey( |
| 163 const std::string& password, | 148 const std::string& password, |
| 164 int iterations, | 149 int iterations, |
| 165 std::vector<uint8>* output) { | 150 std::vector<uint8>* output) { |
| 166 OpenSSLErrStackTracer err_tracer(FROM_HERE); | 151 OpenSSLErrStackTracer err_tracer(FROM_HERE); |
| 167 // Convert into a PKCS#8 object. | 152 // Convert into a PKCS#8 object. |
| 168 ScopedOpenSSL<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free> pkcs8( | 153 ScopedOpenSSL<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free> pkcs8( |
| 169 EVP_PKEY2PKCS8(key_)); | 154 EVP_PKEY2PKCS8(key_)); |
| 170 if (!pkcs8.get()) | 155 if (!pkcs8.get()) |
| 171 return false; | 156 return false; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 OpenSSLErrStackTracer err_tracer(FROM_HERE); | 195 OpenSSLErrStackTracer err_tracer(FROM_HERE); |
| 211 ScopedOpenSSL<EC_KEY, EC_KEY_free> ec_key(EVP_PKEY_get1_EC_KEY(key_)); | 196 ScopedOpenSSL<EC_KEY, EC_KEY_free> ec_key(EVP_PKEY_get1_EC_KEY(key_)); |
| 212 return ExportKey(ec_key.get(), | 197 return ExportKey(ec_key.get(), |
| 213 reinterpret_cast<ExportDataFunction>(i2d_ECParameters), | 198 reinterpret_cast<ExportDataFunction>(i2d_ECParameters), |
| 214 output); | 199 output); |
| 215 } | 200 } |
| 216 | 201 |
| 217 ECPrivateKey::ECPrivateKey() : key_(NULL) {} | 202 ECPrivateKey::ECPrivateKey() : key_(NULL) {} |
| 218 | 203 |
| 219 } // namespace crypto | 204 } // namespace crypto |
| OLD | NEW |