<?xml version="1.0"?>
<doc>
    <assembly>
        <name>PInvoke.NCrypt</name>
    </assembly>
    <members>
        <member name="T:PInvoke.NCrypt">
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptEnumStorageProvidersFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptProviderName"/> nested type.
            </content>
            <content>
            Exported functions from the NCrypt.dll Windows library
            that are available to Desktop apps only.
            </content>
            <content>
            Methods and nested types that are not strictly P/Invokes but provide
            a slightly higher level of functionality to ease calling into native code.
            </content>
            <summary>
            Exported functions from the NCrypt.dll Windows library
            that are available to Desktop and Store apps.
            </summary>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.InterfaceIdentifiers"/> nested type.
            </content>
            <content>
            Sourced from: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376242(v=vs.85).aspx
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptKeyDerivationFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptOpenKeyFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptEnumKeysFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptIsAlgSupportedFlags"/> nested enum.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.AlgorithmOperations"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptAlgorithmName"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptDeriveKeyFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptEnumAlgorithmsFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptKeyName"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptSecretAgreementFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptDeleteKeyFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptSignHashFlags"/> nested enum.
            </content>
            <content>
            Contains the <seealso cref="T:PInvoke.NCrypt.BufferType"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.LegacyKeySpec"/> nested class.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.KeyStorageProviders"/> nested class.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptBuffer"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptBufferDesc"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptCreatePersistedKeyFlags"/> nested type.
            </content>
            <content>
            The <see cref="T:PInvoke.NCrypt.NCryptEncryptFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptExportKeyFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptFinalizeKeyFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptSetPropertyFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptGetPropertyFlags"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCryptOpenStorageProviderFlags"/> nested enum.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER"/> nested type.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS"/> nested struct.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.SafeKeyHandle"/> nested class.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.SafeProviderHandle"/> nested class.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.SafeSecretHandle"/> nested class.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.SECURITY_STATUS"/> nested enum.
            </content>
            <content>
            Contains the <see cref="T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/> nested type.
            </content>
            <content>
            Exported functions from the NCrypt.dll Windows library
            that are available to Desktop apps only.
            </content>
            <content>
            Methods and nested types that are not strictly P/Invokes but provide
            a slightly higher level of functionality to ease calling into native code.
            </content>
            <summary>
            Exported functions from the NCrypt.dll Windows library
            that are available to Desktop and Store apps.
            </summary>
            <content>
            Contains the <see cref = "T:PInvoke.NCrypt.NCryptAlgorithmName"/> nested type.
            </content>
            <content>
            Contains the <see cref = "T:PInvoke.NCrypt.NCryptKeyName"/> nested type.
            </content>
            <content>
            Contains the <see cref = "T:PInvoke.NCrypt.NCryptBuffer"/> nested type.
            </content>
            <content>
            Contains the <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> nested type.
            </content>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptEnumStorageProvidersFlags">
            <summary>
            The flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptEnumStorageProviders(System.Int32@,PInvoke.NCrypt.NCryptProviderName*@,PInvoke.NCrypt.NCryptEnumStorageProvidersFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEnumStorageProvidersFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEnumStorageProvidersFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptProviderName">
            <summary>
            Contains the name of a CNG key storage provider. This structure is used with the <see cref="M:PInvoke.NCrypt.NCryptEnumStorageProviders(System.Int32@,PInvoke.NCrypt.NCryptProviderName*@,PInvoke.NCrypt.NCryptEnumStorageProvidersFlags)"/> function to return the names of the registered CNG key storage providers.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptProviderName.pszName">
            <summary>
            A pointer to a null-terminated Unicode string that contains the name of the provider.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptProviderName.pszComment">
            <summary>
            A pointer to a null-terminated Unicode string that contains optional text for the provider.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptProviderName.Name">
            <summary>
            Gets the name of the provider.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptProviderName.Comment">
            <summary>
            Gets optional text for the provider.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEnumStorageProviders(System.Int32@,PInvoke.NCrypt.NCryptProviderName*@,PInvoke.NCrypt.NCryptEnumStorageProvidersFlags)">
            <summary>
            Obtains the names of the registered key storage providers.
            </summary>
            <param name="pdwProviderCount">The address of a DWORD to receive the number of elements in the <paramref name="ppProviderList"/> array.</param>
            <param name="ppProviderList">
            The address of an <see cref="T:PInvoke.NCrypt.NCryptProviderName"/> structure pointer to receive an array of the registered key storage provider names. The variable pointed to by the <paramref name="pdwProviderCount"/> parameter receives the number of elements in this array.
            When this memory is no longer needed, free it by passing this pointer to the <see cref="M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.
            </param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptIsKeyHandle(System.IntPtr)">
            <summary>
            Determines if the specified handle is a CNG key handle.
            </summary>
            <param name="hKey">The handle of the key to test.</param>
            <returns>Returns a nonzero value if the handle is a key handle or zero otherwise.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptOpenStorageProvider(System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)">
            <summary>
            Loads and initializes a CNG key storage provider.
            </summary>
            <param name="providerName">
            A pointer to a null-terminated Unicode string that identifies the key storage provider to load. This is the registered alias of the key storage provider. This parameter is optional and can be NULL. If this parameter is NULL, the default key storage provider is loaded. The <see cref="T:PInvoke.NCrypt.KeyStorageProviders"/> class identifies the built-in key storage providers.
            </param>
            <param name="flags">Flags that modify the behavior of the function.</param>
            <returns>
            A <see cref="T:PInvoke.NCrypt.SafeProviderHandle"/> variable that receives the provider handle. When you have finished using this handle, dispose of it.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptCreatePersistedKey(PInvoke.NCrypt.SafeProviderHandle,System.String,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptCreatePersistedKeyFlags)">
            <summary>
            Creates a new key and stores it in the specified key storage provider. After you create a key by using this function, you can use the NCryptSetProperty function to set its properties; however, the key cannot be used until the NCryptFinalizeKey function is called.
            </summary>
            <param name="provider">
            The handle of the key storage provider to create the key in. This handle is obtained by using the <see cref="M:PInvoke.NCrypt.NCryptOpenStorageProvider(System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.
            </param>
            <param name="algorithmId">
            A null-terminated Unicode string that contains the identifier of the cryptographic algorithm to create the key. This can be one of the standard CNG Algorithm Identifiers defined in <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </param>
            <param name="keyName">
            A pointer to a null-terminated Unicode string that contains the name of the key. If this parameter is NULL, this function will create an ephemeral key that is not persisted.
            </param>
            <param name="legacyKeySpec">
            A legacy identifier that specifies the type of key.
            </param>
            <param name="flags">A set of flags that modify the behavior of this function.</param>
            <returns>
            The address of an <see cref="T:PInvoke.NCrypt.SafeKeyHandle"/> variable that receives the handle of the key. When you have finished using this handle, release it by disposing it.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptOpenKey(PInvoke.NCrypt.SafeProviderHandle,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptOpenKeyFlags)">
            <summary>
            Opens a key that exists in the specified CNG key storage provider.
            </summary>
            <param name="provider">The handle of the key storage provider to open the key from.</param>
            <param name="keyName">A pointer to a null-terminated Unicode string that contains the name of the key to retrieve.</param>
            <param name="legacyKeySpec">A legacy identifier that specifies the type of key.</param>
            <param name="flags">Flags that modify function behavior.</param>
            <returns>
            A pointer to a NCRYPT_KEY_HANDLE variable that receives the key handle. When you have finished using this handle, release it by calling its <see cref="M:System.Runtime.InteropServices.SafeHandle.Dispose"/> method.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptOpenKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.NCryptKeyName)">
            <summary>
            Opens a key that exists in the specified CNG key storage provider.
            </summary>
            <param name="provider">The handle of the key storage provider to open the key from.</param>
            <param name="keyName">The description of the key to open.</param>
            <returns>
            A pointer to a NCRYPT_KEY_HANDLE variable that receives the key handle. When you have finished using this handle, release it by calling its <see cref="M:System.Runtime.InteropServices.SafeHandle.Dispose"/> method.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptExportKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            The NCryptExportKey function exports a CNG key to a memory BLOB.
            </summary>
            <param name="key">A handle of the key to export.</param>
            <param name="exportKey">A handle to a cryptographic key of the destination user. The key data within the exported key BLOB is encrypted by using this key. This ensures that only the destination user is able to make use of the key BLOB.</param>
            <param name="blobType">A null-terminated Unicode string that contains an identifier that specifies the type of BLOB to export. This can be one of the values defined by the <see cref="T:PInvoke.BCrypt.AsymmetricKeyBlobTypes"/> or <see cref="T:PInvoke.BCrypt.SymmetricKeyBlobTypes"/> classes.</param>
            <param name="parameterList">The address of an NCryptBufferDesc structure that receives parameter information for the key. This parameter can be NULL if this information is not needed.</param>
            <param name="flags">Flags that modify function behavior. This can be zero or a combination of one or more of the following values. The set of valid flags is specific to each key storage provider.</param>
            <returns>Returns the exported key.</returns>
            <exception cref="T:PInvoke.SecurityStatusException">Thrown if an error code is returned from the native function.</exception>
            <remarks>
            A service must not call this function from its StartService Function. If a service calls this function from its StartService function, a deadlock can occur, and the service may stop responding.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptImportKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte[],PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            Imports a Cryptography API: Next Generation (CNG) key from a memory BLOB.
            </summary>
            <param name="provider">The handle of the key storage provider.</param>
            <param name="importKey">
            The handle of the cryptographic key with which the key data within the imported key BLOB was encrypted. This must be a handle to the same key that was passed in the hExportKey parameter of the NCryptExportKey function. If this parameter is NULL, the key BLOB is assumed to not be encrypted.
            </param>
            <param name="blobType">
            A null-terminated Unicode string that contains an identifier that specifies the format of the key BLOB. These formats are specific to a particular key storage provider. Commonly a value from <see cref="T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> or <see cref="T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/>.
            </param>
            <param name="parameterList">
            The address of an <see cref="T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that points to an array of buffers that contain parameter information for the key.
            </param>
            <param name="keyData">The address of a buffer that contains the key BLOB to be imported.</param>
            <param name="flags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            If a key name is not supplied, the Microsoft Software KSP treats the key as ephemeral and does not store it persistently. For the NCRYPT_OPAQUETRANSPORT_BLOB type, the key name is stored within the BLOB when it is exported. For other BLOB formats, the name can be supplied in an NCRYPTBUFFER_PKCS_KEY_NAME buffer parameter within the pParameterList parameter.
            On Windows Server 2008 and Windows Vista, only keys imported as PKCS #7 envelope BLOBs (NCRYPT_PKCS7_ENVELOPE_BLOB) or PKCS #8 private key BLOBs (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) can be persisted by using the above method. To persist keys imported through other BLOB types on these platforms, use the method documented in Key Import and Export.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptGetProperty(System.Runtime.InteropServices.SafeHandle,System.String,PInvoke.NCrypt.NCryptGetPropertyFlags)">
            <summary>
            Retrieves the value of a named property for a key storage object.
            </summary>
            <param name="hObject">
            The handle of the object to get the property for. This can be a provider handle (<see cref="T:PInvoke.NCrypt.SafeProviderHandle"/>) or a key handle (<see cref="T:PInvoke.NCrypt.SafeKeyHandle"/>).
            </param>
            <param name="propertyName">
            A pointer to a null-terminated Unicode string that contains the name of the property to retrieve. This can be one of the predefined <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name="flags">Flags that modify function behavior.</param>
            <returns>The property value.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptGetProperty``1(System.Runtime.InteropServices.SafeHandle,System.String,PInvoke.NCrypt.NCryptGetPropertyFlags)">
            <summary>
            Retrieves the value of a named property for a key storage object.
            </summary>
            <typeparam name="T">The type of struct to return the property value as.</typeparam>
            <param name="hObject">
            The handle of the object to get the property for. This can be a provider handle (<see cref="T:PInvoke.NCrypt.SafeProviderHandle"/>) or a key handle (<see cref="T:PInvoke.NCrypt.SafeKeyHandle"/>).
            </param>
            <param name="propertyName">
            A pointer to a null-terminated Unicode string that contains the name of the property to retrieve. This can be one of the predefined <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name="flags">Flags that modify function behavior.</param>
            <returns>The property value.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.String)">
            <summary>
            Sets the value of a named property for a CNG object.
            </summary>
            <param name="hObject">A handle that represents the CNG object to set the property value for.</param>
            <param name="propertyName">
            The name of the property to set. This can be one of the predefined <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name="propertyValue">The new property value.</param>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSetProperty``1(System.Runtime.InteropServices.SafeHandle,System.String,``0,PInvoke.NCrypt.NCryptSetPropertyFlags)">
            <summary>
            Sets the value of a named property for a CNG object.
            </summary>
            <typeparam name="T">The type of value being set.</typeparam>
            <param name="hObject">A handle that represents the CNG object to set the property value for.</param>
            <param name="propertyName">
            The name of the property to set. This can be one of the predefined <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name="propertyValue">The new property value.</param>
            <param name="flags">Flags to pass to <see cref="M:PInvoke.NCrypt.NCryptSetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSetPropertyFlags)"/></param>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.Void*,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Encrypts a block of data.
            </summary>
            <param name="key">
            The handle of the key to use to encrypt the data.
            </param>
            <param name="plaintext">
            The address of a buffer that contains the plaintext to be encrypted. The cbInput parameter contains the size of the plaintext to encrypt.
            </param>
            <param name="paddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the dwFlags parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name="flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            </param>
            <returns>Returns the ciphertext.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDecrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.Void*,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Decrypts a block of data.
            </summary>
            <param name="key">
            The handle of the key to use to decrypt the data.
            </param>
            <param name="ciphertext">
            The address of a buffer that contains the ciphertext to be decrypted. The <paramref name="ciphertext"/> parameter contains the size of the ciphertext to decrypt. For more information, see Remarks.
            </param>
            <param name="paddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the <paramref name="flags"/> parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name="flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name="key"/> parameter.
            </param>
            <returns>Returns the plaintext.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte[],PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Creates a signature of a hash value.
            </summary>
            <param name="key">The handle of the key to use to sign the hash.</param>
            <param name="paddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name="flags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name="hashValue">
            A pointer to a buffer that contains the hash value to sign.
            </param>
            <param name="flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name="key"/> parameter.
            </param>
            <returns>
            The signature produced by this function.
            </returns>
            <remarks>
            To later verify that the signature is valid, call the <see cref="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)"/> function with an identical key and an identical hash of the original data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte[],System.Byte[],PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Verifies that the specified signature matches the specified hash.
            </summary>
            <param name="key">
            The handle of the key to use to decrypt the signature. This must be an identical key or the public key portion of the key pair used to sign the data with the <see cref="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function.
            </param>
            <param name="paddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name="flags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name="hashValue">
            The address of a buffer that contains the hash of the data.
            </param>
            <param name="signature">
            The address of a buffer that contains the signed hash of the data. The <see cref="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature.
            </param>
            <param name="flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            If the key is a symmetric key, this parameter is not used and should be zero.
            If the key is an asymmetric key, this can be one of the following values.
            </param>
            <returns>
            <c>true</c> if the signature is valid; <c>false</c> otherwise.
            </returns>
            <exception cref="T:PInvoke.SecurityStatusException">Thrown if any other error besides an invalid signature occurs.</exception>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt.SafeProviderHandle@,System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)">
            <summary>
            Loads and initializes a CNG key storage provider.
            </summary>
            <param name="phProvider">
            A pointer to a <see cref="T:PInvoke.NCrypt.SafeProviderHandle"/> variable that receives the provider handle. When you have finished using this handle, release it by passing it to the <see cref="M:PInvoke.NCrypt.NCryptFreeObject(System.IntPtr)"/> function.
            </param>
            <param name="pszProviderName">
            A pointer to a null-terminated Unicode string that identifies the key storage provider to load. This is the registered alias of the key storage provider. This parameter is optional and can be NULL. If this parameter is NULL, the default key storage provider is loaded. The <see cref="T:PInvoke.NCrypt.KeyStorageProviders"/> class identifies the built-in key storage providers.
            </param>
            <param name="dwFlags">Flags that modify the behavior of the function.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptCreatePersistedKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle@,System.String,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptCreatePersistedKeyFlags)">
            <summary>
            Creates a new key and stores it in the specified key storage provider. After you create a key by using this function, you can use the NCryptSetProperty function to set its properties; however, the key cannot be used until the NCryptFinalizeKey function is called.
            </summary>
            <param name="hProvider">
            The handle of the key storage provider to create the key in. This handle is obtained by using the <see cref="M:PInvoke.NCrypt.NCryptOpenStorageProvider(System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.
            </param>
            <param name="phKey">
            The address of an <see cref="T:PInvoke.NCrypt.SafeKeyHandle"/> variable that receives the handle of the key. When you have finished using this handle, release it by disposing it.
            </param>
            <param name="pszAlgId">
            A null-terminated Unicode string that contains the identifier of the cryptographic algorithm to create the key. This can be one of the standard CNG Algorithm Identifiers defined in <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </param>
            <param name="pszKeyName">
            A pointer to a null-terminated Unicode string that contains the name of the key. If this parameter is NULL, this function will create an ephemeral key that is not persisted.
            </param>
            <param name="dwLegacyKeySpec">
            A legacy identifier that specifies the type of key.
            </param>
            <param name="dwFlags">A set of flags that modify the behavior of this function.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptOpenKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle@,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptOpenKeyFlags)">
            <summary>
            Opens a key that exists in the specified CNG key storage provider.
            </summary>
            <param name="hProvider">The handle of the key storage provider to open the key from.</param>
            <param name="phKey">A pointer to a NCRYPT_KEY_HANDLE variable that receives the key handle. When you have finished using this handle, release it by calling its <see cref="M:System.Runtime.InteropServices.SafeHandle.Dispose"/> method.</param>
            <param name="pszKeyName">A pointer to a null-terminated Unicode string that contains the name of the key to retrieve.</param>
            <param name="dwLegacyKeySpec">A legacy identifier that specifies the type of key.</param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDeleteKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptDeleteKeyFlags)">
            <summary>
            Deletes a CNG key.
            </summary>
            <param name="hKey">
            The handle of the key to delete. This handle is obtained by using the <see cref="M:PInvoke.NCrypt.NCryptOpenKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle@,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptOpenKeyFlags)"/> function.
            The NCryptDeleteKey function frees the handle. Applications must call <see cref="M:System.Runtime.InteropServices.SafeHandle.SetHandleAsInvalid"/> function on it after calling the <see cref="M:PInvoke.NCrypt.NCryptDeleteKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptDeleteKeyFlags)"/> function.
            </param>
            <param name="dwFlags">Flags that modify function behavior. This can be zero or a combination of values that is specific to each key storage provider.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSecretAgreement(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeSecretHandle@,PInvoke.NCrypt.NCryptSecretAgreementFlags)">
            <summary>
            Creates a secret agreement value from a private and a public key.
            </summary>
            <param name="hPrivKey">The handle of the private key to use to create the secret agreement value. This key and the <paramref name="hPubKey"/> key must come from the same key storage provider.</param>
            <param name="hPubKey">The handle of the public key to use to create the secret agreement value. This key and the <paramref name="hPrivKey"/> key must come from the same key storage provider.</param>
            <param name="phSecret">A pointer to an NCRYPT_SECRET_HANDLE variable that receives a handle that represents the secret agreement value. When this handle is no longer needed, release it by calling its <see cref="M:System.Runtime.InteropServices.SafeHandle.Dispose"/> method.</param>
            <param name="dwFlags">Flags that modify function behavior. The set of valid flags is specific to each key storage provider.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)">
            <summary>
            Creates a key from another key by using the specified key derivation function. The function returns the key in a byte array.
            </summary>
            <param name="hKey">Handle of the key derivation function (KDF) key.</param>
            <param name="pParameterList">The address of a <see cref="T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. The parameters can be specific to a KDF or generic. See https://msdn.microsoft.com/en-us/library/windows/desktop/hh448516(v=vs.85).aspx for more information.</param>
            <param name="pbDerivedKey">Address of a buffer that receives the key. The <paramref name="cbDerivedKey"/> parameter contains the size, in bytes, of the key buffer.</param>
            <param name="cbDerivedKey">Size, in bytes, of the buffer pointed to by the <paramref name="pbDerivedKey"/> parameter.</param>
            <param name="pcbResult">Pointer to a DWORD that receives the number of bytes copied to the buffer pointed to by the <paramref name="pbDerivedKey"/> parameter.</param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDeriveKey(PInvoke.NCrypt.SafeSecretHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptDeriveKeyFlags)">
            <summary>
            Derives a key from a secret agreement value. This function is intended to be used as part of a secret agreement procedure using persisted secret agreement keys. To derive key material by using a persisted secret instead, use the <see cref="M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)"/> function.
            </summary>
            <param name="hSharedSecret">The secret agreement handle to create the key from. This handle is obtained from the <see cref="M:PInvoke.NCrypt.NCryptSecretAgreement(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeSecretHandle@,PInvoke.NCrypt.NCryptSecretAgreementFlags)"/> function.</param>
            <param name="pwszKDF">A pointer to a null-terminated Unicode string that identifies the key derivation function (KDF) to use to derive the key. It can be one of the strings defined in <see cref="T:PInvoke.BCrypt.KeyDerivationFunctions"/>.</param>
            <param name="pParameterList">The address of a <see cref="T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. This parameter is optional and can be NULL if it is not needed.</param>
            <param name="pbDerivedKey">The address of a buffer that receives the key. The <paramref name="cbDerivedKey"/> parameter contains the size of this buffer. If this parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by the <paramref name="pcbResult"/> parameter.</param>
            <param name="cbDerivedKey">The size, in bytes, of the <paramref name="pbDerivedKey"/> buffer.</param>
            <param name="pcbResult">A pointer to a DWORD that receives the number of bytes that were copied to the <paramref name="pbDerivedKey"/> buffer. If the <paramref name="pbDerivedKey"/> parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by this parameter.</param>
            <param name="dwFlags">A set of flags that modify the behavior of this function.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEnumAlgorithms(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.AlgorithmOperations,System.Int32@,PInvoke.NCrypt.NCryptAlgorithmName*@,PInvoke.NCrypt.NCryptEnumAlgorithmsFlags)">
            <summary>
            Obtains the names of the algorithms that are supported by the specified key storage provider.
            </summary>
            <param name="hProvider">The handle of the key storage provider to enumerate the algorithms for. This handle is obtained with the <see cref="M:PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt.SafeProviderHandle@,System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.</param>
            <param name="dwAlgOperations">
            A set of values that determine which algorithm classes to enumerate. This can be zero or a combination of one or more of the values in <see cref="T:PInvoke.NCrypt.AlgorithmOperations"/>. If dwAlgOperations is zero, all algorithms are enumerated.
            </param>
            <param name="pdwAlgCount">The address of a DWORD that receives the number of elements in the <paramref name="ppAlgList"/> array.</param>
            <param name="ppAlgList">
            The address of an <see cref="T:PInvoke.NCrypt.NCryptAlgorithmName"/> structure pointer that receives an array of the registered algorithm names. The variable pointed to by the <paramref name="pdwAlgCount"/> parameter receives the number of elements in this array.
            When this memory is no longer needed, it must be freed by passing this pointer to the <see cref="M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.
            </param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEnumKeys(PInvoke.NCrypt.SafeProviderHandle,System.String,PInvoke.NCrypt.NCryptKeyName*@,System.Void*@,PInvoke.NCrypt.NCryptEnumKeysFlags)">
            <summary>
            Obtains the names of the keys that are stored by the provider.
            </summary>
            <param name="hProvider">The handle of the key storage provider to enumerate the keys for. This handle is obtained with the <see cref="M:PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt.SafeProviderHandle@,System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.</param>
            <param name="pszScope">This parameter is not currently used and must be NULL.</param>
            <param name="ppKeyName">The address of a pointer to an <see cref="T:PInvoke.NCrypt.NCryptKeyName"/> structure that receives the name of the retrieved key. When the application has finished using this memory, free it by calling the <see cref="M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.</param>
            <param name="ppEnumState">
            The address of a VOID pointer that receives enumeration state information that is used in subsequent calls to this function. This information only has meaning to the key storage provider and is opaque to the caller. The key storage provider uses this information to determine which item is next in the enumeration. If the variable pointed to by this parameter contains NULL, the enumeration is started from the beginning.
            When this memory is no longer needed, it must be freed by passing this pointer to the <see cref="M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.
            </param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>
            Returns a status code that indicates the success or failure of the function.
            In particular, <see cref="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NO_MORE_ITEMS"/> is returned when
            the end of the enumeration has been reached.
            </returns>
            <remarks>
            This function retrieves only one item each time it is called.
            The state of the enumeration is stored in the variable pointed to by the <paramref name="ppEnumState"/> parameter,
            so this must be preserved between calls to this function.
            When the last key stored by the provider has been retrieved, this function will return
            <see cref="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NO_MORE_ITEMS"/> the next time it is called.
            To start the enumeration over, set the variable pointed to by the <paramref name="ppEnumState"/> parameter to NULL,
            free the memory pointed to by the <paramref name="ppKeyName"/> parameter, if it is not NULL,
            and call this function again.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptIsAlgSupported(PInvoke.NCrypt.SafeProviderHandle,System.String,PInvoke.NCrypt.NCryptIsAlgSupportedFlags)">
            <summary>
            Determines if a CNG key storage provider supports a specific cryptographic algorithm.
            </summary>
            <param name="hProvider">The handle of the key storage provider. This handle is obtained with the <see cref="M:PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt.SafeProviderHandle@,System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.</param>
            <param name="pszAlgId">
            A pointer to a null-terminated Unicode string that identifies the cryptographic algorithm in question.
            Typical values for this argument are defined in <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/>.
            </param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptFinalizeKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptFinalizeKeyFlags)">
            <summary>
            Completes a CNG key storage key. The key cannot be used until this function has been called.
            </summary>
            <param name="hKey">
            The handle of the key to complete. This handle is obtained by calling the <see cref="M:PInvoke.NCrypt.NCryptCreatePersistedKey(PInvoke.NCrypt.SafeProviderHandle,System.String,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptCreatePersistedKeyFlags)"/> function.
            </param>
            <param name="dwFlags">
            Flags that modify function behavior.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptExportKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            The NCryptExportKey function exports a CNG key to a memory BLOB.
            </summary>
            <param name="hKey">A handle of the key to export.</param>
            <param name="hExportKey">A handle to a cryptographic key of the destination user. The key data within the exported key BLOB is encrypted by using this key. This ensures that only the destination user is able to make use of the key BLOB.</param>
            <param name="pszBlobType">A null-terminated Unicode string that contains an identifier that specifies the type of BLOB to export. This can be one of the values defined by the <see cref="T:PInvoke.BCrypt.AsymmetricKeyBlobTypes"/> or <see cref="T:PInvoke.BCrypt.SymmetricKeyBlobTypes"/> classes.</param>
            <param name="pParameterList">The address of an NCryptBufferDesc structure that receives parameter information for the key. This parameter can be NULL if this information is not needed.</param>
            <param name="pbOutput">The address of a buffer that receives the key BLOB. The <paramref name="cbOutput"/> parameter contains the size of this buffer. If this parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by the <paramref name="pcbResult"/> parameter.</param>
            <param name="cbOutput">The size, in bytes, of the <paramref name="pbOutput" /> buffer.</param>
            <param name="pcbResult">The address of a DWORD variable that receives the number of bytes copied to the <paramref name="pbOutput"/> buffer. If the <paramref name="pbOutput"/> parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by this parameter.</param>
            <param name="dwFlags">Flags that modify function behavior. This can be zero or a combination of one or more of the following values. The set of valid flags is specific to each key storage provider.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            A service must not call this function from its StartService Function. If a service calls this function from its StartService function, a deadlock can occur, and the service may stop responding.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptImportKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,PInvoke.NCrypt.SafeKeyHandle@,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            Imports a Cryptography API: Next Generation (CNG) key from a memory BLOB.
            </summary>
            <param name="hProvider">The handle of the key storage provider.</param>
            <param name="hImportKey">
            The handle of the cryptographic key with which the key data within the imported key BLOB was encrypted. This must be a handle to the same key that was passed in the hExportKey parameter of the NCryptExportKey function. If this parameter is NULL, the key BLOB is assumed to not be encrypted.
            </param>
            <param name="pszBlobType">
            A null-terminated Unicode string that contains an identifier that specifies the format of the key BLOB. These formats are specific to a particular key storage provider. Commonly a value from <see cref="T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> or <see cref="T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/>.
            </param>
            <param name="pParameterList">
            The address of an <see cref="T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that points to an array of buffers that contain parameter information for the key.
            </param>
            <param name="phKey">
            The address of an NCRYPT_KEY_HANDLE variable that receives the handle of the key. When you have finished using this handle, release it by calling <see cref="M:System.Runtime.InteropServices.SafeHandle.Dispose"/> on the value.
            </param>
            <param name="pbData">The address of a buffer that contains the key BLOB to be imported. The <paramref name="cbData"/> parameter contains the size of this buffer.</param>
            <param name="cbData">The size, in bytes, of the <paramref name="pbData"/> buffer.</param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            If a key name is not supplied, the Microsoft Software KSP treats the key as ephemeral and does not store it persistently. For the NCRYPT_OPAQUETRANSPORT_BLOB type, the key name is stored within the BLOB when it is exported. For other BLOB formats, the name can be supplied in an NCRYPTBUFFER_PKCS_KEY_NAME buffer parameter within the pParameterList parameter.
            On Windows Server 2008 and Windows Vista, only keys imported as PKCS #7 envelope BLOBs (NCRYPT_PKCS7_ENVELOPE_BLOB) or PKCS #8 private key BLOBs (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) can be persisted by using the above method. To persist keys imported through other BLOB types on these platforms, use the method documented in Key Import and Export.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptGetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptGetPropertyFlags)">
            <summary>
            Retrieves the value of a named property for a key storage object.
            </summary>
            <param name="hObject">
            The handle of the object to get the property for. This can be a provider handle (<see cref="T:PInvoke.NCrypt.SafeProviderHandle"/>) or a key handle (<see cref="T:PInvoke.NCrypt.SafeKeyHandle"/>).
            </param>
            <param name="pszProperty">
            A pointer to a null-terminated Unicode string that contains the name of the property to retrieve. This can be one of the predefined <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name="pbOutput">
            The address of a buffer that receives the property value. The <paramref name="cbOutput"/> parameter contains the size of this buffer.
            To calculate the size required for the buffer, set this parameter to NULL. The size, in bytes, required is returned in the location pointed to by the <paramref name="pcbResult"/> parameter.
            </param>
            <param name="cbOutput">
            The size, in bytes, of the <paramref name="pbOutput"/> buffer.
            </param>
            <param name="pcbResult">
            A pointer to a DWORD variable that receives the number of bytes that were copied to the <paramref name="pbOutput"/> buffer.
            If the <paramref name="pbOutput"/> parameter is NULL, the size, in bytes, required for the buffer is placed in the location pointed to by this parameter.
            </param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSetPropertyFlags)">
            <summary>
            Sets the value for a named property for a CNG key storage object.
            </summary>
            <param name="hObject">The handle of the key storage object to set the property for.</param>
            <param name="pszProperty">
            A pointer to a null-terminated Unicode string that contains the name of the property to set. This can be one of the predefined <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name="pbInput">
            The address of a buffer that contains the new property value. The <paramref name="cbInput"/> parameter contains the size of this buffer.
            </param>
            <param name="cbInput">
            The size, in bytes, of the <paramref name="pbInput"/> buffer.
            </param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.String,System.Int32,PInvoke.NCrypt.NCryptSetPropertyFlags)">
            <summary>
            Sets the value for a named property for a CNG key storage object.
            </summary>
            <param name="hObject">The handle of the key storage object to set the property for.</param>
            <param name="pszProperty">
            A pointer to a null-terminated Unicode string that contains the name of the property to set. This can be one of the predefined <see cref="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name="pbInput">
            The address of a buffer that contains the new property value. The <paramref name="cbInput"/> parameter contains the size of this buffer.
            </param>
            <param name="cbInput">
            The size, in bytes, of the <paramref name="pbInput"/> buffer.
            </param>
            <param name="dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte*,System.Int32,System.Void*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Encrypts a block of data.
            </summary>
            <param name="hKey">
            The handle of the key to use to encrypt the data.
            </param>
            <param name="pbInput">
            The address of a buffer that contains the plaintext to be encrypted. The cbInput parameter contains the size of the plaintext to encrypt.
            </param>
            <param name="cbInput">
            The number of bytes in the pbInput buffer to encrypt.
            </param>
            <param name="pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the dwFlags parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name="pbOutput">
            The address of the buffer that receives the ciphertext produced by this function. The <paramref name="cbOutput"/> parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size needed for the ciphertext of the data passed in the <paramref name="pbInput"/> parameter. In this case, the location pointed to by the <paramref name="pcbResult"/> parameter contains this size, and the function returns <see cref="F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.The <paramref name="pPaddingInfo"/> parameter is not modified.
            If the values of both the <paramref name="pbOutput"/> and <paramref name="pbInput"/> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag is returned in the <paramref name="pPaddingInfo"/> parameter.
            </param>
            <param name="cbOutput">
            The size, in bytes, of the <paramref name="pbOutput"/> buffer. This parameter is ignored if the <paramref name="pbOutput"/> parameter is NULL.
            </param>
            <param name="pcbResult">
            A pointer to a DWORD variable that receives the number of bytes copied to the <paramref name="pbOutput"/> buffer. If <paramref name="pbOutput"/> is NULL, this receives the size, in bytes, required for the ciphertext.
            </param>
            <param name="dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            The <paramref name="pbInput"/> and <paramref name="pbOutput"/> parameters can point to the same buffer. In this case, this function will perform the encryption in place. It is possible that the encrypted data size will be larger than the unencrypted data size, so the buffer must be large enough to hold the encrypted data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDecrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte*,System.Int32,System.Void*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Decrypts a block of data.
            </summary>
            <param name="hKey">
            The handle of the key to use to decrypt the data.
            </param>
            <param name="pbInput">
            The address of a buffer that contains the ciphertext to be decrypted. The <paramref name="cbInput"/> parameter contains the size of the ciphertext to decrypt. For more information, see Remarks.
            </param>
            <param name="cbInput">
            The number of bytes in the <paramref name="pbInput"/> buffer to decrypt.
            </param>
            <param name="pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the <paramref name="dwFlags"/> parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name="pbOutput">
            The address of a buffer to receive the plaintext produced by this function. The cbOutput parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size required for the plaintext of the encrypted data passed in the <paramref name="pbInput"/> parameter.In this case, the location pointed to by the <paramref name="pcbResult"/> parameter contains this size, and the function returns <see cref="F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.
            If the values of both the <paramref name="pbOutput"/> and <paramref name="pbInput" /> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag, passed in the <paramref name="pPaddingInfo"/> parameter, is verified.
            </param>
            <param name="cbOutput">
            The size, in bytes, of the <paramref name="pbOutput"/> buffer. This parameter is ignored if the <paramref name="pbOutput"/> parameter is NULL.
            </param>
            <param name="pcbResult">
            A pointer to a ULONG variable to receive the number of bytes copied to the <paramref name="pbOutput"/> buffer. If <paramref name="pbOutput"/> is NULL, this receives the size, in bytes, required for the plaintext.
            </param>
            <param name="dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name="hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Creates a signature of a hash value.
            </summary>
            <param name="hKey">The handle of the key to use to sign the hash.</param>
            <param name="pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name="dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name="pbHashValue">
            A pointer to a buffer that contains the hash value to sign. The <paramref name="cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name="cbHashValue">
            The number of bytes in the <paramref name="pbHashValue"/> buffer to sign.
            </param>
            <param name="pbSignature">
            The address of a buffer to receive the signature produced by this function. The <paramref name="cbSignature"/> parameter contains the size of this buffer.
            If this parameter is NULL, this function will calculate the size required for the signature and return the size in the location pointed to by the <paramref name="pcbResult"/> parameter.
            </param>
            <param name="cbSignature">
            The size, in bytes, of the <paramref name="pbSignature"/> buffer. This parameter is ignored if the <paramref name="pbSignature"/> parameter is NULL.
            </param>
            <param name="pcbResult">
            A pointer to a ULONG variable that receives the number of bytes copied to the <paramref name="pbSignature"/> buffer.
            If <paramref name="pbSignature"/> is NULL, this receives the size, in bytes, required for the signature.
            </param>
            <param name="dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name="hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            To later verify that the signature is valid, call the <see cref="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)"/> function with an identical key and an identical hash of the original data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Verifies that the specified signature matches the specified hash.
            </summary>
            <param name="hKey">
            The handle of the key to use to decrypt the signature. This must be an identical key or the public key portion of the key pair used to sign the data with the <see cref="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function.
            </param>
            <param name="pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name="dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name="pbHashValue">
            The address of a buffer that contains the hash of the data. The <paramref name="cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name="cbHashValue">
            The size, in bytes, of the <paramref name="pbHashValue"/> buffer.
            </param>
            <param name="pbSignature">
            The address of a buffer that contains the signed hash of the data. The <see cref="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature. The <paramref name="cbSignature"/> parameter contains the size of this buffer.
            </param>
            <param name="cbSignature">
            The size, in bytes, of the <paramref name="pbSignature"/> buffer. The <see cref="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature.
            </param>
            <param name="dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            If the key is a symmetric key, this parameter is not used and should be zero.
            If the key is an asymmetric key, this can be one of the following values.
            </param>
            <returns>
            Returns a status code that indicates the success or failure of the function.
            In particular, an invalid signature will produce a <see cref="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_SIGNATURE"/> result.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)">
            <summary>
            Releases a block of memory allocated by a CNG key storage provider.
            </summary>
            <param name="pvInput">The address of the memory to be released.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptFreeObject(System.IntPtr)">
            <summary>
            Frees a CNG key storage object.
            </summary>
            <param name="hObject">
            The handle of the object to free. This can be either a provider handle (<see cref="T:PInvoke.NCrypt.SafeProviderHandle"/>) or a key handle (<see cref="T:PInvoke.NCrypt.SafeKeyHandle"/>).
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="T:PInvoke.NCrypt.InterfaceIdentifiers">
            <summary>
            Identifiers that are used to identify a CNG cryptographic interface.
            In CNG, an interface identifies the type of cryptographic behavior that a provider supports. For example, a provider may be a random number generator or it may be a hashing provider.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.InterfaceIdentifiers.NCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE">
            <summary>
            The algorithm belongs to the asymmetric encryption class of algorithms.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.InterfaceIdentifiers.NCRYPT_SECRET_AGREEMENT_INTERFACE">
            <summary>
            The algorithm belongs to the secret agreement (Diffie-Hellman) class of algorithms.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.InterfaceIdentifiers.NCRYPT_SIGNATURE_INTERFACE">
            <summary>
            The algorithm belongs to the signature class of algorithms.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.InterfaceIdentifiers.NCRYPT_KEY_STORAGE_INTERFACE">
            <summary>
            The key storage interface.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.InterfaceIdentifiers.NCRYPT_SCHANNEL_INTERFACE">
            <summary>
            The Schannel signature interface.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.InterfaceIdentifiers.NCRYPT_SCHANNEL_SIGNATURE_INTERFACE">
            <summary>
            The Schannel cipher suite interface.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_MAX_PROPERTY_DATA">
            <summary>
            Specifies the maximum size of a property value, in bytes.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_MAX_PROPERTY_NAME">
            <summary>
            Specifies the maximum size of a property name, in characters.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_EXPORT_POLICY_PROPERTY.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_EXPORT_POLICY_PROPERTY.NCRYPT_ALLOW_EXPORT_FLAG">
            <summary>
            The private key can be exported.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_EXPORT_POLICY_PROPERTY.NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG">
            <summary>
            The private key can be exported in plaintext form.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_EXPORT_POLICY_PROPERTY.NCRYPT_ALLOW_ARCHIVING_FLAG">
            <summary>
            The private key can be exported once for archiving purposes. This flag only applies to the original key handle on which it is set. This policy can only be applied to the original key handle. After the key handle has been closed, the key can no longer be exported for archiving purposes.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_EXPORT_POLICY_PROPERTY.NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG">
            <summary>
            The private key can be exported once in plaintext form for archiving purposes. This flag only applies to the original key handle on which it is set. This policy can only be applied to the original key handle. After the key handle has been closed, the key can no longer be exported for archiving purposes.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_IMPL_TYPE_PROPERTY.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_IMPL_TYPE_PROPERTY.NCRYPT_IMPL_HARDWARE_FLAG">
            <summary>
            The provider is hardware based.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_IMPL_TYPE_PROPERTY.NCRYPT_IMPL_SOFTWARE_FLAG">
            <summary>
            The provider is software based.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_IMPL_TYPE_PROPERTY.NCRYPT_IMPL_REMOVABLE_FLAG">
            <summary>
            The provider is removable.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_IMPL_TYPE_PROPERTY.NCRYPT_IMPL_HARDWARE_RNG_FLAG">
            <summary>
            The provider is a hardware based random number generator.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_TYPE_PROPERTY.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_TYPE_PROPERTY.NCRYPT_MACHINE_KEY_FLAG">
            <summary>
            The key applies to the local computer. If this flag is not present, the key applies to the current user.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_USAGE_PROPERTY.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_USAGE_PROPERTY.NCRYPT_ALLOW_DECRYPT_FLAG">
            <summary>
            The key can be used for decryption.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_USAGE_PROPERTY.NCRYPT_ALLOW_SIGNING_FLAG">
            <summary>
            The key can be used for signing.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_USAGE_PROPERTY.NCRYPT_ALLOW_KEY_AGREEMENT_FLAG">
            <summary>
            The key can be used for secret agreement encryption.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_USAGE_PROPERTY.NCRYPT_ALLOW_ALL_USAGES">
            <summary>
            The key can be used for any purpose.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_ALGORITHM_GROUP_PROPERTY.NCRYPT_RSA_ALGORITHM_GROUP">
            <summary>
            The RSA algorithm group.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_ALGORITHM_GROUP_PROPERTY.NCRYPT_DH_ALGORITHM_GROUP">
            <summary>
            The Diffie-Hellman algorithm group.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_ALGORITHM_GROUP_PROPERTY.NCRYPT_DSA_ALGORITHM_GROUP">
            <summary>
            The DSA algorithm group.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_ALGORITHM_GROUP_PROPERTY.NCRYPT_ECDSA_ALGORITHM_GROUP">
            <summary>
            The elliptic curve DSA algorithm group.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_ALGORITHM_GROUP_PROPERTY.NCRYPT_ECDH_ALGORITHM_GROUP">
            <summary>
            The elliptic curve Diffie-Hellman algorithm group.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptKeyDerivationFlags">
            <summary>
            Flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyDerivationFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyDerivationFlags.BCRYPT_CAPI_AES_FLAG">
            <summary>
            Specifies that the target algorithm is AES and that the key therefore must be double expanded. This flag is only valid with the CAPI_KDF algorithm.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyDerivationFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptOpenKeyFlags">
            <summary>
            The flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptOpenKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle@,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptOpenKeyFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptOpenKeyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptOpenKeyFlags.NCRYPT_MACHINE_KEY_FLAG">
            <summary>
            Open the key for the local computer. If this flag is not present, the current user key is opened.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptOpenKeyFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptEnumKeysFlags">
            <summary>
            The flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptEnumKeys(PInvoke.NCrypt.SafeProviderHandle,System.String,PInvoke.NCrypt.NCryptKeyName*@,System.Void*@,PInvoke.NCrypt.NCryptEnumKeysFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEnumKeysFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptIsAlgSupportedFlags">
            <summary>
            Flags that can be passed to the <see cref="M:PInvoke.NCrypt.NCryptIsAlgSupported(PInvoke.NCrypt.SafeProviderHandle,System.String,PInvoke.NCrypt.NCryptIsAlgSupportedFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptIsAlgSupportedFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptIsAlgSupportedFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.AlgorithmOperations">
            <summary>
            Algorithm operations that may be enumerated.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AlgorithmOperations.All">
            <summary>
            Enumerate all algorithms.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_CIPHER_OPERATION">
            <summary>
            Include the cipher algorithms in the enumeration.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_HASH_OPERATION">
            <summary>
            Include the hash algorithms in the enumeration.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION">
            <summary>
            Include the asymmetric encryption algorithms in the enumeration.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_SECRET_AGREEMENT_OPERATION">
            <summary>
            Include the secret agreement algorithms in the enumeration.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_SIGNATURE_OPERATION">
            <summary>
            Include the signature algorithms in the enumeration.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_RNG_OPERATION">
            <summary>
            Include the random number generator (RNG) algorithms in the enumeration.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.AsymmetricKeyBlobTypes">
            <summary>
            Identifies the blob types of asymmetric keys.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AsymmetricKeyBlobTypes.NCRYPT_CIPHER_KEY_BLOB">
            <summary>
            The BLOB is a cipher key contained in a NCRYPT_KEY_BLOB_HEADER structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AsymmetricKeyBlobTypes.NCRYPT_OPAQUETRANSPORT_BLOB">
            <summary>
            The BLOB is a key in a format that is specific to a single CSP and is suitable for transport. Opaque BLOBs are not transferable and must be imported by using the same CSP that generated the BLOB.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AsymmetricKeyBlobTypes.NCRYPT_PKCS7_ENVELOPE_BLOB">
            <summary>
            The BLOB is a PKCS #7 envelope BLOB. The parameters identified by the pParameterList parameter either can or must contain the following parameters, as indicated by the Required or optional column.
            <list type="bullet">
            <item>NCRYPTBUFFER_CERT_BLOB: required</item>
            <item>NCRYPTBUFFER_PKCS_KEY_NAME: optional</item>
            </list>
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AsymmetricKeyBlobTypes.NCRYPT_PKCS8_PRIVATE_KEY_BLOB">
            <summary>
            The BLOB is a PKCS #8 private key BLOB. The parameters identified by the pParameterList parameter either can or must contain the following parameters, as indicated by the Required or optional column.
            <list type="bullet">
            <item>NCRYPTBUFFER_PKCS_KEY_NAME: optional</item>
            <item>NCRYPTBUFFER_PKCS_SECRET: optional</item>
            </list>
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.AsymmetricKeyBlobTypes.NCRYPT_PROTECTED_KEY_BLOB">
            <summary>
            The BLOB is a protected key contained in a <see cref="T:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER"/> structure.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.AsymmetricKeyBlobTypes.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> class.
            </summary>
            <remarks>
            Suppresses generation of a public default constructor.
            </remarks>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptAlgorithmName">
            <summary>
            The NCryptAlgorithmName structure is used to contain information about a CNG algorithm.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptAlgorithmName.pszName">
            <summary>
            A pointer to a null-terminated Unicode string that contains the name of the algorithm. This can be one of the standard <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptAlgorithmName.dwClass">
            <summary>
            A DWORD value that defines which algorithm class this algorithm belongs to.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptAlgorithmName.dwAlgOperations">
            <summary>
            A DWORD value that defines which operational classes this algorithm belongs to. This can be a combination of one or more of the following values:
            <see cref="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION"/>
            <see cref="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_SECRET_AGREEMENT_OPERATION"/>
            <see cref="F:PInvoke.NCrypt.AlgorithmOperations.NCRYPT_SIGNATURE_OPERATION"/>
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptAlgorithmName.dwFlags">
            <summary>
            A set of flags that provide more information about the algorithm.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptAlgorithmName.Name">
            <summary>
            Gets the name of the algorithm. This can be one of the standard <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptAlgorithmName.pszName_IntPtr">
            <summary>
            A pointer to a null-terminated Unicode string that contains the name of the algorithm. This can be one of the standard <see cref = "T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptDeriveKeyFlags">
            <summary>
            The flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptDeriveKey(PInvoke.NCrypt.SafeSecretHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptDeriveKeyFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptDeriveKeyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptDeriveKeyFlags.KDF_USE_SECRET_AS_HMAC_KEY_FLAG">
            <summary>
            The secret agreement value will also serve as the HMAC key. If this flag is specified, the KDF_HMAC_KEY parameter should not be included in the set of parameters in the pParameterList parameter. This flag is only used by the <see cref="F:PInvoke.BCrypt.KeyDerivationFunctions.BCRYPT_KDF_HMAC"/> key derivation function.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptEnumAlgorithmsFlags">
            <summary>
            The flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptEnumAlgorithms(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.AlgorithmOperations,System.Int32@,PInvoke.NCrypt.NCryptAlgorithmName*@,PInvoke.NCrypt.NCryptEnumAlgorithmsFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEnumAlgorithmsFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEnumAlgorithmsFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptKeyName">
            <summary>
            Contains information about a CNG key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyName.pszName">
            <summary>
            A pointer to a null-terminated Unicode string that contains the name of the key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyName.pszAlgid">
            <summary>
            A pointer to a null-terminated Unicode string that contains the identifier of the cryptographic algorithm that the key was created with. This can be one of the standard <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyName.dwLegacyKeySpec">
            <summary>
            A legacy identifier that specifies the type of key
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyName.dwFlags">
            <summary>
            A set of flags that provide more information about the key.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptKeyName.Flags">
            <summary>
            Possible flags for the <see cref="F:PInvoke.NCrypt.NCryptKeyName.dwFlags"/> field.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptKeyName.Flags.NCRYPT_MACHINE_KEY_FLAG">
            <summary>
            The key applies to the local computer. If this flag is not present, the key applies to the current user.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptKeyName.Name">
            <summary>
            Gets the name of the key.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptKeyName.Algid">
            <summary>
            Gets the identifier of the cryptographic algorithm that the key was created with. This can be one of the standard <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptKeyName.pszName_IntPtr">
            <summary>
            A pointer to a null-terminated Unicode string that contains the name of the key.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptKeyName.pszAlgid_IntPtr">
            <summary>
            A pointer to a null-terminated Unicode string that contains the identifier of the cryptographic algorithm that the key was created with. This can be one of the standard <see cref = "T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or the identifier for another registered algorithm.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptSecretAgreementFlags">
            <summary>
            The flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptSecretAgreement(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeSecretHandle@,PInvoke.NCrypt.NCryptSecretAgreementFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSecretAgreementFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSecretAgreementFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptDeleteKeyFlags">
            <summary>
            The flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptDeleteKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptDeleteKeyFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptDeleteKeyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptDeleteKeyFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptSignHashFlags">
            <summary>
            Flags that can be passed to <see cref="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/>.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSignHashFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSignHashFlags.BCRYPT_PAD_PKCS1">
            <summary>
            Use the PKCS1 padding scheme. The pPaddingInfo parameter is a pointer to a <see cref="T:PInvoke.BCrypt.BCRYPT_PKCS1_PADDING_INFO"/> structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSignHashFlags.BCRYPT_PAD_PSS">
            <summary>
            Use the Probabilistic Signature Scheme (PSS) padding scheme. The pPaddingInfo parameter is a pointer to a <see cref="T:PInvoke.BCrypt.BCRYPT_PSS_PADDING_INFO"/> structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSignHashFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.BufferType">
            <summary>
            Types of data stored in <see cref="T:PInvoke.NCrypt.NCryptBuffer"/>.
            </summary>
            <seealso cref="T:PInvoke.BCrypt.BufferType"/>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_HASH_ALGORITHM">
            <summary>
            The buffer is a key derivation function (KDF) parameter that contains a null-terminated Unicode string that identifies the hash algorithm. This can be one of the standard hash algorithm identifiers from CNG Algorithm Identifiers or the identifier for another registered hash algorithm.
            The size specified by the <see cref="F:PInvoke.NCrypt.NCryptBuffer.cbBuffer"/> member of this structure must include the terminating NULL character.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_SECRET_PREPEND">
            <summary>
            The buffer is a KDF parameter that contains the value to add to the beginning of the message that is input to the hash function.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_SECRET_APPEND">
            <summary>
            The buffer is a KDF parameter that contains the value to add to the end of the message that is input to the hash function.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_HMAC_KEY">
            <summary>
            The buffer is a KDF parameter that contains the plain text value of the HMAC key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_TLS_PRF_LABEL">
            <summary>
            The buffer is a KDF parameter that contains an ANSI string that contains the transport layer security (TLS) pseudo-random function (PRF) label.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_TLS_PRF_SEED">
            <summary>
            The buffer is a KDF parameter that contains the PRF seed value. The seed must be 64 bytes long.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_SECRET_HANDLE">
            <summary>
            The buffer is a KDF parameter that contains the secret agreement handle. The <see cref="F:PInvoke.NCrypt.NCryptBuffer.pvBuffer"/> member contains a BCRYPT_SECRET_HANDLE value and is not a pointer.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_TLS_PRF_PROTOCOL">
            <summary>
            The buffer is a KDF parameter that contains a DWORD value identifying the SSL/TLS protocol version whose PRF algorithm is to be used.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_ALGORITHMID">
            <summary>
            The buffer is a KDF parameter that contains the byte array to use as the AlgorithmID subfield of the OtherInfo parameter to the SP 800-56A KDF.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_PARTYUINFO">
            <summary>
            The buffer is a KDF parameter that contains the byte array to use as the PartyUInfo subfield of the OtherInfo parameter to the SP 800-56A KDF.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_PARTYVINFO">
            <summary>
            The buffer is a KDF parameter that contains the byte array to use as the PartyVInfo subfield of the OtherInfo parameter to the SP 800-56A KDF.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_SUPPPUBINFO">
            <summary>
            The buffer is a KDF parameter that contains the byte array to use as the SuppPubInfo subfield of the OtherInfo parameter to the SP 800-56A KDF.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.KDF_SUPPPRIVINFO">
            <summary>
            The buffer is a KDF parameter that contains the byte array to use as the SuppPrivInfo subfield of the OtherInfo parameter to the SP 800-56A KDF.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_SSL_CLIENT_RANDOM">
            <summary>
            The buffer contains the random number of the SSL client.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_SSL_SERVER_RANDOM">
            <summary>
            The buffer contains the random number of the SSL server.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_SSL_HIGHEST_VERSION">
            <summary>
            The buffer contains the highest SSL version supported.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_SSL_CLEAR_KEY">
            <summary>
            The buffer contains the clear portion of the SSL master key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_SSL_KEY_ARG_DATA">
            <summary>
            The buffer contains the SSL key argument data.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_PKCS_OID">
            <summary>
            The buffer contains a null-terminated ANSI string that contains the PKCS object identifier.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_PKCS_ALG_OID">
            <summary>
            The buffer contains a null-terminated ANSI string that contains the PKCS algorithm object identifier.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_PKCS_ALG_PARAM">
            <summary>
            The buffer contains the PKCS algorithm parameters.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_PKCS_ALG_ID">
            <summary>
            The buffer contains the PKCS algorithm identifier.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_PKCS_ATTRS">
            <summary>
            The buffer contains the PKCS attributes.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_PKCS_KEY_NAME">
            <summary>
            The buffer contains a null-terminated Unicode string that contains the key name.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_PKCS_SECRET">
            <summary>
            The buffer contains a null-terminated Unicode string that contains the PKCS8 password. This parameter is optional and can be NULL.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.BufferType.NCRYPTBUFFER_CERT_BLOB">
            <summary>
            The buffer contains a serialized certificate store that contains the PKCS certificate. This serialized store is obtained by using the CertSaveStore function with the CERT_STORE_SAVE_TO_MEMORY option. When this property is being retrieved, you can access the certificate store by passing this serialized store to the CertOpenStore function with the CERT_STORE_PROV_SERIALIZED option.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.LegacyKeySpec">
            <summary>
            A legacy identifier that specifies the type of key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.LegacyKeySpec.None">
            <summary>
            None of the other types.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.LegacyKeySpec.AT_KEYEXCHANGE">
            <summary>
            The key is a key exchange key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.LegacyKeySpec.AT_SIGNATURE">
            <summary>
            The key is a signature key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStorageProviders.MS_KEY_STORAGE_PROVIDER">
            <summary>
            Identifies the software key storage provider that is provided by Microsoft.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStorageProviders.MS_SMART_CARD_KEY_STORAGE_PROVIDER">
            <summary>
            Identifies the smart card key storage provider that is provided by Microsoft.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptBuffer">
            <summary>
            The NCryptBuffer structure is used to identify a variable-length memory buffer.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptBuffer.cbBuffer">
            <summary>
            The size, in bytes, of the buffer.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptBuffer.BufferType">
            <summary>
            A value that identifies the type of data that is contained by the buffer.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptBuffer.pvBuffer">
            <summary>
            The address of the buffer. The size of this buffer is contained in the <see cref="F:PInvoke.NCrypt.NCryptBuffer.cbBuffer"/> member.
            The format and contents of this buffer are identified by the <see cref="F:PInvoke.NCrypt.NCryptBuffer.BufferType"/> member.
            </summary>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptBuffer.pvBuffer_IntPtr">
            <summary>
            The address of the buffer. The size of this buffer is contained in the <see cref = "F:PInvoke.NCrypt.NCryptBuffer.cbBuffer"/> member.
            The format and contents of this buffer are identified by the <see cref = "F:PInvoke.NCrypt.NCryptBuffer.BufferType"/> member.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptBufferDesc">
            <summary>
            Used to receive a collection of <see cref="T:PInvoke.NCrypt.NCryptBuffer"/> structures.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptBufferDesc.ulVersion">
            <summary>
            The version number of the structure. Currently, this member must be set to <see cref="F:PInvoke.NCrypt.NCryptBufferDesc.NCRYPTBUFFER_VERSION"/>.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptBufferDesc.cBuffers">
            <summary>
            The number of elements in the <see cref="F:PInvoke.NCrypt.NCryptBufferDesc.pBuffers"/> array.
            You can test the value received against NCRYPTBUFFER_EMPTY (0) to determine whether the array pointed to by the <see cref="F:PInvoke.NCrypt.NCryptBufferDesc.pBuffers"/> parameter contains any members.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptBufferDesc.pBuffers">
            <summary>
            An array of <see cref="T:PInvoke.NCrypt.NCryptBuffer"/> structures that contain the buffer information. The <see cref="F:PInvoke.NCrypt.NCryptBufferDesc.cBuffers"/> member contains the number of elements in this array.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptBufferDesc.Create">
            <summary>
            Creates an instance of the <see cref="T:PInvoke.NCrypt.NCryptBufferDesc"/> structure with
            the <see cref="F:PInvoke.NCrypt.NCryptBufferDesc.ulVersion"/> field initialized to <see cref="F:PInvoke.NCrypt.NCryptBufferDesc.NCRYPTBUFFER_VERSION"/>.
            </summary>
            <returns>The initialized instance of <see cref="T:PInvoke.NCrypt.NCryptBufferDesc"/>.</returns>
        </member>
        <member name="P:PInvoke.NCrypt.NCryptBufferDesc.pBuffers_IntPtr">
            <summary>
            An array of <see cref = "T:PInvoke.NCrypt.NCryptBuffer"/> structures that contain the buffer information. The <see cref = "F:PInvoke.NCrypt.NCryptBufferDesc.cBuffers"/> member contains the number of elements in this array.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptCreatePersistedKeyFlags">
            <summary>
            Flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptCreatePersistedKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle@,System.String,System.String,PInvoke.NCrypt.LegacyKeySpec,PInvoke.NCrypt.NCryptCreatePersistedKeyFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptCreatePersistedKeyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptCreatePersistedKeyFlags.NCRYPT_MACHINE_KEY_FLAG">
            <summary>
            The key applies to the local computer. If this flag is not present, the key applies to the current user.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptCreatePersistedKeyFlags.NCRYPT_OVERWRITE_KEY_FLAG">
            <summary>
            If a key already exists in the container with the specified name, the existing key will be overwritten. If this flag is not specified and a key with the specified name already exists, this function will return <see cref="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_EXISTS"/>.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptEncryptFlags">
            <summary>
            Flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte*,System.Int32,System.Void*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEncryptFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEncryptFlags.NCRYPT_NO_PADDING_FLAG">
            <summary>
            Asymmetric keys: Do not use any padding. The pPaddingInfo parameter is not used.
            If you specify the NCRYPT_NO_PADDING_FLAG, then the <see cref="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte*,System.Int32,System.Void*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)"/> function only encrypts the first N bits, where N is the length of the key that was passed as the hKey parameter. Any bits after the first N bits are ignored.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEncryptFlags.NCRYPT_PAD_PKCS1_FLAG">
            <summary>
            Asymmetric keys: The data will be padded with a random number to round out the block size. The pPaddingInfo parameter is not used.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEncryptFlags.NCRYPT_PAD_OAEP_FLAG">
            <summary>
            Asymmetric keys: Use the Optimal Asymmetric Encryption Padding (OAEP) scheme. The pPaddingInfo parameter is a pointer to a <see cref="T:PInvoke.BCrypt.BCRYPT_OAEP_PADDING_INFO"/> structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptEncryptFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptExportKeyFlags">
            <summary>
            The flags that apply to the <see cref="M:PInvoke.NCrypt.NCryptExportKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptExportKeyFlags)"/> method.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptExportKeyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptExportKeyFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            This flag applies to all providers.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptFinalizeKeyFlags">
            <summary>
            Flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptFinalizeKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptFinalizeKeyFlags)"/> function.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptFinalizeKeyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptFinalizeKeyFlags.NCRYPT_NO_KEY_VALIDATION">
            <summary>
            Do not validate the public portion of the key pair. This flag only applies to public/private key pairs.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptFinalizeKeyFlags.NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG">
            <summary>
            Also save the key in legacy storage. This allows the key to be used with CryptoAPI. This flag only applies to RSA keys.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptFinalizeKeyFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptSetPropertyFlags">
            <summary>
            Flags that may be supplied to the <see cref="M:PInvoke.NCrypt.NCryptSetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSetPropertyFlags)"/> function.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.NCRYPT_PERSIST_ONLY_FLAG">
            <summary>
            Ignore any built in values for this property and only retrieve the user-persisted properties of the key. The maximum size of the data for any persisted property is NCRYPT_MAX_PROPERTY_DATA bytes.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.OWNER_SECURITY_INFORMATION">
            <summary>
            Retrieve the security identifier (SID) of the object's owner. Use the GetSecurityDescriptorOwner function to obtain the owner SID from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.GROUP_SECURITY_INFORMATION">
            <summary>
            Retrieve the SID of the object's primary group. Use the GetSecurityDescriptorGroup function to obtain the group SID from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.DACL_SECURITY_INFORMATION">
            <summary>
            Retrieve the discretionary access control list (DACL). Use the GetSecurityDescriptorSacl function to obtain the DACL from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.SACL_SECURITY_INFORMATION">
            <summary>
            Retrieve the system access control list (SACL). Use the GetSecurityDescriptorDacl function to obtain the SACL from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptSetPropertyFlags.LABEL_SECURITY_INFORMATION">
            <summary>
            Set the mandatory label access control entry in the SACL of the object. Use the SetSecurityDescriptorDacl function to set the SACL in the SECURITY_DESCRIPTOR structure. For more information about the mandatory label access control entry, see Windows Integrity Mechanism Design.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptGetPropertyFlags">
            <summary>
            Flags that may be supplied to the <see cref="M:PInvoke.NCrypt.NCryptGetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptGetPropertyFlags)"/> function.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptGetPropertyFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptGetPropertyFlags.NCRYPT_PERSIST_ONLY_FLAG">
            <summary>
            Ignore any built in values for this property and only retrieve the user-persisted properties of the key. The maximum size of the data for any persisted property is NCRYPT_MAX_PROPERTY_DATA bytes.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptGetPropertyFlags.NCRYPT_SILENT_FLAG">
            <summary>
            Requests that the key service provider (KSP) not display any user interface. If the provider must display the UI to operate, the call fails and the KSP should set the NTE_SILENT_CONTEXT error code as the last error.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptGetPropertyFlags.OWNER_SECURITY_INFORMATION">
            <summary>
            Retrieve the security identifier (SID) of the object's owner. Use the GetSecurityDescriptorOwner function to obtain the owner SID from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptGetPropertyFlags.GROUP_SECURITY_INFORMATION">
            <summary>
            Retrieve the SID of the object's primary group. Use the GetSecurityDescriptorGroup function to obtain the group SID from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptGetPropertyFlags.DACL_SECURITY_INFORMATION">
            <summary>
            Retrieve the discretionary access control list (DACL). Use the GetSecurityDescriptorSacl function to obtain the DACL from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptGetPropertyFlags.SACL_SECURITY_INFORMATION">
            <summary>
            Retrieve the system access control list (SACL). Use the GetSecurityDescriptorDacl function to obtain the SACL from the SECURITY_DESCRIPTOR structure.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCryptOpenStorageProviderFlags">
            <summary>
            Flags that may be passed to the <see cref="M:PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt.SafeProviderHandle@,System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCryptOpenStorageProviderFlags.None">
            <summary>
            No flags.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers">
            <summary>
            Defines the names of the built-in key storage property identifiers
            as documented by https://msdn.microsoft.com/en-us/library/windows/desktop/aa376242(v=vs.85).aspx
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_ALGORITHM_GROUP_PROPERTY">
            <summary>
            A null-terminated Unicode string that contains the name of the object's algorithm group. This property only applies to keys.
            And may contain any of the values defined by <see cref="T:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_ALGORITHM_GROUP_PROPERTY"/>.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_ALGORITHM_PROPERTY">
            <summary>
            A null-terminated Unicode string that contains the name of the object's algorithm. This can be one of the predefined CNG <see cref="T:PInvoke.BCrypt.AlgorithmIdentifiers"/> or another registered algorithm identifier. This property only applies to keys.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_ASSOCIATED_ECDH_KEY">
            <summary>
            An LPWSTR value that indicates the container name of the Elliptic Curve Diffie-Hellman (ECDH) key to use during logon for a given handle to an Elliptic Curve Digital Signature Algorithm (ECDSA) key. If there are no ECDH keys on the card, the key storage provider (KSP) returns NTE_NOT_FOUND. This property applies to ECDSA keys for logon with smart cards. The property is supported by the Microsoft Smart Card key storage provider and not by the Microsoft Software key storage provider.
            Windows Server 2008 and Windows Vista:  This value is not supported.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_BLOCK_LENGTH_PROPERTY">
            <summary>
            A DWORD that contains the length, in bytes, of the encryption block. This property only applies to keys that support encryption.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_CERTIFICATE_PROPERTY">
            <summary>
            A BLOB that contains an X.509 certificate that is associated with the key.
            Windows Server 2008 R2, Windows 7, Windows Server 2008, and Windows Vista:  A BLOB that contains the smart card key certificate. This property is not supported by the Microsoft Software Key Storage Provider.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_DH_PARAMETERS_PROPERTY">
            <summary>
            Specifies parameters to use with a Diffie-Hellman key. This data type is a pointer to a BCRYPT_DH_PARAMETER_HEADER structure. This property can only be set and must be set for the key before the key is completed.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_EXPORT_POLICY_PROPERTY">
            <summary>
            A DWORD that contains a set of flags that specify the export policy for a persisted key. This property only applies to keys.
            This can contain zero or a combination of one or more of the values defined by <see cref="T:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_EXPORT_POLICY_PROPERTY"/>.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_KEY_USAGE_PROPERTY">
            <summary>
            A DWORD that contains a set of flags that define the usage details for a key. This property only applies to keys.
            This can contain zero or a combination of one or more of the values defined by <see cref="T:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_USAGE_PROPERTY"/>.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_KEY_TYPE_PROPERTY">
            <summary>
            A DWORD that contains a set of flags that define the key type. This property only applies to keys.
            This can contain zero or the value defined by <see cref="T:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_KEY_TYPE_PROPERTY"/>.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_IMPL_TYPE_PROPERTY">
            <summary>
            A DWORD that contains a set of flags that define implementation details of the provider. This property only applies to key storage providers.
            This can contain zero or a combination of one or more of the values defined by the <see cref="T:PInvoke.NCrypt.KeyStoragePropertyValues.NCRYPT_IMPL_TYPE_PROPERTY"/> enum.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER">
            <summary>
            Contains a key BLOB. This structure is used by the <see cref="M:PInvoke.NCrypt.NCryptExportKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptExportKeyFlags)"/> and <see cref="M:PInvoke.NCrypt.NCryptImportKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,PInvoke.NCrypt.SafeKeyHandle@,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptExportKeyFlags)"/> functions.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.cbSize">
            <summary>
            The size of this structure.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.dwMagic">
            <summary>
            Identifies the BLOB type.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.cbAlgName">
            <summary>
            Size, in bytes, of the null-terminated algorithm name, including the terminating zero.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.cbKeyData">
            <summary>
            Size, in bytes, of the BLOB.
            </summary>
        </member>
        <member name="T:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.MagicNumber">
            <summary>
            The values that may be expected in the <see cref="F:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.dwMagic"/> field.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.Create">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER"/> struct
            with the <see cref="F:PInvoke.NCrypt.NCRYPT_KEY_BLOB_HEADER.cbSize"/> field set appropriately.
            </summary>
            <returns>An initialized instance of the struct.</returns>
        </member>
        <member name="T:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS">
            <summary>
            A structure is used with the <see cref="F:PInvoke.NCrypt.KeyStoragePropertyIdentifiers.NCRYPT_LENGTHS_PROPERTY"/> property to contain length information for a key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS.dwMinLength">
            <summary>
            The minimum length, in bits, of a key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS.dwMaxLength">
            <summary>
            The maximum length, in bits, of a key.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS.dwIncrement">
            <summary>
            The number of bits that the key size can be incremented between dwMinLength and dwMaxLength.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS.dwDefaultLength">
            <summary>
            The default length, in bits, of a key.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS.GetEnumerator">
            <summary>
            Gets a sequence of allowed key sizes, from smallest to largest.
            </summary>
            <returns>An enumerator over all allowed sizes.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCRYPT_SUPPORTED_LENGTHS.System#Collections#IEnumerable#GetEnumerator">
            <inheritdoc />
        </member>
        <member name="T:PInvoke.NCrypt.SafeKeyHandle">
            <summary>
            An NCrypt key handle.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.SafeKeyHandle.Null">
            <summary>
            A handle that may be used in place of <see cref="F:System.IntPtr.Zero"/>.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.SafeKeyHandle.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.SafeKeyHandle"/> class.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.SafeKeyHandle.#ctor(System.IntPtr,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.SafeKeyHandle"/> class.
            </summary>
            <param name="preexistingHandle">An object that represents the pre-existing handle to use.</param>
            <param name="ownsHandle">
                <see langword="true" /> to have the native handle released when this safe handle is disposed or finalized;
                <see langword="false" /> otherwise.
            </param>
        </member>
        <member name="P:PInvoke.NCrypt.SafeKeyHandle.IsInvalid">
            <inheritdoc />
        </member>
        <member name="M:PInvoke.NCrypt.SafeKeyHandle.ReleaseHandle">
            <inheritdoc />
        </member>
        <member name="T:PInvoke.NCrypt.SafeProviderHandle">
            <summary>
            An NCrypt open storage provider handle.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.SafeProviderHandle.Null">
            <summary>
            A handle that may be used in place of <see cref="F:System.IntPtr.Zero"/>.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.SafeProviderHandle.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.SafeProviderHandle"/> class.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.SafeProviderHandle.#ctor(System.IntPtr,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.SafeProviderHandle"/> class.
            </summary>
            <param name="preexistingHandle">An object that represents the pre-existing handle to use.</param>
            <param name="ownsHandle">
                <see langword="true" /> to have the native handle released when this safe handle is disposed or finalized;
                <see langword="false" /> otherwise.
            </param>
        </member>
        <member name="P:PInvoke.NCrypt.SafeProviderHandle.IsInvalid">
            <inheritdoc />
        </member>
        <member name="M:PInvoke.NCrypt.SafeProviderHandle.ReleaseHandle">
            <inheritdoc />
        </member>
        <member name="T:PInvoke.NCrypt.SafeSecretHandle">
            <summary>
            An NCrypt secret agreement handle.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.SafeSecretHandle.Null">
            <summary>
            A handle that may be used in place of <see cref="F:System.IntPtr.Zero"/>.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.SafeSecretHandle.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.SafeSecretHandle"/> class.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.SafeSecretHandle.#ctor(System.IntPtr,System.Boolean)">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.SafeSecretHandle"/> class.
            </summary>
            <param name="preexistingHandle">An object that represents the pre-existing handle to use.</param>
            <param name="ownsHandle">
                <see langword="true" /> to have the native handle released when this safe handle is disposed or finalized;
                <see langword="false" /> otherwise.
            </param>
        </member>
        <member name="P:PInvoke.NCrypt.SafeSecretHandle.IsInvalid">
            <inheritdoc />
        </member>
        <member name="M:PInvoke.NCrypt.SafeSecretHandle.ReleaseHandle">
            <inheritdoc />
        </member>
        <member name="T:PInvoke.NCrypt.SECURITY_STATUS">
            <summary>
            Describes the error codes that may be returned from NCrypt functions.
            </summary>
            <remarks>
            These values are encoded as <see cref="T:PInvoke.HResult"/> with <see cref="F:PInvoke.HResult.FacilityCode.FACILITY_SECURITY"/> as the facility code.
            </remarks>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.ERROR_SUCCESS">
            <summary>
            The operation completed successfully.
            </summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_UID">
            <summary>Bad UID.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_HASH">
            <summary>Bad hash.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_KEY">
            <summary>Bad key.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_LEN">
            <summary>Bad length.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_DATA">
            <summary>Bad data.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_SIGNATURE">
            <summary>Invalid signature.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_VER">
            <summary>Bad version of provider.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_ALGID">
            <summary>Invalid algorithm specified.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_FLAGS">
            <summary>Invalid flags specified.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_TYPE">
            <summary>Invalid type specified.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_KEY_STATE">
            <summary>Key not valid for use in specified state.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_HASH_STATE">
            <summary>Hash not valid for use in specified state.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NO_KEY">
            <summary>Key does not exist.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NO_MEMORY">
            <summary>Insufficient memory available for the operation.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_EXISTS">
            <summary>Object already exists.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_PERM">
            <summary>Access denied.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NOT_FOUND">
            <summary>Object was not found.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_DOUBLE_ENCRYPT">
            <summary>Data already encrypted.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_PROVIDER">
            <summary>Invalid provider specified.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_PROV_TYPE">
            <summary>Invalid provider type specified.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_PUBLIC_KEY">
            <summary>Invalid provider public key.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_KEYSET">
            <summary>Keyset does not exist</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_PROV_TYPE_NOT_DEF">
            <summary>Provider type not defined.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_PROV_TYPE_ENTRY_BAD">
            <summary>Invalid registration for provider type.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_KEYSET_NOT_DEF">
            <summary>The keyset not defined.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_KEYSET_ENTRY_BAD">
            <summary>Invalid keyset registration.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_PROV_TYPE_NO_MATCH">
            <summary>Provider type does not match registered value.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_SIGNATURE_FILE_BAD">
            <summary>Corrupt digital signature file.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_PROVIDER_DLL_FAIL">
            <summary>Provider DLL failed to initialize correctly.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_PROV_DLL_NOT_FOUND">
            <summary>Provider DLL not found.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_KEYSET_PARAM">
            <summary>Invalid keyset parameter.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_FAIL">
            <summary>Internal error occurred.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_SYS_ERR">
            <summary>Base error occurred.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BUFFER_TOO_SMALL">
            <summary>The buffer supplied to a function was too small.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NOT_SUPPORTED">
            <summary>The requested operation is not supported.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NO_MORE_ITEMS">
            <summary>No more data is available.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_SILENT_CONTEXT">
            <summary>Provider could not perform the action since the context was acquired as silent.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_TOKEN_KEYSET_STORAGE_FULL">
            <summary>The security token does not have storage space available for an additional container.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_TEMPORARY_PROFILE">
            <summary>The profile for the user is a temporary profile.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_FIXEDPARAMETER">
            <summary>The key parameters could not be set because the CSP uses fixed parameters.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_INVALID_HANDLE">
            <summary>The supplied handle is invalid.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_INVALID_PARAMETER">
            <summary>The parameter is incorrect.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BUFFERS_OVERLAP">
            <summary>The supplied buffers overlap incorrectly.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_DECRYPTION_FAILURE">
            <summary>The specified data could not be decrypted.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_INTERNAL_ERROR">
            <summary>An internal consistency check failed.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_UI_REQUIRED">
            <summary>This operation requires input from the user.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_HMAC_NOT_SUPPORTED">
            <summary>The cryptographic provider does not support HMAC.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_DEVICE_NOT_READY">
            <summary>The device that is required by this cryptographic provider is not ready for use.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_AUTHENTICATION_IGNORED">
            <summary>The dictionary attack mitigation is triggered and the provided authorization was ignored by the provider.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_VALIDATION_FAILED">
            <summary>The validation of the provided data failed the integrity or signature validation.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_INCORRECT_PASSWORD">
            <summary>Incorrect password.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_ENCRYPTION_FAILURE">
            <summary>Encryption failed.</summary>
        </member>
        <member name="F:PInvoke.NCrypt.SECURITY_STATUS.NTE_DEVICE_NOT_FOUND">
            <summary>The device that is required by this cryptographic provider is not found on this platform.</summary>
        </member>
        <member name="T:PInvoke.NCrypt.SymmetricKeyBlobTypes">
            <summary>
            Identifies the blob types of symmetric keys.
            </summary>
        </member>
        <member name="M:PInvoke.NCrypt.SymmetricKeyBlobTypes.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/> class.
            </summary>
            <remarks>
            Suppresses generation of a public default constructor.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEnumStorageProviders(System.Int32@,System.IntPtr@,PInvoke.NCrypt.NCryptEnumStorageProvidersFlags)">
            <summary>
            Obtains the names of the registered key storage providers.
            </summary>
            <param name = "pdwProviderCount">The address of a DWORD to receive the number of elements in the <paramref name = "ppProviderList"/> array.</param>
            <param name = "ppProviderList">
            The address of an <see cref = "T:PInvoke.NCrypt.NCryptProviderName"/> structure pointer to receive an array of the registered key storage provider names. The variable pointed to by the <paramref name = "pdwProviderCount"/> parameter receives the number of elements in this array.
            When this memory is no longer needed, free it by passing this pointer to the <see cref = "M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.
            </param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptExportKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,System.IntPtr,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            The NCryptExportKey function exports a CNG key to a memory BLOB.
            </summary>
            <param name = "key">A handle of the key to export.</param>
            <param name = "exportKey">A handle to a cryptographic key of the destination user. The key data within the exported key BLOB is encrypted by using this key. This ensures that only the destination user is able to make use of the key BLOB.</param>
            <param name = "blobType">A null-terminated Unicode string that contains an identifier that specifies the type of BLOB to export. This can be one of the values defined by the <see cref = "T:PInvoke.BCrypt.AsymmetricKeyBlobTypes"/> or <see cref = "T:PInvoke.BCrypt.SymmetricKeyBlobTypes"/> classes.</param>
            <param name = "parameterList">The address of an NCryptBufferDesc structure that receives parameter information for the key. This parameter can be NULL if this information is not needed.</param>
            <param name = "flags">Flags that modify function behavior. This can be zero or a combination of one or more of the following values. The set of valid flags is specific to each key storage provider.</param>
            <returns>Returns the exported key.</returns>
            <exception cref = "T:PInvoke.SecurityStatusException">Thrown if an error code is returned from the native function.</exception>
            <remarks>
            A service must not call this function from its StartService Function. If a service calls this function from its StartService function, a deadlock can occur, and the service may stop responding.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptImportKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,System.IntPtr,System.Byte[],PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            Imports a Cryptography API: Next Generation (CNG) key from a memory BLOB.
            </summary>
            <param name = "provider">The handle of the key storage provider.</param>
            <param name = "importKey">
            The handle of the cryptographic key with which the key data within the imported key BLOB was encrypted. This must be a handle to the same key that was passed in the hExportKey parameter of the NCryptExportKey function. If this parameter is NULL, the key BLOB is assumed to not be encrypted.
            </param>
            <param name = "blobType">
            A null-terminated Unicode string that contains an identifier that specifies the format of the key BLOB. These formats are specific to a particular key storage provider. Commonly a value from <see cref = "T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> or <see cref = "T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/>.
            </param>
            <param name = "parameterList">
            The address of an <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that points to an array of buffers that contain parameter information for the key.
            </param>
            <param name = "keyData">The address of a buffer that contains the key BLOB to be imported.</param>
            <param name = "flags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            If a key name is not supplied, the Microsoft Software KSP treats the key as ephemeral and does not store it persistently. For the NCRYPT_OPAQUETRANSPORT_BLOB type, the key name is stored within the BLOB when it is exported. For other BLOB formats, the name can be supplied in an NCRYPTBUFFER_PKCS_KEY_NAME buffer parameter within the pParameterList parameter.
            On Windows Server 2008 and Windows Vista, only keys imported as PKCS #7 envelope BLOBs (NCRYPT_PKCS7_ENVELOPE_BLOB) or PKCS #8 private key BLOBs (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) can be persisted by using the above method. To persist keys imported through other BLOB types on these platforms, use the method documented in Key Import and Export.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.IntPtr,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Encrypts a block of data.
            </summary>
            <param name = "key">
            The handle of the key to use to encrypt the data.
            </param>
            <param name = "plaintext">
            The address of a buffer that contains the plaintext to be encrypted. The cbInput parameter contains the size of the plaintext to encrypt.
            </param>
            <param name = "paddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the dwFlags parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            </param>
            <returns>Returns the ciphertext.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDecrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.IntPtr,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Decrypts a block of data.
            </summary>
            <param name = "key">
            The handle of the key to use to decrypt the data.
            </param>
            <param name = "ciphertext">
            The address of a buffer that contains the ciphertext to be decrypted. The <paramref name = "ciphertext"/> parameter contains the size of the ciphertext to decrypt. For more information, see Remarks.
            </param>
            <param name = "paddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the <paramref name = "flags"/> parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "key"/> parameter.
            </param>
            <returns>Returns the plaintext.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.Byte[],PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Creates a signature of a hash value.
            </summary>
            <param name = "key">The handle of the key to use to sign the hash.</param>
            <param name = "paddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "flags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "hashValue">
            A pointer to a buffer that contains the hash value to sign.
            </param>
            <param name = "flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "key"/> parameter.
            </param>
            <returns>
            The signature produced by this function.
            </returns>
            <remarks>
            To later verify that the signature is valid, call the <see cref = "M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)"/> function with an identical key and an identical hash of the original data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.Byte[],System.Byte[],PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Verifies that the specified signature matches the specified hash.
            </summary>
            <param name = "key">
            The handle of the key to use to decrypt the signature. This must be an identical key or the public key portion of the key pair used to sign the data with the <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function.
            </param>
            <param name = "paddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "flags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "hashValue">
            The address of a buffer that contains the hash of the data.
            </param>
            <param name = "signature">
            The address of a buffer that contains the signed hash of the data. The <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature.
            </param>
            <param name = "flags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            If the key is a symmetric key, this parameter is not used and should be zero.
            If the key is an asymmetric key, this can be one of the following values.
            </param>
            <returns>
            <c>true</c> if the signature is valid; <c>false</c> otherwise.
            </returns>
            <exception cref = "T:PInvoke.SecurityStatusException">Thrown if any other error besides an invalid signature occurs.</exception>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.IntPtr,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)">
            <summary>
            Creates a key from another key by using the specified key derivation function. The function returns the key in a byte array.
            </summary>
            <param name = "hKey">Handle of the key derivation function (KDF) key.</param>
            <param name = "pParameterList">The address of a <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. The parameters can be specific to a KDF or generic. See https://msdn.microsoft.com/en-us/library/windows/desktop/hh448516(v=vs.85).aspx for more information.</param>
            <param name = "pbDerivedKey">Address of a buffer that receives the key. The <paramref name = "cbDerivedKey"/> parameter contains the size, in bytes, of the key buffer.</param>
            <param name = "cbDerivedKey">Size, in bytes, of the buffer pointed to by the <paramref name = "pbDerivedKey"/> parameter.</param>
            <param name = "pcbResult">Pointer to a DWORD that receives the number of bytes copied to the buffer pointed to by the <paramref name = "pbDerivedKey"/> parameter.</param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)">
            <summary>
            Creates a key from another key by using the specified key derivation function. The function returns the key in a byte array.
            </summary>
            <param name = "hKey">Handle of the key derivation function (KDF) key.</param>
            <param name = "pParameterList">The address of a <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. The parameters can be specific to a KDF or generic. See https://msdn.microsoft.com/en-us/library/windows/desktop/hh448516(v=vs.85).aspx for more information.</param>
            <param name = "pbDerivedKey">Address of a buffer that receives the key. The <paramref name = "cbDerivedKey"/> parameter contains the size, in bytes, of the key buffer.</param>
            <param name = "cbDerivedKey">Size, in bytes, of the buffer pointed to by the <paramref name = "pbDerivedKey"/> parameter.</param>
            <param name = "pcbResult">Pointer to a DWORD that receives the number of bytes copied to the buffer pointed to by the <paramref name = "pbDerivedKey"/> parameter.</param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)">
            <summary>
            Creates a key from another key by using the specified key derivation function. The function returns the key in a byte array.
            </summary>
            <param name = "hKey">Handle of the key derivation function (KDF) key.</param>
            <param name = "pParameterList">The address of a <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. The parameters can be specific to a KDF or generic. See https://msdn.microsoft.com/en-us/library/windows/desktop/hh448516(v=vs.85).aspx for more information.</param>
            <param name = "pbDerivedKey">Address of a buffer that receives the key. The <paramref name = "cbDerivedKey"/> parameter contains the size, in bytes, of the key buffer.</param>
            <param name = "cbDerivedKey">Size, in bytes, of the buffer pointed to by the <paramref name = "pbDerivedKey"/> parameter.</param>
            <param name = "pcbResult">Pointer to a DWORD that receives the number of bytes copied to the buffer pointed to by the <paramref name = "pbDerivedKey"/> parameter.</param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDeriveKey(PInvoke.NCrypt.SafeSecretHandle,System.String,System.IntPtr,System.IntPtr,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptDeriveKeyFlags)">
            <summary>
            Derives a key from a secret agreement value. This function is intended to be used as part of a secret agreement procedure using persisted secret agreement keys. To derive key material by using a persisted secret instead, use the <see cref = "M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)"/> function.
            </summary>
            <param name = "hSharedSecret">The secret agreement handle to create the key from. This handle is obtained from the <see cref = "M:PInvoke.NCrypt.NCryptSecretAgreement(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeSecretHandle@,PInvoke.NCrypt.NCryptSecretAgreementFlags)"/> function.</param>
            <param name = "pwszKDF">A pointer to a null-terminated Unicode string that identifies the key derivation function (KDF) to use to derive the key. It can be one of the strings defined in <see cref = "T:PInvoke.BCrypt.KeyDerivationFunctions"/>.</param>
            <param name = "pParameterList">The address of a <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. This parameter is optional and can be NULL if it is not needed.</param>
            <param name = "pbDerivedKey">The address of a buffer that receives the key. The <paramref name = "cbDerivedKey"/> parameter contains the size of this buffer. If this parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by the <paramref name = "pcbResult"/> parameter.</param>
            <param name = "cbDerivedKey">The size, in bytes, of the <paramref name = "pbDerivedKey"/> buffer.</param>
            <param name = "pcbResult">A pointer to a DWORD that receives the number of bytes that were copied to the <paramref name = "pbDerivedKey"/> buffer. If the <paramref name = "pbDerivedKey"/> parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by this parameter.</param>
            <param name = "dwFlags">A set of flags that modify the behavior of this function.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDeriveKey(PInvoke.NCrypt.SafeSecretHandle,System.String,System.IntPtr,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptDeriveKeyFlags)">
            <summary>
            Derives a key from a secret agreement value. This function is intended to be used as part of a secret agreement procedure using persisted secret agreement keys. To derive key material by using a persisted secret instead, use the <see cref = "M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)"/> function.
            </summary>
            <param name = "hSharedSecret">The secret agreement handle to create the key from. This handle is obtained from the <see cref = "M:PInvoke.NCrypt.NCryptSecretAgreement(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeSecretHandle@,PInvoke.NCrypt.NCryptSecretAgreementFlags)"/> function.</param>
            <param name = "pwszKDF">A pointer to a null-terminated Unicode string that identifies the key derivation function (KDF) to use to derive the key. It can be one of the strings defined in <see cref = "T:PInvoke.BCrypt.KeyDerivationFunctions"/>.</param>
            <param name = "pParameterList">The address of a <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. This parameter is optional and can be NULL if it is not needed.</param>
            <param name = "pbDerivedKey">The address of a buffer that receives the key. The <paramref name = "cbDerivedKey"/> parameter contains the size of this buffer. If this parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by the <paramref name = "pcbResult"/> parameter.</param>
            <param name = "cbDerivedKey">The size, in bytes, of the <paramref name = "pbDerivedKey"/> buffer.</param>
            <param name = "pcbResult">A pointer to a DWORD that receives the number of bytes that were copied to the <paramref name = "pbDerivedKey"/> buffer. If the <paramref name = "pbDerivedKey"/> parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by this parameter.</param>
            <param name = "dwFlags">A set of flags that modify the behavior of this function.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDeriveKey(PInvoke.NCrypt.SafeSecretHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptDeriveKeyFlags)">
            <summary>
            Derives a key from a secret agreement value. This function is intended to be used as part of a secret agreement procedure using persisted secret agreement keys. To derive key material by using a persisted secret instead, use the <see cref = "M:PInvoke.NCrypt.NCryptKeyDerivation(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.NCryptBufferDesc*,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptKeyDerivationFlags)"/> function.
            </summary>
            <param name = "hSharedSecret">The secret agreement handle to create the key from. This handle is obtained from the <see cref = "M:PInvoke.NCrypt.NCryptSecretAgreement(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeSecretHandle@,PInvoke.NCrypt.NCryptSecretAgreementFlags)"/> function.</param>
            <param name = "pwszKDF">A pointer to a null-terminated Unicode string that identifies the key derivation function (KDF) to use to derive the key. It can be one of the strings defined in <see cref = "T:PInvoke.BCrypt.KeyDerivationFunctions"/>.</param>
            <param name = "pParameterList">The address of a <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that contains the KDF parameters. This parameter is optional and can be NULL if it is not needed.</param>
            <param name = "pbDerivedKey">The address of a buffer that receives the key. The <paramref name = "cbDerivedKey"/> parameter contains the size of this buffer. If this parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by the <paramref name = "pcbResult"/> parameter.</param>
            <param name = "cbDerivedKey">The size, in bytes, of the <paramref name = "pbDerivedKey"/> buffer.</param>
            <param name = "pcbResult">A pointer to a DWORD that receives the number of bytes that were copied to the <paramref name = "pbDerivedKey"/> buffer. If the <paramref name = "pbDerivedKey"/> parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by this parameter.</param>
            <param name = "dwFlags">A set of flags that modify the behavior of this function.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEnumAlgorithms(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.AlgorithmOperations,System.Int32@,System.IntPtr@,PInvoke.NCrypt.NCryptEnumAlgorithmsFlags)">
            <summary>
            Obtains the names of the algorithms that are supported by the specified key storage provider.
            </summary>
            <param name = "hProvider">The handle of the key storage provider to enumerate the algorithms for. This handle is obtained with the <see cref = "M:PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt.SafeProviderHandle@,System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.</param>
            <param name = "dwAlgOperations">
            A set of values that determine which algorithm classes to enumerate. This can be zero or a combination of one or more of the values in <see cref = "T:PInvoke.NCrypt.AlgorithmOperations"/>. If dwAlgOperations is zero, all algorithms are enumerated.
            </param>
            <param name = "pdwAlgCount">The address of a DWORD that receives the number of elements in the <paramref name = "ppAlgList"/> array.</param>
            <param name = "ppAlgList">
            The address of an <see cref = "T:PInvoke.NCrypt.NCryptAlgorithmName"/> structure pointer that receives an array of the registered algorithm names. The variable pointed to by the <paramref name = "pdwAlgCount"/> parameter receives the number of elements in this array.
            When this memory is no longer needed, it must be freed by passing this pointer to the <see cref = "M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.
            </param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEnumKeys(PInvoke.NCrypt.SafeProviderHandle,System.String,System.IntPtr@,System.IntPtr@,PInvoke.NCrypt.NCryptEnumKeysFlags)">
            <summary>
            Obtains the names of the keys that are stored by the provider.
            </summary>
            <param name = "hProvider">The handle of the key storage provider to enumerate the keys for. This handle is obtained with the <see cref = "M:PInvoke.NCrypt.NCryptOpenStorageProvider(PInvoke.NCrypt.SafeProviderHandle@,System.String,PInvoke.NCrypt.NCryptOpenStorageProviderFlags)"/> function.</param>
            <param name = "pszScope">This parameter is not currently used and must be NULL.</param>
            <param name = "ppKeyName">The address of a pointer to an <see cref = "T:PInvoke.NCrypt.NCryptKeyName"/> structure that receives the name of the retrieved key. When the application has finished using this memory, free it by calling the <see cref = "M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.</param>
            <param name = "ppEnumState">
            The address of a VOID pointer that receives enumeration state information that is used in subsequent calls to this function. This information only has meaning to the key storage provider and is opaque to the caller. The key storage provider uses this information to determine which item is next in the enumeration. If the variable pointed to by this parameter contains NULL, the enumeration is started from the beginning.
            When this memory is no longer needed, it must be freed by passing this pointer to the <see cref = "M:PInvoke.NCrypt.NCryptFreeBuffer(System.Void*)"/> function.
            </param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>
            Returns a status code that indicates the success or failure of the function.
            In particular, <see cref = "F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NO_MORE_ITEMS"/> is returned when
            the end of the enumeration has been reached.
            </returns>
            <remarks>
            This function retrieves only one item each time it is called.
            The state of the enumeration is stored in the variable pointed to by the <paramref name = "ppEnumState"/> parameter,
            so this must be preserved between calls to this function.
            When the last key stored by the provider has been retrieved, this function will return
            <see cref = "F:PInvoke.NCrypt.SECURITY_STATUS.NTE_NO_MORE_ITEMS"/> the next time it is called.
            To start the enumeration over, set the variable pointed to by the <paramref name = "ppEnumState"/> parameter to NULL,
            free the memory pointed to by the <paramref name = "ppKeyName"/> parameter, if it is not NULL,
            and call this function again.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptExportKey(PInvoke.NCrypt.SafeKeyHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,System.IntPtr,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            The NCryptExportKey function exports a CNG key to a memory BLOB.
            </summary>
            <param name = "hKey">A handle of the key to export.</param>
            <param name = "hExportKey">A handle to a cryptographic key of the destination user. The key data within the exported key BLOB is encrypted by using this key. This ensures that only the destination user is able to make use of the key BLOB.</param>
            <param name = "pszBlobType">A null-terminated Unicode string that contains an identifier that specifies the type of BLOB to export. This can be one of the values defined by the <see cref = "T:PInvoke.BCrypt.AsymmetricKeyBlobTypes"/> or <see cref = "T:PInvoke.BCrypt.SymmetricKeyBlobTypes"/> classes.</param>
            <param name = "pParameterList">The address of an NCryptBufferDesc structure that receives parameter information for the key. This parameter can be NULL if this information is not needed.</param>
            <param name = "pbOutput">The address of a buffer that receives the key BLOB. The <paramref name = "cbOutput"/> parameter contains the size of this buffer. If this parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by the <paramref name = "pcbResult"/> parameter.</param>
            <param name = "cbOutput">The size, in bytes, of the <paramref name = "pbOutput"/> buffer.</param>
            <param name = "pcbResult">The address of a DWORD variable that receives the number of bytes copied to the <paramref name = "pbOutput"/> buffer. If the <paramref name = "pbOutput"/> parameter is NULL, this function will place the required size, in bytes, in the DWORD pointed to by this parameter.</param>
            <param name = "dwFlags">Flags that modify function behavior. This can be zero or a combination of one or more of the following values. The set of valid flags is specific to each key storage provider.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            A service must not call this function from its StartService Function. If a service calls this function from its StartService function, a deadlock can occur, and the service may stop responding.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptImportKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,System.IntPtr,PInvoke.NCrypt.SafeKeyHandle@,System.IntPtr,System.Int32,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            Imports a Cryptography API: Next Generation (CNG) key from a memory BLOB.
            </summary>
            <param name = "hProvider">The handle of the key storage provider.</param>
            <param name = "hImportKey">
            The handle of the cryptographic key with which the key data within the imported key BLOB was encrypted. This must be a handle to the same key that was passed in the hExportKey parameter of the NCryptExportKey function. If this parameter is NULL, the key BLOB is assumed to not be encrypted.
            </param>
            <param name = "pszBlobType">
            A null-terminated Unicode string that contains an identifier that specifies the format of the key BLOB. These formats are specific to a particular key storage provider. Commonly a value from <see cref = "T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> or <see cref = "T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/>.
            </param>
            <param name = "pParameterList">
            The address of an <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that points to an array of buffers that contain parameter information for the key.
            </param>
            <param name = "phKey">
            The address of an NCRYPT_KEY_HANDLE variable that receives the handle of the key. When you have finished using this handle, release it by calling <see cref = "M:System.Runtime.InteropServices.SafeHandle.Dispose"/> on the value.
            </param>
            <param name = "pbData">The address of a buffer that contains the key BLOB to be imported. The <paramref name = "cbData"/> parameter contains the size of this buffer.</param>
            <param name = "cbData">The size, in bytes, of the <paramref name = "pbData"/> buffer.</param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            If a key name is not supplied, the Microsoft Software KSP treats the key as ephemeral and does not store it persistently. For the NCRYPT_OPAQUETRANSPORT_BLOB type, the key name is stored within the BLOB when it is exported. For other BLOB formats, the name can be supplied in an NCRYPTBUFFER_PKCS_KEY_NAME buffer parameter within the pParameterList parameter.
            On Windows Server 2008 and Windows Vista, only keys imported as PKCS #7 envelope BLOBs (NCRYPT_PKCS7_ENVELOPE_BLOB) or PKCS #8 private key BLOBs (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) can be persisted by using the above method. To persist keys imported through other BLOB types on these platforms, use the method documented in Key Import and Export.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptImportKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,System.IntPtr,PInvoke.NCrypt.SafeKeyHandle@,System.Byte[],System.Int32,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            Imports a Cryptography API: Next Generation (CNG) key from a memory BLOB.
            </summary>
            <param name = "hProvider">The handle of the key storage provider.</param>
            <param name = "hImportKey">
            The handle of the cryptographic key with which the key data within the imported key BLOB was encrypted. This must be a handle to the same key that was passed in the hExportKey parameter of the NCryptExportKey function. If this parameter is NULL, the key BLOB is assumed to not be encrypted.
            </param>
            <param name = "pszBlobType">
            A null-terminated Unicode string that contains an identifier that specifies the format of the key BLOB. These formats are specific to a particular key storage provider. Commonly a value from <see cref = "T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> or <see cref = "T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/>.
            </param>
            <param name = "pParameterList">
            The address of an <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that points to an array of buffers that contain parameter information for the key.
            </param>
            <param name = "phKey">
            The address of an NCRYPT_KEY_HANDLE variable that receives the handle of the key. When you have finished using this handle, release it by calling <see cref = "M:System.Runtime.InteropServices.SafeHandle.Dispose"/> on the value.
            </param>
            <param name = "pbData">The address of a buffer that contains the key BLOB to be imported. The <paramref name = "cbData"/> parameter contains the size of this buffer.</param>
            <param name = "cbData">The size, in bytes, of the <paramref name = "pbData"/> buffer.</param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            If a key name is not supplied, the Microsoft Software KSP treats the key as ephemeral and does not store it persistently. For the NCRYPT_OPAQUETRANSPORT_BLOB type, the key name is stored within the BLOB when it is exported. For other BLOB formats, the name can be supplied in an NCRYPTBUFFER_PKCS_KEY_NAME buffer parameter within the pParameterList parameter.
            On Windows Server 2008 and Windows Vista, only keys imported as PKCS #7 envelope BLOBs (NCRYPT_PKCS7_ENVELOPE_BLOB) or PKCS #8 private key BLOBs (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) can be persisted by using the above method. To persist keys imported through other BLOB types on these platforms, use the method documented in Key Import and Export.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptImportKey(PInvoke.NCrypt.SafeProviderHandle,PInvoke.NCrypt.SafeKeyHandle,System.String,PInvoke.NCrypt.NCryptBufferDesc*,PInvoke.NCrypt.SafeKeyHandle@,System.Byte[],System.Int32,PInvoke.NCrypt.NCryptExportKeyFlags)">
            <summary>
            Imports a Cryptography API: Next Generation (CNG) key from a memory BLOB.
            </summary>
            <param name = "hProvider">The handle of the key storage provider.</param>
            <param name = "hImportKey">
            The handle of the cryptographic key with which the key data within the imported key BLOB was encrypted. This must be a handle to the same key that was passed in the hExportKey parameter of the NCryptExportKey function. If this parameter is NULL, the key BLOB is assumed to not be encrypted.
            </param>
            <param name = "pszBlobType">
            A null-terminated Unicode string that contains an identifier that specifies the format of the key BLOB. These formats are specific to a particular key storage provider. Commonly a value from <see cref = "T:PInvoke.NCrypt.AsymmetricKeyBlobTypes"/> or <see cref = "T:PInvoke.NCrypt.SymmetricKeyBlobTypes"/>.
            </param>
            <param name = "pParameterList">
            The address of an <see cref = "T:PInvoke.NCrypt.NCryptBufferDesc"/> structure that points to an array of buffers that contain parameter information for the key.
            </param>
            <param name = "phKey">
            The address of an NCRYPT_KEY_HANDLE variable that receives the handle of the key. When you have finished using this handle, release it by calling <see cref = "M:System.Runtime.InteropServices.SafeHandle.Dispose"/> on the value.
            </param>
            <param name = "pbData">The address of a buffer that contains the key BLOB to be imported. The <paramref name = "cbData"/> parameter contains the size of this buffer.</param>
            <param name = "cbData">The size, in bytes, of the <paramref name = "pbData"/> buffer.</param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            If a key name is not supplied, the Microsoft Software KSP treats the key as ephemeral and does not store it persistently. For the NCRYPT_OPAQUETRANSPORT_BLOB type, the key name is stored within the BLOB when it is exported. For other BLOB formats, the name can be supplied in an NCRYPTBUFFER_PKCS_KEY_NAME buffer parameter within the pParameterList parameter.
            On Windows Server 2008 and Windows Vista, only keys imported as PKCS #7 envelope BLOBs (NCRYPT_PKCS7_ENVELOPE_BLOB) or PKCS #8 private key BLOBs (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) can be persisted by using the above method. To persist keys imported through other BLOB types on these platforms, use the method documented in Key Import and Export.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.IntPtr,System.Int32,PInvoke.NCrypt.NCryptSetPropertyFlags)">
            <summary>
            Sets the value for a named property for a CNG key storage object.
            </summary>
            <param name = "hObject">The handle of the key storage object to set the property for.</param>
            <param name = "pszProperty">
            A pointer to a null-terminated Unicode string that contains the name of the property to set. This can be one of the predefined <see cref = "T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the new property value. The <paramref name = "cbInput"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbInput">
            The size, in bytes, of the <paramref name = "pbInput"/> buffer.
            </param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSetProperty(System.Runtime.InteropServices.SafeHandle,System.String,System.Byte[],System.Int32,PInvoke.NCrypt.NCryptSetPropertyFlags)">
            <summary>
            Sets the value for a named property for a CNG key storage object.
            </summary>
            <param name = "hObject">The handle of the key storage object to set the property for.</param>
            <param name = "pszProperty">
            A pointer to a null-terminated Unicode string that contains the name of the property to set. This can be one of the predefined <see cref = "T:PInvoke.NCrypt.KeyStoragePropertyIdentifiers"/> or a custom property identifier.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the new property value. The <paramref name = "cbInput"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbInput">
            The size, in bytes, of the <paramref name = "pbInput"/> buffer.
            </param>
            <param name = "dwFlags">Flags that modify function behavior.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Encrypts a block of data.
            </summary>
            <param name = "hKey">
            The handle of the key to use to encrypt the data.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the plaintext to be encrypted. The cbInput parameter contains the size of the plaintext to encrypt.
            </param>
            <param name = "cbInput">
            The number of bytes in the pbInput buffer to encrypt.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the dwFlags parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "pbOutput">
            The address of the buffer that receives the ciphertext produced by this function. The <paramref name = "cbOutput"/> parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size needed for the ciphertext of the data passed in the <paramref name = "pbInput"/> parameter. In this case, the location pointed to by the <paramref name = "pcbResult"/> parameter contains this size, and the function returns <see cref = "F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.The <paramref name = "pPaddingInfo"/> parameter is not modified.
            If the values of both the <paramref name = "pbOutput"/> and <paramref name = "pbInput"/> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag is returned in the <paramref name = "pPaddingInfo"/> parameter.
            </param>
            <param name = "cbOutput">
            The size, in bytes, of the <paramref name = "pbOutput"/> buffer. This parameter is ignored if the <paramref name = "pbOutput"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a DWORD variable that receives the number of bytes copied to the <paramref name = "pbOutput"/> buffer. If <paramref name = "pbOutput"/> is NULL, this receives the size, in bytes, required for the ciphertext.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            The <paramref name = "pbInput"/> and <paramref name = "pbOutput"/> parameters can point to the same buffer. In this case, this function will perform the encryption in place. It is possible that the encrypted data size will be larger than the unencrypted data size, so the buffer must be large enough to hold the encrypted data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.Int32,System.IntPtr,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Encrypts a block of data.
            </summary>
            <param name = "hKey">
            The handle of the key to use to encrypt the data.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the plaintext to be encrypted. The cbInput parameter contains the size of the plaintext to encrypt.
            </param>
            <param name = "cbInput">
            The number of bytes in the pbInput buffer to encrypt.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the dwFlags parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "pbOutput">
            The address of the buffer that receives the ciphertext produced by this function. The <paramref name = "cbOutput"/> parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size needed for the ciphertext of the data passed in the <paramref name = "pbInput"/> parameter. In this case, the location pointed to by the <paramref name = "pcbResult"/> parameter contains this size, and the function returns <see cref = "F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.The <paramref name = "pPaddingInfo"/> parameter is not modified.
            If the values of both the <paramref name = "pbOutput"/> and <paramref name = "pbInput"/> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag is returned in the <paramref name = "pPaddingInfo"/> parameter.
            </param>
            <param name = "cbOutput">
            The size, in bytes, of the <paramref name = "pbOutput"/> buffer. This parameter is ignored if the <paramref name = "pbOutput"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a DWORD variable that receives the number of bytes copied to the <paramref name = "pbOutput"/> buffer. If <paramref name = "pbOutput"/> is NULL, this receives the size, in bytes, required for the ciphertext.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            The <paramref name = "pbInput"/> and <paramref name = "pbOutput"/> parameters can point to the same buffer. In this case, this function will perform the encryption in place. It is possible that the encrypted data size will be larger than the unencrypted data size, so the buffer must be large enough to hold the encrypted data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptEncrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.Int32,System.Void*,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Encrypts a block of data.
            </summary>
            <param name = "hKey">
            The handle of the key to use to encrypt the data.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the plaintext to be encrypted. The cbInput parameter contains the size of the plaintext to encrypt.
            </param>
            <param name = "cbInput">
            The number of bytes in the pbInput buffer to encrypt.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the dwFlags parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "pbOutput">
            The address of the buffer that receives the ciphertext produced by this function. The <paramref name = "cbOutput"/> parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size needed for the ciphertext of the data passed in the <paramref name = "pbInput"/> parameter. In this case, the location pointed to by the <paramref name = "pcbResult"/> parameter contains this size, and the function returns <see cref = "F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.The <paramref name = "pPaddingInfo"/> parameter is not modified.
            If the values of both the <paramref name = "pbOutput"/> and <paramref name = "pbInput"/> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag is returned in the <paramref name = "pPaddingInfo"/> parameter.
            </param>
            <param name = "cbOutput">
            The size, in bytes, of the <paramref name = "pbOutput"/> buffer. This parameter is ignored if the <paramref name = "pbOutput"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a DWORD variable that receives the number of bytes copied to the <paramref name = "pbOutput"/> buffer. If <paramref name = "pbOutput"/> is NULL, this receives the size, in bytes, required for the ciphertext.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            The <paramref name = "pbInput"/> and <paramref name = "pbOutput"/> parameters can point to the same buffer. In this case, this function will perform the encryption in place. It is possible that the encrypted data size will be larger than the unencrypted data size, so the buffer must be large enough to hold the encrypted data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDecrypt(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.Int32,System.IntPtr,System.IntPtr,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Decrypts a block of data.
            </summary>
            <param name = "hKey">
            The handle of the key to use to decrypt the data.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the ciphertext to be decrypted. The <paramref name = "cbInput"/> parameter contains the size of the ciphertext to decrypt. For more information, see Remarks.
            </param>
            <param name = "cbInput">
            The number of bytes in the <paramref name = "pbInput"/> buffer to decrypt.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the <paramref name = "dwFlags"/> parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "pbOutput">
            The address of a buffer to receive the plaintext produced by this function. The cbOutput parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size required for the plaintext of the encrypted data passed in the <paramref name = "pbInput"/> parameter.In this case, the location pointed to by the <paramref name = "pcbResult"/> parameter contains this size, and the function returns <see cref = "F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.
            If the values of both the <paramref name = "pbOutput"/> and <paramref name = "pbInput"/> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag, passed in the <paramref name = "pPaddingInfo"/> parameter, is verified.
            </param>
            <param name = "cbOutput">
            The size, in bytes, of the <paramref name = "pbOutput"/> buffer. This parameter is ignored if the <paramref name = "pbOutput"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a ULONG variable to receive the number of bytes copied to the <paramref name = "pbOutput"/> buffer. If <paramref name = "pbOutput"/> is NULL, this receives the size, in bytes, required for the plaintext.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDecrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.Int32,System.IntPtr,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Decrypts a block of data.
            </summary>
            <param name = "hKey">
            The handle of the key to use to decrypt the data.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the ciphertext to be decrypted. The <paramref name = "cbInput"/> parameter contains the size of the ciphertext to decrypt. For more information, see Remarks.
            </param>
            <param name = "cbInput">
            The number of bytes in the <paramref name = "pbInput"/> buffer to decrypt.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the <paramref name = "dwFlags"/> parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "pbOutput">
            The address of a buffer to receive the plaintext produced by this function. The cbOutput parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size required for the plaintext of the encrypted data passed in the <paramref name = "pbInput"/> parameter.In this case, the location pointed to by the <paramref name = "pcbResult"/> parameter contains this size, and the function returns <see cref = "F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.
            If the values of both the <paramref name = "pbOutput"/> and <paramref name = "pbInput"/> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag, passed in the <paramref name = "pPaddingInfo"/> parameter, is verified.
            </param>
            <param name = "cbOutput">
            The size, in bytes, of the <paramref name = "pbOutput"/> buffer. This parameter is ignored if the <paramref name = "pbOutput"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a ULONG variable to receive the number of bytes copied to the <paramref name = "pbOutput"/> buffer. If <paramref name = "pbOutput"/> is NULL, this receives the size, in bytes, required for the plaintext.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptDecrypt(PInvoke.NCrypt.SafeKeyHandle,System.Byte[],System.Int32,System.Void*,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptEncryptFlags)">
            <summary>
            Decrypts a block of data.
            </summary>
            <param name = "hKey">
            The handle of the key to use to decrypt the data.
            </param>
            <param name = "pbInput">
            The address of a buffer that contains the ciphertext to be decrypted. The <paramref name = "cbInput"/> parameter contains the size of the ciphertext to decrypt. For more information, see Remarks.
            </param>
            <param name = "cbInput">
            The number of bytes in the <paramref name = "pbInput"/> buffer to decrypt.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. This parameter is only used with asymmetric keys and authenticated encryption modes. If an authenticated encryption mode is used, this parameter must point to a BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO structure. If asymmetric keys are used, the type of structure this parameter points to is determined by the value of the <paramref name = "dwFlags"/> parameter. Otherwise, the parameter must be set to NULL.
            </param>
            <param name = "pbOutput">
            The address of a buffer to receive the plaintext produced by this function. The cbOutput parameter contains the size of this buffer. For more information, see Remarks.
            If this parameter is NULL, this function calculates the size required for the plaintext of the encrypted data passed in the <paramref name = "pbInput"/> parameter.In this case, the location pointed to by the <paramref name = "pcbResult"/> parameter contains this size, and the function returns <see cref = "F:PInvoke.NTSTATUS.Code.STATUS_SUCCESS"/>.
            If the values of both the <paramref name = "pbOutput"/> and <paramref name = "pbInput"/> parameters are NULL, an error is returned unless an authenticated encryption algorithm is in use.In the latter case, the call is treated as an authenticated encryption call with zero length data, and the authentication tag, passed in the <paramref name = "pPaddingInfo"/> parameter, is verified.
            </param>
            <param name = "cbOutput">
            The size, in bytes, of the <paramref name = "pbOutput"/> buffer. This parameter is ignored if the <paramref name = "pbOutput"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a ULONG variable to receive the number of bytes copied to the <paramref name = "pbOutput"/> buffer. If <paramref name = "pbOutput"/> is NULL, this receives the size, in bytes, required for the plaintext.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Creates a signature of a hash value.
            </summary>
            <param name = "hKey">The handle of the key to use to sign the hash.</param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "pbHashValue">
            A pointer to a buffer that contains the hash value to sign. The <paramref name = "cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbHashValue">
            The number of bytes in the <paramref name = "pbHashValue"/> buffer to sign.
            </param>
            <param name = "pbSignature">
            The address of a buffer to receive the signature produced by this function. The <paramref name = "cbSignature"/> parameter contains the size of this buffer.
            If this parameter is NULL, this function will calculate the size required for the signature and return the size in the location pointed to by the <paramref name = "pcbResult"/> parameter.
            </param>
            <param name = "cbSignature">
            The size, in bytes, of the <paramref name = "pbSignature"/> buffer. This parameter is ignored if the <paramref name = "pbSignature"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a ULONG variable that receives the number of bytes copied to the <paramref name = "pbSignature"/> buffer.
            If <paramref name = "pbSignature"/> is NULL, this receives the size, in bytes, required for the signature.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            To later verify that the signature is valid, call the <see cref = "M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)"/> function with an identical key and an identical hash of the original data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.Byte[],System.Int32,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Creates a signature of a hash value.
            </summary>
            <param name = "hKey">The handle of the key to use to sign the hash.</param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "pbHashValue">
            A pointer to a buffer that contains the hash value to sign. The <paramref name = "cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbHashValue">
            The number of bytes in the <paramref name = "pbHashValue"/> buffer to sign.
            </param>
            <param name = "pbSignature">
            The address of a buffer to receive the signature produced by this function. The <paramref name = "cbSignature"/> parameter contains the size of this buffer.
            If this parameter is NULL, this function will calculate the size required for the signature and return the size in the location pointed to by the <paramref name = "pcbResult"/> parameter.
            </param>
            <param name = "cbSignature">
            The size, in bytes, of the <paramref name = "pbSignature"/> buffer. This parameter is ignored if the <paramref name = "pbSignature"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a ULONG variable that receives the number of bytes copied to the <paramref name = "pbSignature"/> buffer.
            If <paramref name = "pbSignature"/> is NULL, this receives the size, in bytes, required for the signature.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            To later verify that the signature is valid, call the <see cref = "M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)"/> function with an identical key and an identical hash of the original data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte[],System.Int32,System.Byte[],System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Creates a signature of a hash value.
            </summary>
            <param name = "hKey">The handle of the key to use to sign the hash.</param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "pbHashValue">
            A pointer to a buffer that contains the hash value to sign. The <paramref name = "cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbHashValue">
            The number of bytes in the <paramref name = "pbHashValue"/> buffer to sign.
            </param>
            <param name = "pbSignature">
            The address of a buffer to receive the signature produced by this function. The <paramref name = "cbSignature"/> parameter contains the size of this buffer.
            If this parameter is NULL, this function will calculate the size required for the signature and return the size in the location pointed to by the <paramref name = "pcbResult"/> parameter.
            </param>
            <param name = "cbSignature">
            The size, in bytes, of the <paramref name = "pbSignature"/> buffer. This parameter is ignored if the <paramref name = "pbSignature"/> parameter is NULL.
            </param>
            <param name = "pcbResult">
            A pointer to a ULONG variable that receives the number of bytes copied to the <paramref name = "pbSignature"/> buffer.
            If <paramref name = "pbSignature"/> is NULL, this receives the size, in bytes, required for the signature.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the <paramref name = "hKey"/> parameter.
            </param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
            <remarks>
            To later verify that the signature is valid, call the <see cref = "M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)"/> function with an identical key and an identical hash of the original data.
            </remarks>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.IntPtr,System.Int32,System.IntPtr,System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Verifies that the specified signature matches the specified hash.
            </summary>
            <param name = "hKey">
            The handle of the key to use to decrypt the signature. This must be an identical key or the public key portion of the key pair used to sign the data with the <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "pbHashValue">
            The address of a buffer that contains the hash of the data. The <paramref name = "cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbHashValue">
            The size, in bytes, of the <paramref name = "pbHashValue"/> buffer.
            </param>
            <param name = "pbSignature">
            The address of a buffer that contains the signed hash of the data. The <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature. The <paramref name = "cbSignature"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbSignature">
            The size, in bytes, of the <paramref name = "pbSignature"/> buffer. The <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            If the key is a symmetric key, this parameter is not used and should be zero.
            If the key is an asymmetric key, this can be one of the following values.
            </param>
            <returns>
            Returns a status code that indicates the success or failure of the function.
            In particular, an invalid signature will produce a <see cref = "F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_SIGNATURE"/> result.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.IntPtr,System.Byte[],System.Int32,System.Byte[],System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Verifies that the specified signature matches the specified hash.
            </summary>
            <param name = "hKey">
            The handle of the key to use to decrypt the signature. This must be an identical key or the public key portion of the key pair used to sign the data with the <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "pbHashValue">
            The address of a buffer that contains the hash of the data. The <paramref name = "cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbHashValue">
            The size, in bytes, of the <paramref name = "pbHashValue"/> buffer.
            </param>
            <param name = "pbSignature">
            The address of a buffer that contains the signed hash of the data. The <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature. The <paramref name = "cbSignature"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbSignature">
            The size, in bytes, of the <paramref name = "pbSignature"/> buffer. The <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            If the key is a symmetric key, this parameter is not used and should be zero.
            If the key is an asymmetric key, this can be one of the following values.
            </param>
            <returns>
            Returns a status code that indicates the success or failure of the function.
            In particular, an invalid signature will produce a <see cref = "F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_SIGNATURE"/> result.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptVerifySignature(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte[],System.Int32,System.Byte[],System.Int32,PInvoke.NCrypt.NCryptSignHashFlags)">
            <summary>
            Verifies that the specified signature matches the specified hash.
            </summary>
            <param name = "hKey">
            The handle of the key to use to decrypt the signature. This must be an identical key or the public key portion of the key pair used to sign the data with the <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function.
            </param>
            <param name = "pPaddingInfo">
            A pointer to a structure that contains padding information. The actual type of structure this parameter points to depends on the value of the <paramref name = "dwFlags"/> parameter. This parameter is only used with asymmetric keys and must be NULL otherwise.
            </param>
            <param name = "pbHashValue">
            The address of a buffer that contains the hash of the data. The <paramref name = "cbHashValue"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbHashValue">
            The size, in bytes, of the <paramref name = "pbHashValue"/> buffer.
            </param>
            <param name = "pbSignature">
            The address of a buffer that contains the signed hash of the data. The <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature. The <paramref name = "cbSignature"/> parameter contains the size of this buffer.
            </param>
            <param name = "cbSignature">
            The size, in bytes, of the <paramref name = "pbSignature"/> buffer. The <see cref = "M:PInvoke.NCrypt.NCryptSignHash(PInvoke.NCrypt.SafeKeyHandle,System.Void*,System.Byte*,System.Int32,System.Byte*,System.Int32,System.Int32@,PInvoke.NCrypt.NCryptSignHashFlags)"/> function is used to create the signature.
            </param>
            <param name = "dwFlags">
            A set of flags that modify the behavior of this function. The allowed set of flags depends on the type of key specified by the hKey parameter.
            If the key is a symmetric key, this parameter is not used and should be zero.
            If the key is an asymmetric key, this can be one of the following values.
            </param>
            <returns>
            Returns a status code that indicates the success or failure of the function.
            In particular, an invalid signature will produce a <see cref = "F:PInvoke.NCrypt.SECURITY_STATUS.NTE_BAD_SIGNATURE"/> result.
            </returns>
        </member>
        <member name="M:PInvoke.NCrypt.NCryptFreeBuffer(System.IntPtr)">
            <summary>
            Releases a block of memory allocated by a CNG key storage provider.
            </summary>
            <param name = "pvInput">The address of the memory to be released.</param>
            <returns>Returns a status code that indicates the success or failure of the function.</returns>
        </member>
        <member name="T:PInvoke.NCryptExtensions">
            <summary>
            Extension methods related to the NCrypt library.
            </summary>
        </member>
        <member name="F:PInvoke.NCryptExtensions.MaxAllowedBufferSize">
            <summary>
            The maximum memory we are willing to allocate for the exception message.
            </summary>
        </member>
        <member name="M:PInvoke.NCryptExtensions.ThrowOnError(PInvoke.NCrypt.SECURITY_STATUS)">
            <summary>
            Throws an exception if an NCrypt function returned a failure error code.
            </summary>
            <param name="status">The result from an NCrypt function.</param>
        </member>
        <member name="M:PInvoke.NCryptExtensions.GetMessage(PInvoke.NCrypt.SECURITY_STATUS)">
            <summary>
            Gets the text associated with a <see cref="T:PInvoke.NCrypt.SECURITY_STATUS"/>.
            </summary>
            <param name="error">The error code.</param>
            <returns>The error message. Or <c>null</c> if no message could be found.</returns>
        </member>
        <member name="T:PInvoke.SecurityStatusException">
            <summary>
            An exception that describes a failure with a <see cref="T:PInvoke.NCrypt.SECURITY_STATUS"/> code.
            </summary>
        </member>
        <member name="M:PInvoke.SecurityStatusException.#ctor(PInvoke.NCrypt.SECURITY_STATUS)">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.SecurityStatusException"/> class.
            </summary>
            <param name="status">The error code leading to this exception.</param>
        </member>
        <member name="M:PInvoke.SecurityStatusException.#ctor(PInvoke.NCrypt.SECURITY_STATUS,System.String)">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.SecurityStatusException"/> class.
            </summary>
            <param name="status">The error code leading to this exception.</param>
            <param name="message">The customized message for the exception.</param>
        </member>
        <member name="M:PInvoke.SecurityStatusException.#ctor(PInvoke.NCrypt.SECURITY_STATUS,System.String,System.Exception)">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.SecurityStatusException"/> class.
            </summary>
            <param name="status">The error code leading to this exception.</param>
            <param name="message">The customized message for the exception.</param>
            <param name="inner">The inner exception.</param>
        </member>
        <member name="M:PInvoke.SecurityStatusException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Initializes a new instance of the <see cref="T:PInvoke.SecurityStatusException"/> class
            for deserialization.
            </summary>
            <param name="info">Serialization information.</param>
            <param name="context">Streaming context.</param>
        </member>
        <member name="P:PInvoke.SecurityStatusException.NativeErrorCode">
            <summary>
            Gets the <see cref="T:PInvoke.NCrypt.SECURITY_STATUS"/> code that identifies the error condition.
            </summary>
        </member>
        <member name="M:PInvoke.SecurityStatusException.GetMessage(PInvoke.NCrypt.SECURITY_STATUS)">
            <summary>
            Gets the message associated with the given <see cref="T:PInvoke.NCrypt.SECURITY_STATUS"/>.
            </summary>
            <param name="status">The <see cref="T:PInvoke.NCrypt.SECURITY_STATUS"/> for the error.</param>
            <returns>The description of the error.</returns>
        </member>
    </members>
</doc>
