Turn your raspberri Pi Pico into a time-based 2fa authenticator! Why, I hear you ask? Well why not?
- git
- An HMAC key encoded in hexadecimal and split by byte Example (key in ASCII is "1234567890"):
uint8_t hmacKey[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30}Note: most websites provide the hmac key encoded in base32, for example in the form of abcd efgh hijk lmno or ABCDEFGHHIJKLMNO. You can use this site to convert the base32 string to hex (make sure you upcase it first if it's lowercase and remove all whitespaces).
- A Raspberry Pi pico and power supply
- 3x momentary switches
- A 3.3v character LCD display directly connected to an i2c adapter or a 5v LCD connected per the diagram to 5v power supply and the pico
- An i2c character LCD adapter for use with above LCD
Wiring diagram available as png or as a Fritzing sketch
-
git clonethe repository to the desired location -
To set up the project, make sure you have the pico sdk installed (if you're using VSCode make sure that it is present in the directory specified in PICO_SDK_PATH in settings.json (same root folder as project by default)). You can find out how to do this here.
-
Run
git submodule update --initto install the required library. -
Make a copy of
token.example.hand rename it totoken.h, there replace thehmacKey[]array contents with your token, andHMAC_KEY_LENGTHwith the length of your key andOTP_INTERVALwith the interval between generating OTP codes (default 30 seconds). -
Open main.c and edit the designated area to fit your time zone, LCD size and GPIO pin setup.
-
Open lcd.c and edit addr in line one to your i2c adapter's address (default is 0x3f)
-
Build the project and copy main.uf2 to the pico by plugging it in while holding the BOOTSEL button.