/// <summary> /// Creates a key object for use with a symmetrical key encryption algorithm from a supplied key. /// </summary> /// <param name="algorithm"> /// The handle of an algorithm provider created with the <see cref="BCryptOpenAlgorithmProvider(string, string, BCryptOpenAlgorithmProviderFlags)"/> function. The algorithm specified when the provider was created must support symmetric key encryption. /// </param> /// <param name="secret"> /// A buffer that contains the key from which to create the key object. This is normally a hash of a password or some other reproducible data. If the data passed in exceeds the target key size, the data will be truncated and the excess will be ignored. /// Note: We strongly recommended that applications pass in the exact number of bytes required by the target key. /// </param> /// <param name="keyObject"> /// A pointer to a buffer that receives the key object. The required size of this buffer can be obtained by calling the <see cref="BCryptGetProperty(SafeHandle, string, BCryptGetPropertyFlags)"/> function to get the BCRYPT_OBJECT_LENGTH property. This will provide the size of the key object for the specified algorithm. /// This memory can only be freed after the returned key handle is destroyed. /// If the value of this parameter is NULL, the memory for the key object is allocated and freed by this function. /// </param> /// <param name="flags">A set of flags that modify the behavior of this function. No flags are currently defined, so this parameter should be zero.</param> /// <returns>A handle to the generated key.</returns> public static SafeKeyHandle BCryptGenerateSymmetricKey( SafeAlgorithmHandle algorithm, byte[] secret, byte[] keyObject = null, BCryptGenerateSymmetricKeyFlags flags = BCryptGenerateSymmetricKeyFlags.None) { SafeKeyHandle hKey; BCryptGenerateSymmetricKey( algorithm, out hKey, keyObject, keyObject?.Length ?? 0, secret, secret.Length, flags).ThrowOnError(); return(hKey); }
public static extern NTSTATUS BCryptGenerateSymmetricKey( SafeAlgorithmHandle hAlgorithm, out SafeKeyHandle phKey, byte[] pbKeyObject, int cbKeyObject, byte[] pbSecret, int cbSecret, BCryptGenerateSymmetricKeyFlags flags = BCryptGenerateSymmetricKeyFlags.None);