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

Unified Diff: base/crypto/symmetric_key_mac.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 side-by-side diff with in-line comments
Download patch
Index: base/crypto/symmetric_key_mac.cc
diff --git a/base/crypto/symmetric_key_mac.cc b/base/crypto/symmetric_key_mac.cc
index 574f9d28e28b23aed3f0ea20ed5b8f4a059910d9..616185b2eec84f45bc5e51e9b84d3989cbdb9894 100644
--- a/base/crypto/symmetric_key_mac.cc
+++ b/base/crypto/symmetric_key_mac.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -32,13 +32,33 @@ CSSM_KEY_TYPE CheckKeyParams(base::SymmetricKey::Algorithm algorithm,
}
}
-void* CreateRandomBytes(size_t size) {
+StringToData(const std::string& str) {
+ CSSM_DATA data = {
+ str.size(),
+ reinterpret_cast<uint8_t*>(const_cast<char*>(str.data()))
+ };
+ return data;
+}
+
+} // namespace
+
+namespace base {
+
+SymmetricKey::~SymmetricKey() {}
+
+// static
+bool SymmetricKey::GenerateRandomBytes(size_t num_bytes, uint8* out) {
+ if (num_bytes == 0)
+ return true;
+ if (out == NULL)
+ return false;
+
CSSM_RETURN err;
CSSM_CC_HANDLE ctx;
err = CSSM_CSP_CreateRandomGenContext(base::GetSharedCSPHandle(),
CSSM_ALGID_APPLE_YARROW,
NULL,
- size, &ctx);
+ num_bytes, &ctx);
if (err) {
base::LogCSSMError("CSSM_CSP_CreateRandomGenContext", err);
return NULL;
@@ -50,32 +70,20 @@ void* CreateRandomBytes(size_t size) {
random_data.Data = NULL;
}
CSSM_DeleteContext(ctx);
- return random_data.Data; // Caller responsible for freeing this
-}
-
-inline CSSM_DATA StringToData(const std::string& str) {
- CSSM_DATA data = {
- str.size(),
- reinterpret_cast<uint8_t*>(const_cast<char*>(str.data()))
- };
- return data;
+ std::copy(random_data.Data, random_data.Data + num_bytes, out);
zel 2011/03/29 05:31:34 you should avoid data copy here change the functi
Denis Lagno 2011/04/04 18:18:02 mac was the only platform that performed this copy
+ delete random_data.Data;
+ return true;
}
-} // namespace
-
-namespace base {
-
-SymmetricKey::~SymmetricKey() {}
-
// static
SymmetricKey* SymmetricKey::GenerateRandomKey(Algorithm algorithm,
size_t key_size_in_bits) {
CheckKeyParams(algorithm, key_size_in_bits);
- void* random_bytes = CreateRandomBytes((key_size_in_bits + 7) / 8);
- if (!random_bytes)
+ std::vector<uint8> random_bytes((key_size_in_bits + 7) / 8);
+ if (!GenerateRandomBytes(random_bytes.size(), &random_bytes[0]))
return NULL;
- SymmetricKey *key = new SymmetricKey(random_bytes, key_size_in_bits);
- free(random_bytes);
+ SymmetricKey *key = new SymmetricKey(&random_bytes[0], key_size_in_bits);
+ std::fill(random_bytes.begin(), random_bytes.end(), 0u);
zel 2011/03/29 05:31:34 why cleaning here? the data is already in memory s
Denis Lagno 2011/04/04 18:18:02 yes, in memory somewhere else. But looking into i
return key;
}

Powered by Google App Engine
This is Rietveld 408576698