summaryrefslogtreecommitdiff
path: root/ssh-rsa.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2010-07-16 13:57:51 +1000
committerDamien Miller <djm@mindrot.org>2010-07-16 13:57:51 +1000
commit8a0268f1b3f62292d4124f8d158e0587c4f7c330 (patch)
tree43493a3202569a2939f5616127d9de8689613a7b /ssh-rsa.c
parentd0244d498ba970b9d9348429eaf7a4a0ef2b903c (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.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/ssh-rsa.c b/ssh-rsa.c
index bb9cc8e20..01f27f52c 100644
--- a/ssh-rsa.c
+++ b/ssh-rsa.c
@@ -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
35static int openssh_RSA_verify(int, u_char *, u_int, u_char *, u_int, RSA *); 36static 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 }