LibLogicalAccess  2.5.0
An Open Source RFID Library
Loading...
Searching...
No Matches
yubikeydatatransport.hpp
Go to the documentation of this file.
1
7#ifndef LOGICALACCESS_YUBIKEYDATATRANSPORT_HPP
8#define LOGICALACCESS_YUBIKEYDATATRANSPORT_HPP
9
12#include <list>
13
14namespace logicalaccess
15{
16#define RESP_TIMEOUT_WAIT_MASK 0x1f
17#define RESP_TIMEOUT_WAIT_FLAG 0x20
18#define RESP_PENDING_FLAG 0x40
19#define SLOT_WRITE_FLAG 0x80
20#define DUMMY_REPORT_WRITE 0x8f
21#define YK_FLAG_MAYBLOCK 0x01 << 16
22#define YK_CRC_OK_RESIDUAL 0xf0b8
23#define SLOT_DATA_SIZE 64
24#define WAIT_FOR_WRITE_FLAG 1150
25
26typedef struct
27{
28 unsigned char payload[SLOT_DATA_SIZE]; // Frame payload
29 unsigned char slot; // Slot # field
30 unsigned short crc; // CRC field
31 unsigned char filler[3]; // Filler
32} YK_FRAME;
33
37class LLA_READERS_LIBUSB_API YubikeyDataTransport : public LibUSBDataTransport
38{
39 public:
44
48 virtual ~YubikeyDataTransport();
49
54 void send(const std::vector<unsigned char> &data) override;
55
61 std::vector<unsigned char> receive(long int timeout = 5000) override;
62
63 std::vector<unsigned char> receive(size_t readlen, long int timeout);
64
65 void yk_force_key_update();
66
67 std::vector<unsigned char> yk_wait_for_key_status(uint8_t slot, unsigned int flags,
68 unsigned int max_time_ms,
69 bool logic_and, unsigned char mask);
70
71 uint16_t yk_crc16(const std::vector<unsigned char>& data) const;
72
73 uint16_t yk_endian_swap_16(uint16_t x) const;
74};
75}
76
77#endif /* LOGICALACCESS_YUBIKEYDATATRANSPORT_HPP */
An LibUSB data transport class.
Definition: libusbdatatransport.hpp:25
An Yubikey data transport class.
Definition: yubikeydatatransport.hpp:38
LibUSB transport for reader/card commands.
LibUSB Reader unit.
Definition: asn1.hpp:9
Definition: yubikeydatatransport.hpp:27
unsigned char slot
Definition: yubikeydatatransport.hpp:29
unsigned short crc
Definition: yubikeydatatransport.hpp:30
#define SLOT_DATA_SIZE
Definition: yubikeydatatransport.hpp:23