68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""
|
|
module for accessing a YubiKey
|
|
|
|
In an attempt to support any future versions of the YubiKey which
|
|
might not be USB HID devices, you should always use the yubikey.find_key()
|
|
(or better yet, yubico.find_yubikey()) function to initialize
|
|
communication with YubiKeys.
|
|
|
|
Example usage (if using this module directly, see base module yubico) :
|
|
|
|
import yubico.yubikey
|
|
|
|
try:
|
|
YK = yubico.yubikey.find_key()
|
|
print "Version : %s " % YK.version()
|
|
except yubico.yubico_exception.YubicoError as inst:
|
|
print "ERROR: %s" % inst.reason
|
|
"""
|
|
# Copyright (c) 2010, 2011, 2012 Yubico AB
|
|
# See the file COPYING for licence statement.
|
|
|
|
__all__ = [
|
|
# constants
|
|
'RESP_TIMEOUT_WAIT_FLAG',
|
|
'RESP_PENDING_FLAG',
|
|
'SLOT_WRITE_FLAG',
|
|
# functions
|
|
'find_key',
|
|
# classes
|
|
'YubiKey',
|
|
'YubiKeyTimeout',
|
|
]
|
|
|
|
from .yubico_version import __version__
|
|
from .yubikey_base import YubiKeyError, YubiKeyTimeout, YubiKeyVersionError, YubiKeyCapabilities, YubiKey
|
|
from .yubikey_usb_hid import YubiKeyUSBHID, YubiKeyHIDDevice, YubiKeyUSBHIDError
|
|
from .yubikey_neo_usb_hid import YubiKeyNEO_USBHID
|
|
from .yubikey_4_usb_hid import YubiKey4_USBHID
|
|
|
|
|
|
def find_key(debug=False, skip=0):
|
|
"""
|
|
Locate a connected YubiKey. Throws an exception if none is found.
|
|
|
|
This function is supposed to be possible to extend if any other YubiKeys
|
|
appear in the future.
|
|
|
|
Attributes :
|
|
skip -- number of YubiKeys to skip
|
|
debug -- True or False
|
|
"""
|
|
try:
|
|
hid_device = YubiKeyHIDDevice(debug, skip)
|
|
yk_version = hid_device.status().ykver()
|
|
if (2, 1, 4) <= yk_version <= (2, 1, 9):
|
|
return YubiKeyNEO_USBHID(debug, skip, hid_device)
|
|
if yk_version < (3, 0, 0):
|
|
return YubiKeyUSBHID(debug, skip, hid_device)
|
|
if yk_version < (4, 0, 0):
|
|
return YubiKeyNEO_USBHID(debug, skip, hid_device)
|
|
return YubiKey4_USBHID(debug, skip, hid_device)
|
|
except YubiKeyUSBHIDError as inst:
|
|
if 'No USB YubiKey found' in str(inst):
|
|
# generalize this error
|
|
raise YubiKeyError('No YubiKey found')
|
|
else:
|
|
raise
|