From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/bcrypt/bcrypt_main.c | 13 ++++--------- dlls/bcrypt/tests/bcrypt.c | 5 ----- 2 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c index 2e06fdc07cc..8a4d595a7d0 100644 --- a/dlls/bcrypt/bcrypt_main.c +++ b/dlls/bcrypt/bcrypt_main.c @@ -1322,10 +1322,10 @@ static NTSTATUS key_symmetric_decrypt( struct key *key, UCHAR *input, ULONG inpu }
/* AES Key Wrap Algorithm (RFC3394) */ -static NTSTATUS aes_unwrap( const UCHAR *secret, ULONG secret_len, const UCHAR *cipher, UCHAR *plain ) +static NTSTATUS aes_unwrap( const UCHAR *secret, ULONG secret_len, const UCHAR *cipher, ULONG cipher_len, UCHAR *plain ) { UCHAR a[8], *r, b[16]; - ULONG len, t, i, n = secret_len / 8; + ULONG len, t, i, n = cipher_len / 8; int j; struct key *key;
@@ -1399,19 +1399,14 @@ static NTSTATUS key_import( struct algorithm *alg, struct key *decrypt_key, cons } else if (!wcscmp( type, BCRYPT_AES_WRAP_KEY_BLOB )) { - UCHAR output[BLOCK_LENGTH_AES]; + UCHAR output[32];
if (!decrypt_key || input_len < 8) return STATUS_INVALID_PARAMETER;
len = input_len - 8; if (len < BLOCK_LENGTH_AES || len & (BLOCK_LENGTH_AES - 1)) return STATUS_INVALID_PARAMETER; - if (len > sizeof(output)) - { - FIXME( "key length %lu not supported yet\n", len ); - return STATUS_NOT_IMPLEMENTED; - }
- if ((status = aes_unwrap( decrypt_key->u.s.secret, decrypt_key->u.s.secret_len, input, output ))) + if ((status = aes_unwrap( decrypt_key->u.s.secret, decrypt_key->u.s.secret_len, input, len, output ))) return status;
return key_symmetric_generate( alg, key, output, len ); diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c index ccf4f315452..dbb1f0f5bad 100644 --- a/dlls/bcrypt/tests/bcrypt.c +++ b/dlls/bcrypt/tests/bcrypt.c @@ -2121,19 +2121,14 @@ static void test_key_import_export(void)
key3 = NULL; ret = BCryptImportKey(aes, key, BCRYPT_AES_WRAP_KEY_BLOB, &key3, NULL, 0, buffer3, sizeof(buffer3), 0); - todo_wine ok(ret == STATUS_SUCCESS, "got %#lx\n", ret); - todo_wine ok(key3 != NULL, "key not set\n");
size = 0; memset(buffer4, 0xff, sizeof(buffer4)); ret = BCryptExportKey(key3, NULL, BCRYPT_KEY_DATA_BLOB, buffer4, sizeof(buffer4), &size, 0); - todo_wine ok(ret == STATUS_SUCCESS, "got %#lx\n", ret); - todo_wine ok(size == sizeof(buffer2), "Got %lu\n", size); - todo_wine ok(!memcmp(buffer4, buffer2, sizeof(buffer2)), "Expected exported key to match imported key\n");
BCryptDestroyKey(key3);