| Index: base/crypto/scoped_capi_types.h
|
| ===================================================================
|
| --- base/crypto/scoped_capi_types.h (revision 81350)
|
| +++ 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_
|
|
|