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

Unified Diff: base/crypto/cssm_init.h

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
« no previous file with comments | « no previous file | base/crypto/cssm_init.cc » ('j') | base/crypto/cssm_init.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/crypto/cssm_init.h
diff --git a/base/crypto/cssm_init.h b/base/crypto/cssm_init.h
index 5644d7e62189111725902c753735dc6d2359336a..0b492e67b773c9c1bd8d23a9b4e988e3a607d0b7 100644
--- a/base/crypto/cssm_init.h
+++ b/base/crypto/cssm_init.h
@@ -8,6 +8,7 @@
#include <Security/cssm.h>
+#include "base/basictypes.h"
#include "base/scoped_ptr.h"
namespace base {
@@ -22,12 +23,22 @@ void EnsureCSSMInit();
// Returns the shared CSP handle used by CSSM functions.
CSSM_CSP_HANDLE GetSharedCSPHandle();
+// Returns the shared CL handle used by CSSM functions.
+CSSM_CL_HANDLE GetSharedCLHandle();
+
+// Returns the shared TP handle used by CSSM functions.
+CSSM_TP_HANDLE GetSharedTPHandle();
+
// Set of pointers to memory function wrappers that are required for CSSM
extern const CSSM_API_MEMORY_FUNCS kCssmMemoryFunctions;
// Utility function to log an error message including the error name.
void LogCSSMError(const char *function_name, CSSM_RETURN err);
+// Utility function to release memory allocated by CSSM.
+// Note the wrapper classes below (ScopedCSSMData & ScopedCSSMTPtr)
+void CSSMFree(void* ptr);
+
// The OS X certificate and key management wrappers over CSSM are not
// thread-safe. In particular, code that accesses the CSSM database is
// problematic.
@@ -35,6 +46,65 @@ void LogCSSMError(const char *function_name, CSSM_RETURN err);
// http://developer.apple.com/mac/library/documentation/Security/Reference/certifkeytrustservices/Reference/reference.html
Lock& GetMacSecurityServicesLock();
+// Wrapper class for CSSM_DATA type.
+// The constructor initializes data_ to zero and the destructor releases the
+// data properly.
+class ScopedCSSMData {
+ public:
+ ScopedCSSMData();
+ ~ScopedCSSMData();
+ operator CSSM_DATA*() { return &data_; }
+ CSSM_DATA* operator ->() { return &data_; }
+
+ private:
+ CSSM_DATA data_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedCSSMData);
+};
+
+// Wrapper class for CSSM types.
+// Destructor frees the memory properly.
Ryan Sleevi 2011/02/05 00:23:37 nit: Can you specify that this should only be used
dmac 2011/02/08 01:23:45 Done.
+template<typename T>
+class ScopedCSSMTPtr {
+ public:
+ typedef T* TPtr;
+
+ explicit ScopedCSSMTPtr(T* ptr = NULL) : ptr_(ptr) { }
+ ~ScopedCSSMTPtr() {
+ reset();
+ }
+
+ void reset(T* p = NULL) {
+ if (p != ptr_) {
+ if (ptr_) {
+ CSSMFree(ptr_);
+ }
+ ptr_ = p;
+ }
+ }
+
+ T* get() const { return ptr_; }
+ T* release() WARN_UNUSED_RESULT {
+ void* retVal = ptr_;
+ ptr_ = NULL;
+ return retVal;
+ }
+
+ operator T*() { return ptr_; }
+ T* operator ->() { return ptr_; }
+
+ // Receive is used when you need to pass a CSSMType* into a system
+ // function and have this object take ownership of th result.
+ TPtr& receive() {
+ assert(ptr_ == NULL);
+ return ptr_;
+ }
+ private:
+ T* ptr_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedCSSMTPtr);
+};
+
} // namespace base
#endif // BASE_CRYPTO_CSSM_INIT_H_
« no previous file with comments | « no previous file | base/crypto/cssm_init.cc » ('j') | base/crypto/cssm_init.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698