From 4fea5ed998cbe8c0988eec9170e984c7e6394bd7 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 9 Mar 2012 16:12:51 +0100 Subject: [PATCH] added common compile time config --- config.h | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 config.h diff --git a/config.h b/config.h new file mode 100644 index 0000000..40e6d17 --- /dev/null +++ b/config.h @@ -0,0 +1,89 @@ + +#ifndef _CONFIG_H_ +#define _CONFIG_H_ + +/* START of configuration */ + +#define DEBUG_LEVEL 0 +#define ENCRYPTION 1 +#define WRITE_PROTECTION 1 +#define BTN_LONG_PRESS 40 + +/* slot types */ +#define SLOT_EMPTY 0 /* an empty slot */ +#define SLOT_STRING 1 /* a stored password as string */ +#define SLOT_OTP 2 /* a stored sequence and seed for one time passwords */ +#define SLOT_RANDOM 3 /* password gets generated each time */ +#define SLOT_GENERATE 4 /* password will be generated on key during configuration */ + +/* the most significant bits of slot.type have a special meaning */ +#define SKIP_USER (1 << 0) /* just print the password */ +#define SKIP_RETURN (1 << 1) /* omit trailing newline after password */ +#define SKIP_DELIMITER (1 << 2) /* omit delimiter between username and password */ +#define SKIP_RESET (1 << 3) /* do not return to first slot */ + +#ifndef E2END +#define E2END 511 /* for ATMega8 */ +#endif + +#define MAX_SLOTS ((E2END+1) / sizeof(struct slot)) +#define MAX_USER_LEN 24 +#define MAX_PASS_LEN 23 +#define MAX_SERIAL_LEN 4 + +/* USB vendor requests */ +#define USBRQ_VENDOR_GET_STATUS 1 +#define USBRQ_VENDOR_SET_SLOT 2 +#define USBRQ_VENDOR_SET_SERIAL 3 +#define USBRQ_VENDOR_RESET 4 + +#define DEVICE_VID 0x16c0 +#define DEVICE_PID 0x05dc + +/* END of configuration */ + +/** + * A slot stores one user/password combination in EEPROM + */ +struct slot { + char type; + char options; + char delimiter; /* \0 is also possible */ + char user[MAX_USER_LEN]; + union { + char string[MAX_PASS_LEN]; + struct { + char seed[8]; + uint16_t sequence; + } otp; + } pass; +} __attribute__ ((packed)); + +enum error { + ERROR_SUCCESS, + ERROR_LOCKED, + ERROR_OVERFLOW, + ERROR_INVALID_SLOT, + ERROR_UNKNOW +}; + +enum mode { + IDLE, + EXPECT_SLOT, + EXPECT_SERIAL, + EXPECT_REPORT +}; + +struct status { + uint16_t counter; /* startups since last reset/flash */ + uint16_t maxSlots; + uint16_t maxPassLen; + uint16_t maxUserLen; + uint16_t maxSerialLen; + + uint8_t error; + uint8_t mode; + uint8_t writable; +} __attribute__ ((packed)); + +#endif /* _CONFIG_H_ */