#include <stdio.h>
#include <stdlib.h>
-#include <unistd.h>
#include <stdarg.h>
#include <string.h>
static const float VERSION = 1.0f;
-static const unsigned int TIMESTAMP_SIZE = 6;
-static const unsigned int SEED_SIZE = 12;
-static const unsigned int PASSWORD_SIZE = 8;
-static const unsigned int MESSAGE_SIZE = 128;
+static const size_t TIMESTAMP_SIZE = 6;
+static const size_t SEED_SIZE = 12;
+static const size_t PASSWORD_SIZE = 8;
+static const size_t MESSAGE_SIZE = 128;
-void
+static void
pr_usage()
{
fprintf(stderr, "%s\n",
);
}
-void
+static void
pr_error_exit(unsigned int usage, const char *error, ...)
{
va_list args;
if (!error) return;
va_start(args, error);
- vsnprintf(error_message, MESSAGE_SIZE, error, args);
+ (void) vsnprintf(error_message, MESSAGE_SIZE, error, args);
va_end(args);
fprintf(stderr, "Error: %s\n", error_message);
if (usage) pr_usage();
- exit(1);
+ exit(EXIT_FAILURE);
}
static const unsigned int passwords[8] = {
0xC621E14A
};
-unsigned int
+static unsigned int
generate_seed(char *mac, char *timestamp, char *seed)
{
unsigned int result = 0;
if (mac && strlen(mac) == 17) {
- unsigned int i;
+ size_t i;
char *mac_ptr = mac + 9;
size_t ts_len = strlen(timestamp);
for (i = 0; i <= SEED_SIZE; ++i) {
return result;
}
-unsigned int
+static unsigned int
generate_pass(char *seed, char *password)
{
unsigned int result = 0;
if (seed && strlen(seed) == 12) {
- unsigned int timestamp = 0;
- unsigned byte = 0;
- sscanf(seed, "%06x", ×tamp);
- sscanf(&seed[10], "%02x", &byte);
- unsigned int key = byte & 0x07;
- unsigned int pass = (passwords[key] + timestamp) ^ timestamp;
+ unsigned int timestamp, byte, key, pass;
+ timestamp = byte = 0;
+ if(! sscanf(seed, "%06x", ×tamp))
+ pr_error_exit(1, "unable to parse seed's timestamp");
+ if (! sscanf(&seed[10], "%02x", &byte))
+ pr_error_exit(1, "unable to parse seed's MAC address");
+ key = byte & 0x07;
+ pass = (passwords[key] + timestamp) ^ timestamp;
snprintf(password, PASSWORD_SIZE + 1, "%08x", pass);
result = 1;
} else
else {
unsigned int arg;
char *MAC_ADDR = NULL;
- char *MODEL = NULL;
char timestamp[TIMESTAMP_SIZE + 1];
char seed[SEED_SIZE + 1];
char password[PASSWORD_SIZE + 1];
opt_seed = opt_pass = opt_ts = 0;
strncpy(timestamp, "000000", TIMESTAMP_SIZE);
- for (arg = 1; arg < argc; ++arg) {
+ for (arg = 1; arg < (unsigned) argc; ++arg) {
size_t arg_len = strlen(argv[arg]);
if (argv[arg][0] == '-') {