1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# Hasp HL Library
### Jason A. Donenfeld | <Jason@zx2c4.com>
This is a very simple library based on `libusb` for accessing MemoHASP
functions of the Hasp HL USB dongle. It currently can view the ID of a dongle,
validate the password, read from memory locations, and write to memory
locations.
This library allows use of the dongle **without any drivers**!
## API
Include `hasplib.h`, and compile your application alongside `hasplib.c`
and optionally `hasplib-simple.c`.
### Main Functions
Get a list of all connected dongles:
size_t hasp_find_dongles(hasp_dongle ***dongles);
Login to that dongle using the password, and optionally view the memory size:
bool hasp_login(hasp_dongle *dongle, uint16_t password1, uint16_t password2, uint16_t *memory_size);
Instead of the first two steps, you can also retreive the first connected
dongle that fits your password:
hasp_dongle *hasp_find_login_first_dongle(uint16_t password1, uint16_t password2);
Read the ID of a dongle:
bool hasp_id(hasp_dongle *dongle, uint32_t *id);
Read from a memory location:
bool hasp_read(hasp_dongle *dongle, uint16_t location, uint16_t *value);
Write to a memory location:
bool hasp_write(hasp_dongle *dongle, uint16_t location, uint16_t value);
Free the list of dongles opened earlier:
void hasp_free_dongles(hasp_dongle **dongles);
Free a single dongle:
void hasp_free_dongle(hasp_dongle *dongle);
### Simple Functions
The simple API wraps the main API and provides access to a default dongle, which is the
first connected dongle that responds to the given passwords. It handles dongle disconnects
and reconnections.
Create a `hasp_simple *` object for a given password pair:
hasp_simple *hasp_simple_login(uint16_t password1, uint16_t password2);
Free this object:
void hasp_simple_free(hasp_simple *simple);
Read an ID, returning 0 if an error occurred:
uint32_t hasp_simple_id(hasp_simple *simple);
Read a memory location, returning 0 if an error occurred:
uint16_t hasp_simple_read(hasp_simple *simple, uint16_t location);
Write to a memory location, returning its success:
bool hasp_simple_write(hasp_simple *simple, uint16_t location, uint16_t value);
## Licensing
This is released under the GPLv3. See `COPYING` for more information. If you
need a less restrictive license, please contact me.
|