chromium/crypto/scoped_cng_types.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CRYPTO_SCOPED_CNG_TYPES_H_
#define CRYPTO_SCOPED_CNG_TYPES_H_

#include <windows.h>

#include "base/scoped_generic.h"
#include "base/win/wincrypt_shim.h"

namespace crypto {

template <typename T>
struct NCryptObjectTraits {
  static T InvalidValue() { return 0; }
  static void Free(T handle) { NCryptFreeObject(handle); }
};

using ScopedNCryptProvider =
    base::ScopedGeneric<NCRYPT_PROV_HANDLE,
                        NCryptObjectTraits<NCRYPT_PROV_HANDLE>>;
using ScopedNCryptKey =
    base::ScopedGeneric<NCRYPT_KEY_HANDLE,
                        NCryptObjectTraits<NCRYPT_KEY_HANDLE>>;

}  // namespace crypto

#endif  // CRYPTO_SCOPED_CNG_TYPES_H_