From 6451934b3a562766cd18416b942edf8b587660f4 Mon Sep 17 00:00:00 2001 From: girst Date: Sun, 23 Apr 2017 13:26:48 +0200 Subject: [PATCH] remove unecessary files, add tab and return key, more documentation --- README.md | 48 ++++++++++++++++++++++++++++++++------------- hardpass-proto.pdf | Bin 43180 -> 0 bytes main.c | 6 ++++-- pass-installer.sh | 25 ----------------------- scancodes.c | 2 ++ 5 files changed, 40 insertions(+), 41 deletions(-) delete mode 100644 hardpass-proto.pdf delete mode 100644 pass-installer.sh diff --git a/README.md b/README.md index 87cb966..38ebbad 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@ # hardpass A hardware password manager, built around a Paspberry Pi Zero and [`pass`, the UNIX password manager](https://passwordstore.org). -This is also an entry for [Hackaday.io](https://hackaday.io)'s Pi Zero Contest. +This project is now maintained at [this repository](https://github.com/girst/hardpass-passwordmanager). -This repo shall also provide code for your own hid-gadgets - the code is meant to be easy to change to suit your needs. +# sendHID -## Hardware -I am using a Raspberry Pi Zero, since it has USB-OTG support and a lot of GPIO to interface an OLED screen, a button matrix for input and maybe even an ESP8266 for WiFi. -The OLED I am intending to use has an I²C interface and a screen diagonal of .96". +sendHID is a tool to simulate typing using the Linux USB Gadget mode. + +Use a Raspberry Pi Zero (or A) to send keystrokes to a host computer. ## using the driver -The neccessary drivers are available only in the Raspbian 4.4 Kernel, which you can install using -``` -sudo BRANCH=next rpi-update -``` +There are two drivers available: the legacy `g_hid` driver, which has windows support, and the new `libcomposite`, which makes emulation of multiple devices at the same time very easy. Setup instructions on the latter are below. + +The neccessary drivers are available only in the Raspbian 4.4 Kernel, which you can install using `sudo BRANCH=next rpi-update`, if you haven't updated you Pi in a long time. + You also need to activate the device tree overlay `dwc2` and load the corresponding kernel module: ``` echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt @@ -52,14 +52,34 @@ ln -s functions/hid.$N configs/c.$C/ ls /sys/class/udc > UDC ``` -## modifying `pass` -The version of (pass)[https://passwordstore.org] doesn't format the output as nice, so it is easier to work with. Using the `pass-installer.sh` will automatically clone from the original repository, apply the patch and install it (make sure, `patch` and `sudo` is installed). - -You can then check out `hardpass-demo.sh` to see how to supply a passphrase directly from the command line (without gpg-agent). Keep in mind, that it will show up in your history file! - ## internals of this code whenever you need to add (or remove) a new keyboard layout, the following changes have to be made: +### adding a new key to existing layouts + +1. if the key is on the keyboard, just add a new line, and use the keycode ("Usage ID (Hex)") from the table 12 on page 53pp of the [_USB HID Usage Tables_](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) document. + +Following the keycode comes the modifier bit mask. `0x02` is Shift, `0x40` AltGraph. + +Now an example adding the letter A: + +``` +{"A", //character to translate + { //english layout + 0x04, //keycode + 0x02 //shift + }, { //german layout + 0x04, //keycode + 0x02 //shift + }, { //german-nodeadkeys + 0x04, //keycode + 0x02 //shift + } +} +``` + +2. if it isn't on the keyboard, fill keyocde and modifier bit mask with `0x00` for the layout and use the `.unicode=0xXXXX` (See point 3 in the 'adding a new layout' section below). + ### adding a new keyboard layout (example) 1. in `scancodes.h` add the layout to `keysym`-struct: this identifier does not need to be used outside of scancodes.{h,c}. diff --git a/hardpass-proto.pdf b/hardpass-proto.pdf deleted file mode 100644 index 42b37ef0a428b63c17743f36eec7c166ab683fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43180 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 diff --git a/main.c b/main.c index 68166e1..480f1ab 100644 --- a/main.c +++ b/main.c @@ -60,8 +60,10 @@ int main (int argc, char** argv) { fgets(in_string, TEXT_LEN, stdin); for (int i = 0; i < strlen (in_string); i++) { if (in_string[i] < 32) { - if (in_string[i] != '\n') fprintf (stderr, "Cannot print control characters!\n(Is there a newline at the end of your string?\n"); - return ERR_SYMBOL; + if (in_string[i] != '\n' && in_string[i] != '\t') { + fprintf (stderr, "Cannot print control characters!\n"); + return ERR_SYMBOL; + } } char tmp[UTF8_MAX_LENGTH] = {in_string[i], in_string[i+1], in_string[i+2], '\0'}; diff --git a/pass-installer.sh b/pass-installer.sh deleted file mode 100644 index b148365..0000000 --- a/pass-installer.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# (C) 2016 Tobias Girstmair, released under the GNU GPL - -git clone https://git.zx2c4.com/password-store -cd password-store/src -tee pass-patch.diff <<-EOF ---- password-store.sh.orig 2016-02-13 21:27:16.133642142 +0100 -+++ password-store.sh 2016-02-13 14:02:17.412565405 +0100 -@@ -324,7 +324,8 @@ - else - echo "\${path%\/}" - fi -- tree -C -l --noreport "\$PREFIX/\$path" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|\$)/\1\2/g' # remove .gpg at end of line, but keep colors -+ #tree -C -l --noreport "\$PREFIX/\$path" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|\$)/\1\2/g' # remove .gpg at end of line, but keep colors -+ tree -f -i -l --noreport "\$PREFIX/\$path" | tail -n +2 |grep "\.gpg"| sed 's/\.gpg\(\x1B\[[0-9]\+m\)\{0,1\}\( ->\|\$\)/\1\2/g' | sed "s|\$PREFIX/||g" - elif [[ -z \$path ]]; then - die "Error: password store is empty. Try \"pass init\"." - else -EOF -patch