//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0008
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Cryptography
        {
            namespace Certificates
            {
                typedef enum EnrollKeyUsages EnrollKeyUsages;

                typedef enum KeyProtectionLevel KeyProtectionLevel;

                typedef enum ExportOption ExportOption;

                typedef enum KeySize KeySize;

                typedef enum InstallOptions InstallOptions;

                interface ICertificateRequestProperties;

                interface ICertificateEnrollmentManagerStatics;

                interface IKeyAlgorithmNamesStatics;

                interface IKeyStorageProviderNamesStatics;

                runtimeclass CertificateRequestProperties;

                runtimeclass CertificateEnrollmentManager;

                runtimeclass KeyAlgorithmNames;

                runtimeclass KeyStorageProviderNames;
            }
        }
    }
}

// Generic instantiations

// Type definition
namespace Windows
{
    namespace Security
    {
        namespace Cryptography
        {
            namespace Certificates
            {
                [version(0x06020000)]
                [flags]
                enum EnrollKeyUsages
                {
                    None         = 0x0,
                    Decryption   = 0x1,
                    Signing      = 0x2,
                    KeyAgreement = 0x4,
                    All          = 0xFFFFFF
                };

                [version(0x06020000)]
                enum KeyProtectionLevel
                {
                    NoConsent           = 0,
                    ConsentOnly         = 1,
                    ConsentWithPassword = 2
                };

                [version(0x06020000)]
                enum ExportOption
                {
                    NotExportable = 0,
                    Exportable    = 1
                };

                [version(0x06020000)]
                enum KeySize
                {
                    Invalid = 0,
                    Rsa2048 = 2048,
                    Rsa4096 = 4096
                };

                [flags]
                [version(0x06020000)]
                enum InstallOptions
                {
                    None          = 0x0,
                    DeleteExpired = 0x1
                };

                [uuid(487E84F6-94E2-4DCE-8833-1A700A37A29A)]
                [version(0x06020000)]
                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateRequestProperties)]
                interface ICertificateRequestProperties : IInspectable
                {
                    [propget] HRESULT Subject([out] [retval] HSTRING* value);
                    [propput] HRESULT Subject([in] HSTRING value);
                    [propget] HRESULT KeyAlgorithmName([out] [retval] HSTRING* value);
                    [propput] HRESULT KeyAlgorithmName([in] HSTRING value);
                    [propget] HRESULT KeySize([out] [retval] UINT32* value);
                    [propput] HRESULT KeySize([in] UINT32 value);
                    [propget] HRESULT FriendlyName([out] [retval] HSTRING* value);
                    [propput] HRESULT FriendlyName([in] HSTRING value);
                    [propget] HRESULT HashAlgorithmName([out] [retval] HSTRING* value);
                    [propput] HRESULT HashAlgorithmName([in] HSTRING value);
                    [propget] HRESULT Exportable([out] [retval] Windows.Security.Cryptography.Certificates.ExportOption* value);
                    [propput] HRESULT Exportable([in] Windows.Security.Cryptography.Certificates.ExportOption value);
                    [propget] HRESULT KeyUsages([out] [retval] Windows.Security.Cryptography.Certificates.EnrollKeyUsages* value);
                    [propput] HRESULT KeyUsages([in] Windows.Security.Cryptography.Certificates.EnrollKeyUsages value);
                    [propget] HRESULT KeyProtectionLevel([out] [retval] Windows.Security.Cryptography.Certificates.KeyProtectionLevel* value);
                    [propput] HRESULT KeyProtectionLevel([in] Windows.Security.Cryptography.Certificates.KeyProtectionLevel value);
                    [propget] HRESULT KeyStorageProviderName([out] [retval] HSTRING* value);
                    [propput] HRESULT KeyStorageProviderName([in] HSTRING value);
                }

                [uuid(8846EF3F-A986-48FB-9FD7-9AEC06935BF1)]
                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager)]
                [version(0x06020000)]
                interface ICertificateEnrollmentManagerStatics : IInspectable
                {
                    HRESULT CreateRequestAsync([in] Windows.Security.Cryptography.Certificates.CertificateRequestProperties* request, [out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** value);
                    HRESULT InstallCertificateAsync([in] HSTRING certificate, [in] Windows.Security.Cryptography.Certificates.InstallOptions installOption, [out] [retval] Windows.Foundation.IAsyncAction** value);
                    HRESULT ImportPfxDataAsync([in] HSTRING pfxData, [in] HSTRING password, [in] Windows.Security.Cryptography.Certificates.ExportOption exportable, [in] Windows.Security.Cryptography.Certificates.KeyProtectionLevel keyProtectionLevel, [in] Windows.Security.Cryptography.Certificates.InstallOptions installOption, [in] HSTRING friendlyName, [out] [retval] Windows.Foundation.IAsyncAction** value);
                }

                [uuid(479065D7-7AC7-4581-8C3B-D07027140448)]
                [exclusiveto(Windows.Security.Cryptography.Certificates.KeyAlgorithmNames)]
                [version(0x06020000)]
                interface IKeyAlgorithmNamesStatics : IInspectable
                {
                    [propget] HRESULT Rsa([out] [retval] HSTRING* value);
                    [propget] HRESULT Dsa([out] [retval] HSTRING* value);
                    [propget] HRESULT Ecdh256([out] [retval] HSTRING* value);
                    [propget] HRESULT Ecdh384([out] [retval] HSTRING* value);
                    [propget] HRESULT Ecdh521([out] [retval] HSTRING* value);
                    [propget] HRESULT Ecdsa256([out] [retval] HSTRING* value);
                    [propget] HRESULT Ecdsa384([out] [retval] HSTRING* value);
                    [propget] HRESULT Ecdsa521([out] [retval] HSTRING* value);
                }

                [uuid(AF186AE0-5529-4602-BD94-0AAB91957B5C)]
                [version(0x06020000)]
                [exclusiveto(Windows.Security.Cryptography.Certificates.KeyStorageProviderNames)]
                interface IKeyStorageProviderNamesStatics : IInspectable
                {
                    [propget] HRESULT SoftwareKeyStorageProvider([out] [retval] HSTRING* value);
                    [propget] HRESULT SmartcardKeyStorageProvider([out] [retval] HSTRING* value);
                    [propget] HRESULT PlatformKeyStorageProvider([out] [retval] HSTRING* value);
                }

                [threading(both)]
                [marshaling_behavior(agile)]
                [version(0x06020000)]
                [activatable(0x06020000)]
                runtimeclass CertificateRequestProperties
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICertificateRequestProperties;
                }

                [version(0x06020000)]
                [marshaling_behavior(agile)]
                [static(Windows.Security.Cryptography.Certificates.ICertificateEnrollmentManagerStatics, 0x06020000)]
                [threading(both)]
                runtimeclass CertificateEnrollmentManager
                {
                }

                [marshaling_behavior(agile)]
                [threading(both)]
                [static(Windows.Security.Cryptography.Certificates.IKeyAlgorithmNamesStatics, 0x06020000)]
                [version(0x06020000)]
                runtimeclass KeyAlgorithmNames
                {
                }

                [marshaling_behavior(agile)]
                [version(0x06020000)]
                [threading(both)]
                [static(Windows.Security.Cryptography.Certificates.IKeyStorageProviderNamesStatics, 0x06020000)]
                runtimeclass KeyStorageProviderNames
                {
                }
            }
        }
    }
}
