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

Unified Diff: base/crypto/scoped_capi_types.h

Issue 6805019: Move crypto files out of base, to a top level directory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 8 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/scoped_capi_types.h
===================================================================
--- base/crypto/scoped_capi_types.h (revision 80572)
+++ base/crypto/scoped_capi_types.h (working copy)
@@ -1,125 +0,0 @@
-// Copyright (c) 2010 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.
-
-#ifndef BASE_CRYPTO_SCOPED_CAPI_TYPES_H_
-#define BASE_CRYPTO_SCOPED_CAPI_TYPES_H_
-#pragma once
-
-#include <windows.h>
-#include <wincrypt.h>
-
-#include <algorithm>
-
-#include "base/logging.h"
-
-namespace base {
-
-// Simple destructor for the Free family of CryptoAPI functions, such as
-// CryptDestroyHash, which take only a single argument to release.
-template <typename CAPIHandle, BOOL (WINAPI *Destroyer)(CAPIHandle)>
-struct CAPIDestroyer {
- void operator()(CAPIHandle handle) const {
- if (handle) {
- BOOL ok = Destroyer(handle);
- DCHECK(ok);
- }
- }
-};
-
-// Destructor for the Close/Release family of CryptoAPI functions, which take
-// a second DWORD parameter indicating flags to use when closing or releasing.
-// This includes functions like CertCloseStore or CryptReleaseContext.
-template <typename CAPIHandle, BOOL (WINAPI *Destroyer)(CAPIHandle, DWORD),
- DWORD flags>
-struct CAPIDestroyerWithFlags {
- void operator()(CAPIHandle handle) const {
- if (handle) {
- BOOL ok = Destroyer(handle, flags);
- DCHECK(ok);
- }
- }
-};
-
-// scoped_ptr-like class for the CryptoAPI cryptography and certificate
-// handles. Because these handles are defined as integer types, and not
-// pointers, the existing scoped classes, such as scoped_ptr_malloc, are
-// insufficient. The semantics are the same as scoped_ptr.
-template <class CAPIHandle, typename FreeProc>
-class ScopedCAPIHandle {
- public:
- explicit ScopedCAPIHandle(CAPIHandle handle = NULL) : handle_(handle) {}
-
- ~ScopedCAPIHandle() {
- free_(handle_);
- }
-
- void reset(CAPIHandle handle = NULL) {
- if (handle_ != handle) {
- free_(handle_);
- handle_ = handle;
- }
- }
-
- operator CAPIHandle() const { return handle_; }
- CAPIHandle get() const { return handle_; }
-
- CAPIHandle* receive() {
- CHECK(handle_ == NULL);
- return &handle_;
- }
-
- bool operator==(CAPIHandle handle) const {
- return handle_ == handle;
- }
-
- bool operator!=(CAPIHandle handle) const {
- return handle_ != handle;
- }
-
- void swap(ScopedCAPIHandle& b) {
- CAPIHandle tmp = b.handle_;
- b.handle_ = handle_;
- handle_ = tmp;
- }
-
- CAPIHandle release() {
- CAPIHandle tmp = handle_;
- handle_ = NULL;
- return tmp;
- }
-
- private:
- CAPIHandle handle_;
- static const FreeProc free_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedCAPIHandle);
-};
-
-template<class CH, typename FP>
-const FP ScopedCAPIHandle<CH, FP>::free_ = FP();
-
-template<class CH, typename FP> inline
-bool operator==(CH h, const ScopedCAPIHandle<CH, FP>& b) {
- return h == b.get();
-}
-
-template<class CH, typename FP> inline
-bool operator!=(CH h, const ScopedCAPIHandle<CH, FP>& b) {
- return h != b.get();
-}
-
-typedef ScopedCAPIHandle<
- HCRYPTPROV,
- CAPIDestroyerWithFlags<HCRYPTPROV,
- CryptReleaseContext, 0> > ScopedHCRYPTPROV;
-
-typedef ScopedCAPIHandle<
- HCRYPTKEY, CAPIDestroyer<HCRYPTKEY, CryptDestroyKey> > ScopedHCRYPTKEY;
-
-typedef ScopedCAPIHandle<
- HCRYPTHASH, CAPIDestroyer<HCRYPTHASH, CryptDestroyHash> > ScopedHCRYPTHASH;
-
-} // namespace base
-
-#endif // BASE_CRYPTO_SCOPED_CAPI_TYPES_H_

Powered by Google App Engine
This is Rietveld 408576698