Browse Source

convert clock() to clock_gettime() for improved precision (and accuracy?)

guenther suggested using thread time, which actually may improve accuracy
if somebody puts this in a threaded program.
OPENBSD_5_7 openntpd-5.7p1
tedu 10 years ago
parent
commit
6758bf4952
1 changed files with 9 additions and 7 deletions
  1. +9
    -7
      src/lib/libc/crypt/bcrypt.c

+ 9
- 7
src/lib/libc/crypt/bcrypt.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: bcrypt.c,v 1.47 2014/12/30 10:27:24 tedu Exp $ */
/* $OpenBSD: bcrypt.c,v 1.48 2015/01/05 13:10:10 tedu Exp $ */
/* /*
* Copyright (c) 2014 Ted Unangst <tedu@openbsd.org> * Copyright (c) 2014 Ted Unangst <tedu@openbsd.org>
@ -231,24 +231,26 @@ bcrypt_checkpass(const char *pass, const char *goodhash)
int int
bcrypt_autorounds(void) bcrypt_autorounds(void)
{ {
clock_t before, after;
struct timespec before, after;
int r = 8; int r = 8;
char buf[_PASSWORD_LEN]; char buf[_PASSWORD_LEN];
int duration; int duration;
before = clock();
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &before);
bcrypt_newhash("testpassword", r, buf, sizeof(buf)); bcrypt_newhash("testpassword", r, buf, sizeof(buf));
after = clock();
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &after);
duration = after - before;
duration = after.tv_sec - before.tv_sec;
duration *= 1000000;
duration += (after.tv_nsec - before.tv_nsec) / 1000;
/* too quick? slow it down. */ /* too quick? slow it down. */
while (r < 16 && duration <= CLOCKS_PER_SEC / 4) {
while (r < 16 && duration <= 1000000 / 4) {
r += 1; r += 1;
duration *= 2; duration *= 2;
} }
/* too slow? speed it up. */ /* too slow? speed it up. */
while (r > 4 && duration > CLOCKS_PER_SEC / 2) {
while (r > 4 && duration > 1000000 / 2) {
r -= 1; r -= 1;
duration /= 2; duration /= 2;
} }


Loading…
Cancel
Save