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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Networking.idl";
import "Windows.Storage.Streams.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(__windows2Enetworking_h__)")
cpp_quote("#include <Windows.Networking.h>")
cpp_quote("#endif // !defined(__windows2Enetworking_h__)")
cpp_quote("#if !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#include <Windows.Storage.Streams.h>")
cpp_quote("#endif // !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;

        interface IAsyncAction;
    }
}
namespace Windows
{
    namespace Networking
    {
        runtimeclass HostName;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IBuffer;

            interface IInputStream;
        }
    }
}
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;

                typedef enum CertificateChainPolicy CertificateChainPolicy;

                typedef enum ChainValidationResult ChainValidationResult;

                typedef enum SignatureValidationResult SignatureValidationResult;

                interface ICertificateRequestProperties;

                interface ICertificateRequestProperties2;

                interface ICertificateEnrollmentManagerStatics;

                interface ICertificateEnrollmentManagerStatics2;

                interface IKeyAttestationHelperStatics;

                interface ICertificateStoresStatics;

                interface IUserCertificateEnrollmentManager;

                interface ICertificateStore;

                interface IKeyAlgorithmNamesStatics;

                interface IKeyStorageProviderNamesStatics;

                interface IChainBuildingParameters;

                interface IChainValidationParameters;

                interface ICertificateQuery;

                interface ICertificateChain;

                interface ICertificate;

                interface ICertificateFactory;

                interface ICmsTimestampInfo;

                interface ICmsSignerInfo;

                interface ICmsAttachedSignature;

                interface ICmsAttachedSignatureFactory;

                interface ICmsAttachedSignatureStatics;

                interface ICmsDetachedSignature;

                interface ICmsDetachedSignatureFactory;

                interface ICmsDetachedSignatureStatics;

                runtimeclass Certificate;

                runtimeclass CertificateRequestProperties;

                runtimeclass UserCertificateEnrollmentManager;

                runtimeclass CertificateEnrollmentManager;

                runtimeclass KeyAttestationHelper;

                runtimeclass CertificateQuery;

                runtimeclass CertificateStore;

                runtimeclass CertificateStores;

                runtimeclass KeyAlgorithmNames;

                runtimeclass KeyStorageProviderNames;

                runtimeclass ChainBuildingParameters;

                runtimeclass ChainValidationParameters;

                runtimeclass CertificateChain;

                runtimeclass CmsTimestampInfo;

                runtimeclass CmsSignerInfo;

                runtimeclass CmsAttachedSignature;

                runtimeclass CmsDetachedSignature;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Security
    {
        namespace Cryptography
        {
            namespace Certificates
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.Certificate*>;

                    interface Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.ChainValidationResult>;

                    interface Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.CmsSignerInfo*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Security.Cryptography.Certificates.Certificate*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Security.Cryptography.Certificates.ChainValidationResult>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Security.Cryptography.Certificates.CmsSignerInfo*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.ChainValidationResult>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.CmsSignerInfo*>;

                    interface Windows.Foundation.Collections.IVector<Windows.Security.Cryptography.Certificates.Certificate*>;

                    interface Windows.Foundation.Collections.IVector<Windows.Security.Cryptography.Certificates.ChainValidationResult>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Security.Cryptography.Certificates.CertificateChain*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Security.Cryptography.Certificates.SignatureValidationResult>;
                }
            }
        }
    }
}

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

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

                [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
                };

                [version(0x06030000)]
                enum CertificateChainPolicy
                {
                    Base             = 0,
                    Ssl              = 1,
                    NTAuthentication = 2,
                    MicrosoftRoot    = 3
                };

                [version(0x06030000)]
                enum ChainValidationResult
                {
                    Success                           = 0,
                    Untrusted                         = 1,
                    Revoked                           = 2,
                    Expired                           = 3,
                    IncompleteChain                   = 4,
                    InvalidSignature                  = 5,
                    WrongUsage                        = 6,
                    InvalidName                       = 7,
                    InvalidCertificateAuthorityPolicy = 8,
                    BasicConstraintsError             = 9,
                    UnknownCriticalExtension          = 10,
                    RevocationInformationMissing      = 11,
                    RevocationFailure                 = 12,
                    OtherErrors                       = 13
                };

                [version(0x06030000)]
                enum SignatureValidationResult
                {
                    Success          = 0,
                    InvalidParameter = 1,
                    BadMessage       = 2,
                    InvalidSignature = 3,
                    OtherErrors      = 4
                };

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateRequestProperties)]
                [uuid(487E84F6-94E2-4DCE-8833-1A700A37A29A)]
                [version(0x06020000)]
                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);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateRequestProperties)]
                [uuid(3DA0C954-D73F-4FF3-A0A6-0677C0ADA05B)]
                [version(0x06030000)]
                interface ICertificateRequestProperties2 : IInspectable
                {
                    [propget] HRESULT SmartcardReaderName([out] [retval] HSTRING* value);
                    [propput] HRESULT SmartcardReaderName([in] HSTRING value);
                    [propget] HRESULT SigningCertificate([out] [retval] Windows.Security.Cryptography.Certificates.Certificate** value);
                    [propput] HRESULT SigningCertificate([in] Windows.Security.Cryptography.Certificates.Certificate* value);
                    [propget] HRESULT AttestationCredentialCertificate([out] [retval] Windows.Security.Cryptography.Certificates.Certificate** value);
                    [propput] HRESULT AttestationCredentialCertificate([in] Windows.Security.Cryptography.Certificates.Certificate* value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager)]
                [uuid(8846EF3F-A986-48FB-9FD7-9AEC06935BF1)]
                [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);
                    [overload("ImportPfxDataAsync")] 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);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateEnrollmentManager)]
                [uuid(DC5B1C33-6429-4014-999C-5D9735802D1D)]
                [version(0x06030000)]
                interface ICertificateEnrollmentManagerStatics2 : IInspectable
                {
                    [propget] HRESULT UserCertificateEnrollmentManager([out] [retval] Windows.Security.Cryptography.Certificates.UserCertificateEnrollmentManager** value);
                    [overload("ImportPfxDataAsync")] HRESULT ImportPfxDataToKspAsync([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, [in] HSTRING keyStorageProvider, [out] [retval] Windows.Foundation.IAsyncAction** value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.KeyAttestationHelper)]
                [uuid(1648E246-F644-4326-88BE-3AF102D30E0C)]
                [version(0x06030000)]
                interface IKeyAttestationHelperStatics : IInspectable
                {
                    HRESULT DecryptTpmAttestationCredentialAsync([in] HSTRING credential, [out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** value);
                    HRESULT GetTpmAttestationCredentialId([in] HSTRING credential, [out] [retval] HSTRING* value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateStores)]
                [uuid(FBECC739-C6FE-4DE7-99CF-74C3E596E032)]
                [version(0x06030000)]
                interface ICertificateStoresStatics : IInspectable
                {
                    [overload("FindAllAsync")] HRESULT FindAllAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>*>** value);
                    [overload("FindAllAsync")] HRESULT FindAllWithQueryAsync([in] Windows.Security.Cryptography.Certificates.CertificateQuery* query, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>*>** value);
                    [propget] HRESULT TrustedRootCertificationAuthorities([out] [retval] Windows.Security.Cryptography.Certificates.CertificateStore** value);
                    [propget] HRESULT IntermediateCertificationAuthorities([out] [retval] Windows.Security.Cryptography.Certificates.CertificateStore** value);
                    HRESULT GetStoreByName([in] HSTRING storeName, [out] [retval] Windows.Security.Cryptography.Certificates.CertificateStore** value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.UserCertificateEnrollmentManager)]
                [uuid(96313718-22E1-4819-B20B-AB46A6ECA06E)]
                [version(0x06030000)]
                interface IUserCertificateEnrollmentManager : 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);
                    [overload("ImportPfxDataAsync")] 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);
                    [overload("ImportPfxDataAsync")] HRESULT ImportPfxDataToKspAsync([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, [in] HSTRING keyStorageProvider, [out] [retval] Windows.Foundation.IAsyncAction** value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateStore)]
                [uuid(B0BFF720-344E-4331-AF14-A7F7A7EBC93A)]
                [version(0x06030000)]
                interface ICertificateStore : IInspectable
                {
                    HRESULT Add([in] Windows.Security.Cryptography.Certificates.Certificate* certificate);
                    HRESULT Delete([in] Windows.Security.Cryptography.Certificates.Certificate* certificate);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.KeyAlgorithmNames)]
                [uuid(479065D7-7AC7-4581-8C3B-D07027140448)]
                [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);
                }

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

                [exclusiveto(Windows.Security.Cryptography.Certificates.ChainBuildingParameters)]
                [uuid(422BA922-7C8D-47B7-B59B-B12703733AC3)]
                [version(0x06030000)]
                interface IChainBuildingParameters : IInspectable
                {
                    [propget] HRESULT EnhancedKeyUsages([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                    [propget] HRESULT ValidationTimestamp([out] [retval] Windows.Foundation.DateTime* value);
                    [propput] HRESULT ValidationTimestamp([in] Windows.Foundation.DateTime value);
                    [propget] HRESULT RevocationCheckEnabled([out] [retval] boolean* value);
                    [propput] HRESULT RevocationCheckEnabled([in] boolean value);
                    [propget] HRESULT NetworkRetrievalEnabled([out] [retval] boolean* value);
                    [propput] HRESULT NetworkRetrievalEnabled([in] boolean value);
                    [propget] HRESULT AuthorityInformationAccessEnabled([out] [retval] boolean* value);
                    [propput] HRESULT AuthorityInformationAccessEnabled([in] boolean value);
                    [propget] HRESULT CurrentTimeValidationEnabled([out] [retval] boolean* value);
                    [propput] HRESULT CurrentTimeValidationEnabled([in] boolean value);
                    [propget] HRESULT ExclusiveTrustRoots([out] [retval] Windows.Foundation.Collections.IVector<Windows.Security.Cryptography.Certificates.Certificate*>** certificates);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.ChainValidationParameters)]
                [uuid(C4743B4A-7EB0-4B56-A040-B9C8E655DDF3)]
                [version(0x06030000)]
                interface IChainValidationParameters : IInspectable
                {
                    [propget] HRESULT CertificateChainPolicy([out] [retval] Windows.Security.Cryptography.Certificates.CertificateChainPolicy* value);
                    [propput] HRESULT CertificateChainPolicy([in] Windows.Security.Cryptography.Certificates.CertificateChainPolicy value);
                    [propget] HRESULT ServerDnsName([out] [retval] Windows.Networking.HostName** value);
                    [propput] HRESULT ServerDnsName([in] Windows.Networking.HostName* value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateQuery)]
                [uuid(5B082A31-A728-4916-B5EE-FFCB8ACF2417)]
                [version(0x06030000)]
                interface ICertificateQuery : IInspectable
                {
                    [propget] HRESULT EnhancedKeyUsages([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                    [propget] HRESULT IssuerName([out] [retval] HSTRING* value);
                    [propput] HRESULT IssuerName([in] HSTRING value);
                    [propget] HRESULT FriendlyName([out] [retval] HSTRING* value);
                    [propput] HRESULT FriendlyName([in] HSTRING value);
                    [propget] HRESULT Thumbprint([out] UINT32* __valueSize, [out] [retval] [size_is(, *__valueSize)] BYTE** value);
                    [propput] HRESULT Thumbprint([in] UINT32 __valueSize, [in] [size_is(__valueSize)] BYTE* value);
                    [propget] HRESULT HardwareOnly([out] [retval] boolean* value);
                    [propput] HRESULT HardwareOnly([in] boolean value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CertificateChain)]
                [uuid(20BF5385-3691-4501-A62C-FD97278B31EE)]
                [version(0x06030000)]
                interface ICertificateChain : IInspectable
                {
                    [overload("Validate")] HRESULT Validate([out] [retval] Windows.Security.Cryptography.Certificates.ChainValidationResult* status);
                    [overload("Validate")] HRESULT ValidateWithParameters([in] Windows.Security.Cryptography.Certificates.ChainValidationParameters* parameter, [out] [retval] Windows.Security.Cryptography.Certificates.ChainValidationResult* status);
                    HRESULT GetCertificates([in] boolean includeRoot, [out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>** certificates);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.Certificate)]
                [uuid(333F740C-04D8-43B3-B278-8C5FCC9BE5A0)]
                [version(0x06030000)]
                interface ICertificate : IInspectable
                {
                    [overload("BuildChainAsync")] HRESULT BuildChainAsync([in] Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.Certificate*>* certificates, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Cryptography.Certificates.CertificateChain*>** value);
                    [overload("BuildChainAsync")] HRESULT BuildChainWithParametersAsync([in] Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.Certificate*>* certificates, [in] Windows.Security.Cryptography.Certificates.ChainBuildingParameters* parameters, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Cryptography.Certificates.CertificateChain*>** value);
                    [propget] HRESULT SerialNumber([out] UINT32* __valueSize, [out] [retval] [size_is(, *__valueSize)] BYTE** value);
                    [overload("GetHashValue")] HRESULT GetHashValue([out] UINT32* __valueSize, [out] [retval] [size_is(, *__valueSize)] BYTE** value);
                    [overload("GetHashValue")] HRESULT GetHashValueWithAlgorithm([in] HSTRING hashAlgorithmName, [out] UINT32* __valueSize, [out] [retval] [size_is(, *__valueSize)] BYTE** value);
                    HRESULT GetCertificateBlob([out] [retval] Windows.Storage.Streams.IBuffer** value);
                    [propget] HRESULT Subject([out] [retval] HSTRING* value);
                    [propget] HRESULT Issuer([out] [retval] HSTRING* value);
                    [propget] HRESULT HasPrivateKey([out] [retval] boolean* value);
                    [propget] HRESULT IsStronglyProtected([out] [retval] boolean* value);
                    [propget] HRESULT ValidFrom([out] [retval] Windows.Foundation.DateTime* value);
                    [propget] HRESULT ValidTo([out] [retval] Windows.Foundation.DateTime* value);
                    [propget] HRESULT EnhancedKeyUsages([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
                    [propput] HRESULT FriendlyName([in] HSTRING value);
                    [propget] HRESULT FriendlyName([out] [retval] HSTRING* value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.Certificate)]
                [uuid(17B4221C-4BAF-44A2-9608-04FB62B16942)]
                [version(0x06030000)]
                interface ICertificateFactory : IInspectable
                {
                    HRESULT CreateCertificate([in] Windows.Storage.Streams.IBuffer* certBlob, [out] [retval] Windows.Security.Cryptography.Certificates.Certificate** certificate);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsTimestampInfo)]
                [uuid(2F5F00F2-2C18-4F88-8435-C534086076F5)]
                [version(0x06030000)]
                interface ICmsTimestampInfo : IInspectable
                {
                    [propget] HRESULT SigningCertificate([out] [retval] Windows.Security.Cryptography.Certificates.Certificate** value);
                    [propget] HRESULT Certificates([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>** value);
                    [propget] HRESULT Timestamp([out] [retval] Windows.Foundation.DateTime* value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsSignerInfo)]
                [uuid(50D020DB-1D2F-4C1A-B5C5-D0188FF91F47)]
                [version(0x06030000)]
                interface ICmsSignerInfo : IInspectable
                {
                    [propget] HRESULT Certificate([out] [retval] Windows.Security.Cryptography.Certificates.Certificate** value);
                    [propput] HRESULT Certificate([in] Windows.Security.Cryptography.Certificates.Certificate* value);
                    [propget] HRESULT HashAlgorithmName([out] [retval] HSTRING* value);
                    [propput] HRESULT HashAlgorithmName([in] HSTRING value);
                    [propget] HRESULT TimestampInfo([out] [retval] Windows.Security.Cryptography.Certificates.CmsTimestampInfo** value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsAttachedSignature)]
                [uuid(61899D9D-3757-4ECB-BDDC-0CA357D7A936)]
                [version(0x06030000)]
                interface ICmsAttachedSignature : IInspectable
                {
                    [propget] HRESULT Certificates([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>** value);
                    [propget] HRESULT Content([out] UINT32* __valueSize, [out] [retval] [size_is(, *__valueSize)] BYTE** value);
                    [propget] HRESULT Signers([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.CmsSignerInfo*>** value);
                    HRESULT VerifySignature([out] [retval] Windows.Security.Cryptography.Certificates.SignatureValidationResult* value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsAttachedSignature)]
                [uuid(D0C8FC15-F757-4C64-A362-52CC1C77CFFB)]
                [version(0x06030000)]
                interface ICmsAttachedSignatureFactory : IInspectable
                {
                    HRESULT CreateCmsAttachedSignature([in] Windows.Storage.Streams.IBuffer* inputBlob, [out] [retval] Windows.Security.Cryptography.Certificates.CmsAttachedSignature** cmsSignedData);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsAttachedSignature)]
                [uuid(87989C8E-B0AD-498D-A7F5-78B59BCE4B36)]
                [version(0x06030000)]
                interface ICmsAttachedSignatureStatics : IInspectable
                {
                    HRESULT GenerateSignatureAsync([in] Windows.Storage.Streams.IBuffer* data, [in] Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.CmsSignerInfo*>* signers, [in] Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.Certificate*>* certificates, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer*>** outputBlob);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsDetachedSignature)]
                [uuid(0F1EF154-F65E-4536-8339-5944081DB2CA)]
                [version(0x06030000)]
                interface ICmsDetachedSignature : IInspectable
                {
                    [propget] HRESULT Certificates([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.Certificate*>** value);
                    [propget] HRESULT Signers([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Cryptography.Certificates.CmsSignerInfo*>** value);
                    HRESULT VerifySignatureAsync([in] Windows.Storage.Streams.IInputStream* data, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Cryptography.Certificates.SignatureValidationResult>** value);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsDetachedSignature)]
                [uuid(C4AB3503-AE7F-4387-AD19-00F150E48EBB)]
                [version(0x06030000)]
                interface ICmsDetachedSignatureFactory : IInspectable
                {
                    HRESULT CreateCmsDetachedSignature([in] Windows.Storage.Streams.IBuffer* inputBlob, [out] [retval] Windows.Security.Cryptography.Certificates.CmsDetachedSignature** cmsSignedData);
                }

                [exclusiveto(Windows.Security.Cryptography.Certificates.CmsDetachedSignature)]
                [uuid(3D114CFD-BF9B-4682-9BE6-91F57C053808)]
                [version(0x06030000)]
                interface ICmsDetachedSignatureStatics : IInspectable
                {
                    HRESULT GenerateSignatureAsync([in] Windows.Storage.Streams.IInputStream* data, [in] Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.CmsSignerInfo*>* signers, [in] Windows.Foundation.Collections.IIterable<Windows.Security.Cryptography.Certificates.Certificate*>* certificates, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer*>** outputBlob);
                }

                [activatable(Windows.Security.Cryptography.Certificates.ICertificateFactory, 0x06030000)]
                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass Certificate
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICertificate;
                }

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

                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass UserCertificateEnrollmentManager
                {
                    [default] interface Windows.Security.Cryptography.Certificates.IUserCertificateEnrollmentManager;
                }

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

                [marshaling_behavior(agile)]
                [static(Windows.Security.Cryptography.Certificates.IKeyAttestationHelperStatics, 0x06030000)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass KeyAttestationHelper
                {
                }

                [activatable(0x06030000)]
                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CertificateQuery
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICertificateQuery;
                }

                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CertificateStore
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICertificateStore;
                }

                [marshaling_behavior(agile)]
                [static(Windows.Security.Cryptography.Certificates.ICertificateStoresStatics, 0x06030000)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CertificateStores
                {
                }

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

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

                [activatable(0x06030000)]
                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass ChainBuildingParameters
                {
                    [default] interface Windows.Security.Cryptography.Certificates.IChainBuildingParameters;
                }

                [activatable(0x06030000)]
                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass ChainValidationParameters
                {
                    [default] interface Windows.Security.Cryptography.Certificates.IChainValidationParameters;
                }

                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CertificateChain
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICertificateChain;
                }

                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CmsTimestampInfo
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICmsTimestampInfo;
                }

                [activatable(0x06030000)]
                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CmsSignerInfo
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICmsSignerInfo;
                }

                [activatable(Windows.Security.Cryptography.Certificates.ICmsAttachedSignatureFactory, 0x06030000)]
                [marshaling_behavior(agile)]
                [static(Windows.Security.Cryptography.Certificates.ICmsAttachedSignatureStatics, 0x06030000)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CmsAttachedSignature
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICmsAttachedSignature;
                }

                [activatable(Windows.Security.Cryptography.Certificates.ICmsDetachedSignatureFactory, 0x06030000)]
                [marshaling_behavior(agile)]
                [static(Windows.Security.Cryptography.Certificates.ICmsDetachedSignatureStatics, 0x06030000)]
                [threading(both)]
                [version(0x06030000)]
                runtimeclass CmsDetachedSignature
                {
                    [default] interface Windows.Security.Cryptography.Certificates.ICmsDetachedSignature;
                }
            }
        }
    }
}
