aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: ae473f69a8a60e15546317f8f53eca5cd9a11693 (plain) (blame)
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.