On Sun, 2022-03-06 at 12:22 -0300, Santino Mazza wrote:
Signed-off-by: Santino Mazza <mazzasantino1206(a)gmail.com> --- dlls/bcrypt/bcrypt_main.c | 5 +++++ dlls/bcrypt/tests/bcrypt.c | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c index 7353cae26eb..e62be127bb4 100644 --- a/dlls/bcrypt/bcrypt_main.c +++ b/dlls/bcrypt/bcrypt_main.c @@ -701,6 +701,11 @@ static NTSTATUS set_key_property( struct key *key, const WCHAR *prop, UCHAR *val return STATUS_NOT_IMPLEMENTED; } } + else if (!wcscmp( prop, BCRYPT_KEY_LENGTH )) + { + key->u.a.bitlen = *(DWORD*)value; + return STATUS_SUCCESS; + }
You should check that input length is larger than or equal to sizeof(DWORD) before reading from the buffer.
+ ret = BCryptSetProperty(key, BCRYPT_KEY_LENGTH, &keylen, sizeof(keylen), 0); + ok(ret == STATUS_SUCCESS, "got %#lx\n", ret); + pad.pszAlgId = BCRYPT_SHA1_ALGORITHM; memset(sig, 0, sizeof(sig)); ret = BCryptSignHash(key, &pad, hash, sizeof(hash), sig, sizeof(sig), &len, BCRYPT_PAD_PKCS1);
This produces warnings: ../wine/dlls/bcrypt/tests/bcrypt.c:713:53: warning: passing argument 3 of ‘BCryptSetProperty’ from incompatible pointer type [-Wincompatible-pointer-types] 713 | ret = BCryptSetProperty(aes, BCRYPT_KEY_LENGTH, &keylen, sizeof(keylen), 0); | ^~~~~~~ | | | DWORD * {aka long unsigned int *}