/* * test.c: Small test program for hasplib. * * Copyright (C) 2014 Jason A. Donenfeld . All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "hasplib.h" #include #include int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s PASSWORD1 PASSWORD2\n", argv[0]); return 1; } uint16_t password1 = atoi(argv[1]); uint16_t password2 = atoi(argv[2]); hasp_dongle **dongles; size_t num_dongles = hasp_find_dongles(&dongles); printf("[+] %zu dongle%s connected.\n", num_dongles, num_dongles == 1 ? "" : "s"); for (size_t i = 0; i < num_dongles; ++i) { uint16_t memory_size; if (!hasp_login(dongles[i], password1, password2, &memory_size)) continue; printf("[+] Dongle %zu is ours, and has a memory size of %d bytes:\n", i, memory_size); uint32_t id; if (!hasp_id(dongles[i], &id)) continue; printf("[+] ID: 0x%04X.\n", id); uint16_t val; if (!hasp_read(dongles[i], 23 /* counter */, &val)) continue; printf("[+] Counter value: %d.\n", val); if (!hasp_write(dongles[i], 23 /* counter */, 50)) continue; printf("[+] Wrote counter value: 50.\n"); if (!hasp_read(dongles[i], 23 /* counter */, &val)) continue; printf("[+] Counter value: %d.\n", val); if (!hasp_write(dongles[i], 23 /* counter */, 192)) continue; printf("[+] Wrote counter value: 192.\n"); if (!hasp_read(dongles[i], 23 /* counter */, &val)) continue; printf("[+] Counter value: %d.\n", val); } hasp_free_dongles(dongles); return 0; }