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

Unified Diff: base/crypto/cssm_init.cc

Issue 6312157: Add ability to create self signed certs to mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 11 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 eea9d1bcd767cd1a5f9d1590610108568a3515cd..7fc80d7a76d59d289244fac9b267e43efa549190 100644
--- a/base/crypto/cssm_init.cc
+++ b/base/crypto/cssm_init.cc
@@ -7,6 +7,7 @@
#include <Security/SecBase.h>
#include "base/logging.h"
+#include "base/mac/scoped_cftyperef.h"
#include "base/singleton.h"
#include "base/synchronization/lock.h"
#include "base/sys_string_conversions.h"
@@ -20,6 +21,22 @@
namespace {
+void* CSSMMalloc(CSSM_SIZE size, void *alloc_ref) {
Ryan Sleevi 2011/02/05 00:23:37 nit: void *alloc_ref -> void* alloc_ref
dmac 2011/02/08 01:23:45 Done.
+ return malloc(size);
+}
+
+void CSSMFree(void* mem_ptr, void* alloc_ref) {
+ free(mem_ptr);
+}
+
+void* CSSMRealloc(void* ptr, CSSM_SIZE size, void* alloc_ref) {
+ return realloc(ptr, size);
+}
+
+void* CSSMCalloc(uint32 num, CSSM_SIZE size, void* alloc_ref) {
+ return calloc(num, size);
+}
+
class CSSMInitSingleton {
public:
static CSSMInitSingleton* GetInstance() {
@@ -28,9 +45,14 @@ class CSSMInitSingleton {
}
CSSM_CSP_HANDLE csp_handle() const { return csp_handle_; }
+ CSSM_CL_HANDLE cl_handle() const { return cl_handle_; }
Ryan Sleevi 2011/02/05 00:23:37 nit: only once space between const and {
dmac 2011/02/08 01:23:45 Done.
+ CSSM_TP_HANDLE tp_handle() const { return tp_handle_; }
private:
- CSSMInitSingleton() : inited_(false), loaded_(false), csp_handle_(NULL) {
+ CSSMInitSingleton()
+ : inited_(false), csp_loaded_(false), cl_loaded_(false),
+ tp_loaded_(false), csp_handle_(NULL), cl_handle_(NULL),
+ tp_handle_(NULL) {
static CSSM_VERSION version = {2, 0};
// TODO(wtc): what should our caller GUID be?
static const CSSM_GUID test_guid = {
@@ -51,13 +73,42 @@ class CSSMInitSingleton {
NOTREACHED();
return;
}
- loaded_ = true;
+ csp_loaded_ = true;
+ crtn = CSSM_ModuleLoad(
+ &gGuidAppleX509CL, CSSM_KEY_HIERARCHY_NONE, NULL, NULL);
+ if (crtn) {
+ NOTREACHED();
+ return;
+ }
+ cl_loaded_ = true;
+ crtn = CSSM_ModuleLoad(
+ &gGuidAppleX509TP, CSSM_KEY_HIERARCHY_NONE, NULL, NULL);
+ if (crtn) {
+ NOTREACHED();
+ return;
+ }
+ tp_loaded_ = true;
+
+ const CSSM_API_MEMORY_FUNCS cssmMemoryFunctions = {
+ CSSMMalloc,
+ CSSMFree,
+ CSSMRealloc,
+ CSSMCalloc,
+ NULL
+ };
- crtn = CSSM_ModuleAttach(&gGuidAppleCSP, &version,
- &base::kCssmMemoryFunctions, 0,
+ crtn = CSSM_ModuleAttach(&gGuidAppleCSP, &version, &cssmMemoryFunctions, 0,
CSSM_SERVICE_CSP, 0, CSSM_KEY_HIERARCHY_NONE,
NULL, 0, NULL, &csp_handle_);
DCHECK(crtn == CSSM_OK);
+ crtn = CSSM_ModuleAttach(&gGuidAppleX509CL, &version, &cssmMemoryFunctions,
+ 0, CSSM_SERVICE_CL, 0, CSSM_KEY_HIERARCHY_NONE,
+ NULL, 0, NULL, &cl_handle_);
+ DCHECK(crtn == CSSM_OK);
+ crtn = CSSM_ModuleAttach(&gGuidAppleX509TP, &version, &cssmMemoryFunctions,
+ 0, CSSM_SERVICE_TP, 0, CSSM_KEY_HIERARCHY_NONE,
+ NULL, 0, NULL, &tp_handle_);
+ DCHECK(crtn == CSSM_OK);
}
~CSSMInitSingleton() {
@@ -66,10 +117,26 @@ class CSSMInitSingleton {
CSSM_RETURN crtn = CSSM_ModuleDetach(csp_handle_);
DCHECK(crtn == CSSM_OK);
}
- if (loaded_) {
+ if (cl_handle_) {
+ CSSM_RETURN crtn = CSSM_ModuleDetach(cl_handle_);
+ DCHECK(crtn == CSSM_OK);
+ }
+ if (tp_handle_) {
+ CSSM_RETURN crtn = CSSM_ModuleDetach(tp_handle_);
+ DCHECK(crtn == CSSM_OK);
+ }
+ if (csp_loaded_) {
crtn = CSSM_ModuleUnload(&gGuidAppleCSP, NULL, NULL);
DCHECK(crtn == CSSM_OK);
}
+ if (cl_loaded_) {
+ crtn = CSSM_ModuleUnload(&gGuidAppleX509CL, NULL, NULL);
+ DCHECK(crtn == CSSM_OK);
+ }
+ if (tp_loaded_) {
+ crtn = CSSM_ModuleUnload(&gGuidAppleX509TP, NULL, NULL);
+ DCHECK(crtn == CSSM_OK);
+ }
if (inited_) {
crtn = CSSM_Terminate();
DCHECK(crtn == CSSM_OK);
@@ -77,8 +144,12 @@ class CSSMInitSingleton {
}
bool inited_; // True if CSSM_Init has been called successfully.
- bool loaded_; // True if CSSM_ModuleLoad has been called successfully.
+ bool csp_loaded_; // True if gGuidAppleCSP has been loaded
+ bool cl_loaded_; // True if gGuidAppleX509CL has been loaded.
+ bool tp_loaded_; // True if gGuidAppleX509TP has been loaded.
CSSM_CSP_HANDLE csp_handle_;
+ CSSM_CL_HANDLE cl_handle_;
+ CSSM_TP_HANDLE tp_handle_;
friend struct DefaultSingletonTraits<CSSMInitSingleton>;
};
@@ -117,45 +188,40 @@ CSSM_CSP_HANDLE GetSharedCSPHandle() {
return CSSMInitSingleton::GetInstance()->csp_handle();
}
-void* CSSMMalloc(CSSM_SIZE size, void *alloc_ref) {
- return malloc(size);
-}
-
-void CSSMFree(void* mem_ptr, void* alloc_ref) {
- free(mem_ptr);
+CSSM_CL_HANDLE GetSharedCLHandle() {
+ return CSSMInitSingleton::GetInstance()->cl_handle();
}
-void* CSSMRealloc(void* ptr, CSSM_SIZE size, void* alloc_ref) {
- return realloc(ptr, size);
+CSSM_TP_HANDLE GetSharedTPHandle() {
+ return CSSMInitSingleton::GetInstance()->tp_handle();
}
-void* CSSMCalloc(uint32 num, CSSM_SIZE size, void* alloc_ref) {
- return calloc(num, size);
+void CSSMFree(void* ptr) {
+ ::CSSMFree(ptr, NULL);
}
-const CSSM_API_MEMORY_FUNCS kCssmMemoryFunctions = {
- CSSMMalloc,
- CSSMFree,
- CSSMRealloc,
- CSSMCalloc,
- NULL
-};
-
void LogCSSMError(const char *fn_name, CSSM_RETURN err) {
Ryan Sleevi 2011/02/05 00:23:37 nit: const char *fn_name -> const char* fn_name
dmac 2011/02/08 01:23:45 Done.
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;
- }
+ base::mac::ScopedCFTypeRef<CFStringRef> cfstr(
+ SecCopyErrorMessageString(err, NULL));
+ LOG(ERROR) << fn_name << " returned " << err
+ << " (" << SysCFStringRefToUTF8(cfstr) << ")";
}
base::Lock& GetMacSecurityServicesLock() {
return SecurityServicesSingleton::GetInstance()->lock();
}
+ScopedCSSMData::ScopedCSSMData() {
+ memset(&data_, 0, sizeof(data_));
+}
+
+ScopedCSSMData::~ScopedCSSMData() {
+ if (data_.Data) {
+ CSSMFree(data_.Data);
+ data_.Data = NULL;
+ }
+}
+
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698