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

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

Issue 6683060: Private API for extensions like ssh-client that need access to TCP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sigh-nedness Created 9 years, 9 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) 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 "base/crypto/symmetric_key.h" 5 #include "base/crypto/symmetric_key.h"
6 6
7 #include <openssl/evp.h> 7 #include <openssl/evp.h>
8 #include <openssl/rand.h> 8 #include <openssl/rand.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/openssl_util.h" 14 #include "base/openssl_util.h"
15 #include "base/string_util.h" 15 #include "base/string_util.h"
16 16
17 namespace base { 17 namespace base {
18 18
19 SymmetricKey::~SymmetricKey() { 19 SymmetricKey::~SymmetricKey() {
20 std::fill(key_.begin(), key_.end(), '\0'); // Zero out the confidential key. 20 std::fill(key_.begin(), key_.end(), '\0'); // Zero out the confidential key.
21 } 21 }
22 22
23 // static 23 // static
24 bool SymmetricKey::GenerateRandomBytes(size_t num_bytes, uint8* out) {
25 if (num_bytes == 0)
26 return true;
27 if (out == NULL)
28 return false;
29 OpenSSLErrStackTracer err_tracer(FROM_HERE);
30 return RAND_bytes(out, num_bytes) == 1;
31 }
32
33 // static
24 SymmetricKey* SymmetricKey::GenerateRandomKey(Algorithm algorithm, 34 SymmetricKey* SymmetricKey::GenerateRandomKey(Algorithm algorithm,
25 size_t key_size_in_bits) { 35 size_t key_size_in_bits) {
26 DCHECK_EQ(AES, algorithm); 36 DCHECK_EQ(AES, algorithm);
27 int key_size_in_bytes = key_size_in_bits / 8; 37 int key_size_in_bytes = key_size_in_bits / 8;
28 DCHECK_EQ(static_cast<int>(key_size_in_bits), key_size_in_bytes * 8); 38 DCHECK_EQ(static_cast<int>(key_size_in_bits), key_size_in_bytes * 8);
29 39
30 if (key_size_in_bits == 0) 40 if (key_size_in_bits == 0)
31 return NULL; 41 return NULL;
32
33 OpenSSLErrStackTracer err_tracer(FROM_HERE);
34 scoped_ptr<SymmetricKey> key(new SymmetricKey); 42 scoped_ptr<SymmetricKey> key(new SymmetricKey);
35 uint8* key_data = 43 if (GenerateRandomBytes(
36 reinterpret_cast<uint8*>(WriteInto(&key->key_, key_size_in_bytes + 1)); 44 key_size_in_bytes,
37 45 reinterpret_cast<uint8*>(WriteInto(&key->key_, key_size_in_bytes + 1)))) {
38 int rv = RAND_bytes(key_data, key_size_in_bytes); 46 return key.release();
39 return rv == 1 ? key.release() : NULL; 47 } else {
48 return NULL;
49 }
40 } 50 }
41 51
42 // static 52 // static
43 SymmetricKey* SymmetricKey::DeriveKeyFromPassword(Algorithm algorithm, 53 SymmetricKey* SymmetricKey::DeriveKeyFromPassword(Algorithm algorithm,
44 const std::string& password, 54 const std::string& password,
45 const std::string& salt, 55 const std::string& salt,
46 size_t iterations, 56 size_t iterations,
47 size_t key_size_in_bits) { 57 size_t key_size_in_bits) {
48 DCHECK(algorithm == AES || algorithm == HMAC_SHA1); 58 DCHECK(algorithm == AES || algorithm == HMAC_SHA1);
49 int key_size_in_bytes = key_size_in_bits / 8; 59 int key_size_in_bytes = key_size_in_bits / 8;
(...skipping 17 matching lines...) Expand all
67 key->key_ = raw_key; 77 key->key_ = raw_key;
68 return key.release(); 78 return key.release();
69 } 79 }
70 80
71 bool SymmetricKey::GetRawKey(std::string* raw_key) { 81 bool SymmetricKey::GetRawKey(std::string* raw_key) {
72 *raw_key = key_; 82 *raw_key = key_;
73 return true; 83 return true;
74 } 84 }
75 85
76 } // namespace base 86 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698