Add mouse pairing mockup

This commit is contained in:
jaseg 2018-12-13 12:03:46 +09:00
parent 47ca356e92
commit e53ed321d9
5 changed files with 52 additions and 0 deletions

Binary file not shown.

View file

@ -605,6 +605,7 @@ be established where one party has a display of some sort and the other party ha
\paragraph{Adaption to mice} Instead of a keyboard, a mouse can be used for pairing without compromising protocol
security. The host would encode the fingerprint bit string into a permutation
$\sigma(i) : \{n\in\mathbb N, n\le m\} \rightarrow \{n\in\mathbb N, n\le m\}$
for an integer security parameter $m>0$
and then display the sequence $\sigma(i)$ in a grid of buttons similar to a minesweeper field with an emualted mouse
cursor driven by pairing input on top. The user would then click the buttons on the grid in numeric order. The device
would do the same mouse emulation invisible to the user and would be able to observe the permutation this way. The

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -0,0 +1,51 @@
#!/usr/bin/env python3
import itertools
import gi
import gi
from gi.repository import Gtk as gtk, Gdk as gdk, Pango as pango, GLib as glib
import numpy as np
class PyApp(gtk.Window):
def __init__(self, m=5):
super(PyApp, self).__init__()
self.set_title("Mouse pairing mockup")
self.set_default_size(400, 400)
vbox = gtk.VBox()
grid = gtk.Grid(row_spacing=20, column_spacing=20, row_homogeneous=True, column_homogeneous=True, margin=20)
lbl = self.lbl = gtk.Label('Please press the buttons below in order 1-2-3...')
# GTK has the best APIs... -.-
screen = gdk.Screen.get_default()
gtk_provider = gtk.CssProvider()
gtk_context = gtk.StyleContext()
gtk_context.add_provider_for_screen(screen, gtk_provider, gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
css = b'''
#pinpad > button {font: 24 bold}
#pinpad > button:checked {background: linear-gradient(#e5efd4, #588a5a)}
'''
grid.set_name('pinpad')
gtk_provider.load_from_data(css)
st = np.random.RandomState(seed=0)
for i, (x, y) in zip(st.permutation(m**2), itertools.product(range(m), range(m))):
btn = gtk.ToggleButton(f'{i+1}')
btn.connect("toggled", self.on_toggled)
grid.attach(btn, x, y, 1, 1)
vbox.pack_start(lbl, True, True, 0)
vbox.pack_start(grid, True, True, 0)
self.add(vbox)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_toggled(self, widget, data=None):
print(f'Clicked : {widget.get_label()}')
if __name__ == '__main__':
PyApp()
gtk.main()

Binary file not shown.