diff options
author | otto <> | 2004-12-22 17:33:25 +0000 |
---|---|---|
committer | otto <> | 2004-12-22 17:33:25 +0000 |
commit | 1aac940d9977aaf0d04bb4eafe4cc1c7acfe71b5 (patch) | |
tree | b8289097220df3ff10e7242c9a53b71727238ccd /src/lib/libc/crypt | |
parent | 48524b4aeb5ceb3b1634040fb37ae098ea229c4c (diff) | |
download | openbsd-1aac940d9977aaf0d04bb4eafe4cc1c7acfe71b5.tar.gz openbsd-1aac940d9977aaf0d04bb4eafe4cc1c7acfe71b5.tar.bz2 openbsd-1aac940d9977aaf0d04bb4eafe4cc1c7acfe71b5.zip |
Test the upper limit for the max # of rounds to, to avoid wrapping and ending
up with a low number of rounds. Spotted by mpech@; ok mpech@ millert@
Diffstat (limited to 'src/lib/libc/crypt')
-rw-r--r-- | src/lib/libc/crypt/bcrypt.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lib/libc/crypt/bcrypt.c b/src/lib/libc/crypt/bcrypt.c index 95251db1cd..6e1ae04e1b 100644 --- a/src/lib/libc/crypt/bcrypt.c +++ b/src/lib/libc/crypt/bcrypt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bcrypt.c,v 1.18 2003/08/07 00:28:45 deraadt Exp $ */ | 1 | /* $OpenBSD: bcrypt.c,v 1.19 2004/12/22 17:33:25 otto Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de> | 4 | * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de> |
@@ -164,6 +164,8 @@ bcrypt_gensalt(u_int8_t log_rounds) | |||
164 | 164 | ||
165 | if (log_rounds < 4) | 165 | if (log_rounds < 4) |
166 | log_rounds = 4; | 166 | log_rounds = 4; |
167 | else if (log_rounds > 31) | ||
168 | log_rounds = 31; | ||
167 | 169 | ||
168 | encode_salt(gsalt, csalt, BCRYPT_MAXSALT, log_rounds); | 170 | encode_salt(gsalt, csalt, BCRYPT_MAXSALT, log_rounds); |
169 | return gsalt; | 171 | return gsalt; |
@@ -212,7 +214,10 @@ bcrypt(const char *key, const char *salt) | |||
212 | return error; | 214 | return error; |
213 | 215 | ||
214 | /* Computer power doesn't increase linear, 2^x should be fine */ | 216 | /* Computer power doesn't increase linear, 2^x should be fine */ |
215 | if ((rounds = (u_int32_t) 1 << (logr = atoi(salt))) < BCRYPT_MINROUNDS) | 217 | logr = atoi(salt); |
218 | if (logr > 31) | ||
219 | return error; | ||
220 | if ((rounds = (u_int32_t) 1 << logr) < BCRYPT_MINROUNDS) | ||
216 | return error; | 221 | return error; |
217 | 222 | ||
218 | /* Discard num rounds + "$" identifier */ | 223 | /* Discard num rounds + "$" identifier */ |