# P2FA
### Hardware 2FA Manager
- https://www.adafruit.com/product/4282
- https://github.com/waveshareteam/e-Paper/tree/master
- https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_Manual#C
### Prep build environment:
- LG:
```bash
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
make
sudo make install
```
- BCM2835
```bash
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
```
### Required libs:
- make
- cmake
- python3
- python3-pip
- gpiod
- i2c-tools
- libgpiod-dev
- libpng-dev
- libncurses-dev
### Build
`./build.sh`
Executable will be in the "c" directory
If moving to an alternate directory, ensure the c/libs/libgo_p2fa.so is copied.
To enable the i2c device, add the following to the bottom of /boot/firmware/config.txt
```text
dtoverlay=i2c-rtc,ds3231,gpio-shutdown,gpio_pin=20,active_low=1,gpio_pull=up
```
Reference [this walk through](https://pimylifeup.com/raspberry-pi-rtc/) for more info
Reference [this walk through](https://howchoo.com/pi/how-to-add-a-power-button-to-your-raspberry-pi/) to configure the power button. Make sure to use GPIO pin 20 instead of 3
Set GPIO pins
```bash
pinctrl set 6 pd
pinctrl set 12 pd
pinctrl set 13 pd
pinctrl set 16 pd
pinctrl set 19 pd
pinctrl set 20 pd
pinctrl set 22 pd
pinctrl set 27 pd
```
### Configuration
To add a config, create a text file in the ~/.totp directory (if it doesn't exist then create it). The name of the file will be what is populated on the device.
Ex: "google.txt" will be displayed as "google"
File Format:
```text
key: (Base32 Key, REQUIRED)
hash: (sha1, sha256, sha512, or hmac. OPTIONAL) (default is sha1)
timestep: (int representing duration in seconds between codes, default is 30, OPTIONAL)
counter: (int between 6 and 10 inclusive, HOTP counter, default is 6, OPTIONAL)
digits: (int between 1 and 10 inclusive, how many digits to generate, default is 6, OPTIONAL)
```
Example:
```text
key: GGAMSYNKW3H7HEKK
hash: sha1
timestep: 30
counter: 6
digits: 6
```