Skip to content

Commit

Permalink
crypto: clear out buffer after timing pbkdf algorithm
Browse files Browse the repository at this point in the history
The 'out' buffer will hold a key derived from master
password, so it is best practice to clear this buffer
when no longer required.

At this time, the code isn't worrying about locking
buffers into RAM to prevent swapping sensitive data
to disk.

Reviewed-by: Eric Blake <[email protected]>
Signed-off-by: Daniel P. Berrange <[email protected]>
  • Loading branch information
berrange committed Sep 19, 2016
1 parent 3bd1889 commit 8813800
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions crypto/pbkdf.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,24 +67,25 @@ uint64_t qcrypto_pbkdf2_count_iters(QCryptoHashAlgorithm hash,
const uint8_t *salt, size_t nsalt,
Error **errp)
{
uint64_t ret = -1;
uint8_t out[32];
uint64_t iterations = (1 << 15);
unsigned long long delta_ms, start_ms, end_ms;

while (1) {
if (qcrypto_pbkdf2_get_thread_cpu(&start_ms, errp) < 0) {
return -1;
goto cleanup;
}
if (qcrypto_pbkdf2(hash,
key, nkey,
salt, nsalt,
iterations,
out, sizeof(out),
errp) < 0) {
return -1;
goto cleanup;
}
if (qcrypto_pbkdf2_get_thread_cpu(&end_ms, errp) < 0) {
return -1;
goto cleanup;
}

delta_ms = end_ms - start_ms;
Expand All @@ -100,5 +101,9 @@ uint64_t qcrypto_pbkdf2_count_iters(QCryptoHashAlgorithm hash,

iterations = iterations * 1000 / delta_ms;

return iterations;
ret = iterations;

cleanup:
memset(out, 0, sizeof(out));
return ret;
}

0 comments on commit 8813800

Please sign in to comment.