diff options
author | Damien Miller <djm@mindrot.org> | 2010-07-16 13:57:51 +1000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2010-07-16 13:57:51 +1000 |
commit | 8a0268f1b3f62292d4124f8d158e0587c4f7c330 (patch) | |
tree | 43493a3202569a2939f5616127d9de8689613a7b /ssh-rsa.c | |
parent | d0244d498ba970b9d9348429eaf7a4a0ef2b903c (diff) |
- djm@cvs.openbsd.org 2010/07/13 11:52:06
[auth-rsa.c channels.c jpake.c key.c misc.c misc.h monitor.c]
[packet.c ssh-rsa.c]
implement a timing_safe_cmp() function to compare memory without leaking
timing information by short-circuiting like memcmp() and use it for
some of the more sensitive comparisons (though nothing high-value was
readily attackable anyway); "looks ok" markus@
Diffstat (limited to 'ssh-rsa.c')
-rw-r--r-- | ssh-rsa.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssh-rsa.c,v 1.41 2010/04/16 01:47:26 djm Exp $ */ | 1 | /* $OpenBSD: ssh-rsa.c,v 1.42 2010/07/13 11:52:06 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org> | 3 | * Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org> |
4 | * | 4 | * |
@@ -30,6 +30,7 @@ | |||
30 | #include "buffer.h" | 30 | #include "buffer.h" |
31 | #include "key.h" | 31 | #include "key.h" |
32 | #include "compat.h" | 32 | #include "compat.h" |
33 | #include "misc.h" | ||
33 | #include "ssh.h" | 34 | #include "ssh.h" |
34 | 35 | ||
35 | static int openssh_RSA_verify(int, u_char *, u_int, u_char *, u_int, RSA *); | 36 | static int openssh_RSA_verify(int, u_char *, u_int, u_char *, u_int, RSA *); |
@@ -249,11 +250,11 @@ openssh_RSA_verify(int type, u_char *hash, u_int hashlen, | |||
249 | error("bad decrypted len: %d != %d + %d", len, hlen, oidlen); | 250 | error("bad decrypted len: %d != %d + %d", len, hlen, oidlen); |
250 | goto done; | 251 | goto done; |
251 | } | 252 | } |
252 | if (memcmp(decrypted, oid, oidlen) != 0) { | 253 | if (timing_safe_cmp(decrypted, oid, oidlen) != 0) { |
253 | error("oid mismatch"); | 254 | error("oid mismatch"); |
254 | goto done; | 255 | goto done; |
255 | } | 256 | } |
256 | if (memcmp(decrypted + oidlen, hash, hlen) != 0) { | 257 | if (timing_safe_cmp(decrypted + oidlen, hash, hlen) != 0) { |
257 | error("hash mismatch"); | 258 | error("hash mismatch"); |
258 | goto done; | 259 | goto done; |
259 | } | 260 | } |