yubioath-gui: implement HMAC-SHA256 support in UI

Signed-off-by: Steven Noonan <steven@uplinklabs.net>
This commit is contained in:
Steven Noonan 2016-09-09 15:16:52 -07:00
parent 042171cc7c
commit dd883780b7
3 changed files with 13 additions and 1 deletions

View File

@ -221,6 +221,7 @@ class YubiOathApplication(qt.Application):
self._controller.add_cred(
dialog.name, dialog.key, oath_type=dialog.oath_type,
digits=dialog.n_digits,
algo=dialog.algorithm,
require_touch=dialog.require_touch)
except NoSpaceError:
QtGui.QMessageBox.critical(self.window, m.no_space, m.no_space_desc)

View File

@ -73,6 +73,7 @@ cred_key = "Secret key (base32)"
cred_type = "Credential type"
cred_totp = "Time based (TOTP)"
cred_hotp = "Counter based (HOTP)"
algorithm = "Algorithm"
invalid_name = "Invalid name"
invalid_name_desc = "Name must be at least 3 characters"
invalid_key = "Invalid key"

View File

@ -25,7 +25,7 @@
# for the parts of OpenSSL used as well as that of the covered work.
from yubioath.yubicommon import qt
from ...core.standard import TYPE_TOTP, TYPE_HOTP
from ...core.standard import ALG_SHA1, ALG_SHA256, TYPE_TOTP, TYPE_HOTP
from ...core.utils import parse_uri
from .. import messages as m
from ..qrparse import parse_qr_codes
@ -99,6 +99,10 @@ class AddCredDialog(qt.Dialog):
self._n_digits.addItems(['6', '8'])
layout.addRow(m.n_digits, self._n_digits)
self._algorithm = QtGui.QComboBox()
self._algorithm.addItems(['SHA-1', 'SHA-256'])
layout.addRow(m.algorithm, self._algorithm)
self._require_touch = QtGui.QCheckBox(m.require_touch)
# Touch-required support not available before 4.2.6
if self._version >= (4, 2, 6):
@ -132,6 +136,8 @@ class AddCredDialog(qt.Dialog):
self._cred_key.setText(parsed['secret'])
n_digits = parsed.get('digits', '6')
self._n_digits.setCurrentIndex(0 if n_digits == '6' else 1)
algo = parsed.get('algorithm', 'SHA1').upper()
self._algorithm.setCurrentIndex(0 if algo == 'SHA1' else 1)
if parsed['type'] == 'totp':
self._cred_totp.setChecked(True)
else:
@ -177,6 +183,10 @@ class AddCredDialog(qt.Dialog):
def n_digits(self):
return int(self._n_digits.currentText())
@property
def algorithm(self):
return ALG_SHA1 if self._algorithm.currentIndex() == 0 else ALG_SHA256
@property
def require_touch(self):
return self._require_touch.isChecked()