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

Unified Diff: base/crypto/cssm_init.cc

Issue 1347002: Add Mac implementations of new SymmetricKey and Encryptor classes. (Closed)
Patch Set: Responding to feedback Created 10 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/cssm_init.cc
diff --git a/base/crypto/cssm_init.cc b/base/crypto/cssm_init.cc
index c3cbbd237095dac2501e977a3848fb3405918a14..510ae0cad6592f2fbbf8c4fc71e9c193a8fb1bb6 100644
--- a/base/crypto/cssm_init.cc
+++ b/base/crypto/cssm_init.cc
@@ -3,8 +3,12 @@
// found in the LICENSE file.
#include "base/crypto/cssm_init.h"
+
+#include <Security/SecBase.h>
+
#include "base/logging.h"
#include "base/singleton.h"
+#include "base/sys_string_conversions.h"
// When writing crypto code for Mac OS X, you may find the following
// documentation useful:
@@ -17,7 +21,7 @@ namespace {
class CSSMInitSingleton {
public:
- CSSMInitSingleton() : inited_(false), loaded_(false) {
+ CSSMInitSingleton() : inited_(false), loaded_(false), csp_handle_(NULL) {
static CSSM_VERSION version = {2, 0};
// TODO(wtc): what should our caller GUID be?
static const CSSM_GUID test_guid = {
@@ -39,10 +43,20 @@ class CSSMInitSingleton {
return;
}
loaded_ = true;
+
+ crtn = CSSM_ModuleAttach(&gGuidAppleCSP, &version,
+ &base::kCssmMemoryFunctions, 0,
+ CSSM_SERVICE_CSP, 0, CSSM_KEY_HIERARCHY_NONE,
+ NULL, 0, NULL, &csp_handle_);
+ DCHECK(crtn == CSSM_OK);
}
~CSSMInitSingleton() {
CSSM_RETURN crtn;
+ if (csp_handle_) {
+ CSSM_RETURN crtn = CSSM_ModuleDetach(csp_handle_);
+ DCHECK(crtn == CSSM_OK);
+ }
if (loaded_) {
crtn = CSSM_ModuleUnload(&gGuidAppleCSP, NULL, NULL);
DCHECK(crtn == CSSM_OK);
@@ -53,9 +67,12 @@ class CSSMInitSingleton {
}
}
+ CSSM_CSP_HANDLE csp_handle() const {return csp_handle_;}
+
private:
bool inited_; // True if CSSM_Init has been called successfully.
bool loaded_; // True if CSSM_ModuleLoad has been called successfully.
+ CSSM_CSP_HANDLE csp_handle_;
};
} // namespace
@@ -66,6 +83,10 @@ void EnsureCSSMInit() {
Singleton<CSSMInitSingleton>::get();
}
+CSSM_CSP_HANDLE GetSharedCSPHandle() {
+ return Singleton<CSSMInitSingleton>::get()->csp_handle();
+}
+
void* CSSMMalloc(CSSM_SIZE size, void *alloc_ref) {
return malloc(size);
}
@@ -90,4 +111,17 @@ const CSSM_API_MEMORY_FUNCS kCssmMemoryFunctions = {
NULL
};
+void LogCSSMError(const char *fn_name, CSSM_RETURN err) {
wtc 2010/03/26 21:14:30 Nit: I like the original |function_name| better.
+ if (!err)
+ return;
+ CFStringRef cfstr = SecCopyErrorMessageString(err, NULL);
+ if (cfstr) {
+ std::string err_name = SysCFStringRefToUTF8(cfstr);
+ CFRelease(cfstr);
+ LOG(ERROR) << fn_name << " returned " << err << " (" << err_name << ")";
+ } else {
+ LOG(ERROR) << fn_name << " returned " << err;
+ }
+}
+
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698