1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-01 11:32:48 -05:00

Add more random-number noise collection calls.

Mostly on the Unix side: there are lots of places the Windows code was
collecting noise that the corresponding Unix/GTK code wasn't bothering
to, such as mouse movements, keystrokes and various network events.
Also, both platforms had forgotten to collect noise when reading data
from a pipe to a local proxy process, even though in that
configuration that's morally equivalent to the network packet timings
that we'd normally be collecting from.
This commit is contained in:
Simon Tatham
2019-01-22 21:01:26 +00:00
parent c0de1cbbad
commit 76aa3f6f7a
6 changed files with 15 additions and 0 deletions

View File

@ -987,6 +987,8 @@ gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
bool generated_something = false; bool generated_something = false;
char num_keypad_key = '\0'; char num_keypad_key = '\0';
noise_ultralight(event->keyval);
#ifdef OSX_META_KEY_CONFIG #ifdef OSX_META_KEY_CONFIG
if (event->state & inst->system_mod_mask) if (event->state & inst->system_mod_mask)
return false; /* let GTK process OS X Command key */ return false; /* let GTK process OS X Command key */
@ -2057,6 +2059,8 @@ static gboolean button_internal(GtkFrontend *inst, GdkEventButton *event)
/* Remember the timestamp. */ /* Remember the timestamp. */
inst->input_event_time = event->time; inst->input_event_time = event->time;
noise_ultralight(event->button);
show_mouseptr(inst, true); show_mouseptr(inst, true);
shift = event->state & GDK_SHIFT_MASK; shift = event->state & GDK_SHIFT_MASK;
@ -2183,6 +2187,8 @@ gint motion_event(GtkWidget *widget, GdkEventMotion *event, gpointer data)
/* Remember the timestamp. */ /* Remember the timestamp. */
inst->input_event_time = event->time; inst->input_event_time = event->time;
noise_ultralight(((uint32_t)event->x << 16) | (uint32_t)event->y);
show_mouseptr(inst, true); show_mouseptr(inst, true);
shift = event->state & GDK_SHIFT_MASK; shift = event->state & GDK_SHIFT_MASK;

View File

@ -167,6 +167,7 @@ static int fdsocket_try_send(FdSocket *fds)
bufchain_prefix(&fds->pending_output_data, &data, &len); bufchain_prefix(&fds->pending_output_data, &data, &len);
ret = write(fds->outfd, data, len); ret = write(fds->outfd, data, len);
noise_ultralight(ret);
if (ret < 0 && errno != EWOULDBLOCK) { if (ret < 0 && errno != EWOULDBLOCK) {
if (!fds->pending_error) { if (!fds->pending_error) {
fds->pending_error = errno; fds->pending_error = errno;

View File

@ -958,6 +958,7 @@ int main(int argc, char **argv)
if (backend_connected(backend)) { if (backend_connected(backend)) {
ret = read(STDIN_FILENO, buf, sizeof(buf)); ret = read(STDIN_FILENO, buf, sizeof(buf));
noise_ultralight(ret);
if (ret < 0) { if (ret < 0) {
perror("stdin: read"); perror("stdin: read");
exit(1); exit(1);

View File

@ -14,6 +14,9 @@ const bool dup_check_launchable = false; /* no need to check host name
* in conf */ * in conf */
const bool use_pty_argv = true; const bool use_pty_argv = true;
/* gtkwin.c will call this, and in pterm it's not needed */
void noise_ultralight(unsigned long data) { }
const struct BackendVtable *select_backend(Conf *conf) const struct BackendVtable *select_backend(Conf *conf)
{ {
return &pty_backend; return &pty_backend;

View File

@ -114,6 +114,9 @@ int first_fd(int *state, int *rwx)
void select_result(int fd, int event) void select_result(int fd, int event)
{ {
struct fd *fdstruct = find234(fds, &fd, uxsel_fd_findcmp); struct fd *fdstruct = find234(fds, &fd, uxsel_fd_findcmp);
noise_ultralight(fd);
/* /*
* Apparently this can sometimes be NULL. Can't see how, but I * Apparently this can sometimes be NULL. Can't see how, but I
* assume it means I need to ignore the event since it's on an * assume it means I need to ignore the event since it's on an

View File

@ -689,6 +689,7 @@ void handle_got_event(HANDLE event)
h->u.o.sentdata(h, -h->u.o.writeerr); h->u.o.sentdata(h, -h->u.o.writeerr);
} else { } else {
bufchain_consume(&h->u.o.queued_data, h->u.o.lenwritten); bufchain_consume(&h->u.o.queued_data, h->u.o.lenwritten);
noise_ultralight(h->u.o.lenwritten);
h->u.o.sentdata(h, bufchain_size(&h->u.o.queued_data)); h->u.o.sentdata(h, bufchain_size(&h->u.o.queued_data));
handle_try_output(&h->u.o); handle_try_output(&h->u.o);
} }