bcrypt: Added BCryptHash function.

Hans Leidekker hans at codeweavers.com
Mon Mar 21 07:17:41 CDT 2016


On Fri, 2016-03-18 at 09:26 -0700, Patrick Armstrong wrote:
> +NTSTATUS WINAPI BCryptHash( BCRYPT_ALG_HANDLE algorithm, UCHAR *secret, ULONG secretlen,
> +                            UCHAR *input, ULONG inputlen, UCHAR *output, ULONG outputlen )
> +{
> +    NTSTATUS status;
> +    BCRYPT_ALG_HANDLE handle;

This should be BCRYPT_HASH_HANDLE.

> +    TRACE( "%p, %p, %u, %p, %u, %p, %u\n", algorithm, secret, secretlen,
> +           input, inputlen, output, outputlen );
> +
> +    status = BCryptCreateHash( algorithm, &handle, NULL, 0, secret, secretlen, 0);
> +    if (status != STATUS_SUCCESS)
> +    {
> +        goto cleanup_bcrypt_hash;
> +    }

There's no need for cleanup here.

> +    status = BCryptHashData( handle, input, inputlen, 0 );
> +    if (status != STATUS_SUCCESS)
> +    {
> +        goto cleanup_bcrypt_hash;
> +    }
>+
> +    status = BCryptFinishHash( handle, output, outputlen, 0 );
> +    if (status != STATUS_SUCCESS)
> +    {
> +        goto cleanup_bcrypt_hash;
> +    }
> +
> +    return BCryptDestroyHash( handle );
> +
> +cleanup_bcrypt_hash:
> +
> +    BCryptDestroyHash( handle );
> +
> +    return status;
> +}

I don't think this goto is better than repeated BCryptDestroyHash calls.





More information about the wine-devel mailing list