Merge pull request #10 from pjz/automate

Automate build a bit more
This commit is contained in:
Conor Patrick 2018-10-17 18:20:08 -04:00 committed by GitHub
commit c71c59bbac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 68 additions and 37 deletions

1
.gitignore vendored
View File

@ -74,3 +74,4 @@ tools/python-fido2/*
*.key *.key
site/ site/
_site/ _site/
venv/

View File

@ -15,20 +15,32 @@ EFM32_DEBUGGER= -s 440083537 --device EFM32JG1B200F128GM32
src = $(wildcard pc/*.c) $(wildcard fido2/*.c) $(wildcard crypto/sha256/*.c) crypto/tiny-AES-c/aes.c src = $(wildcard pc/*.c) $(wildcard fido2/*.c) $(wildcard crypto/sha256/*.c) crypto/tiny-AES-c/aes.c
obj = $(src:.c=.o) uECC.o obj = $(src:.c=.o) uECC.o
LDFLAGS = -Wl,--gc-sections ./tinycbor/lib/libtinycbor.a LIBCBOR = tinycbor/lib/libtinycbor.a
LDFLAGS = -Wl,--gc-sections $(LIBCBOR)
CFLAGS = -O2 -fdata-sections -ffunction-sections CFLAGS = -O2 -fdata-sections -ffunction-sections
INCLUDES = -I./tinycbor/src -I./crypto/sha256 -I./crypto/micro-ecc/ -Icrypto/tiny-AES-c/ -I./fido2/ -I./pc -I./fido2/extensions INCLUDES = -I./tinycbor/src -I./crypto/sha256 -I./crypto/micro-ecc/ -Icrypto/tiny-AES-c/ -I./fido2/ -I./pc -I./fido2/extensions
CFLAGS += $(INCLUDES) CFLAGS += $(INCLUDES)
# for crypto/tiny-AES-c
CFLAGS += -DAES256=1
name = main name = main
all: main .PHONY: all
all: python-fido2 main
cbor:
tinycbor/Makefile crypto/tiny-AES-c/aes.c:
git submodule update --init
.PHONY: cbor
cbor: $(LIBCBOR)
$(LIBCBOR): tinycbor/Makefile
cd tinycbor/ && $(MAKE) clean && $(MAKE) -j8 cd tinycbor/ && $(MAKE) clean && $(MAKE) -j8
.PHONY: test
test: testgcm test: testgcm
efm8prog: efm8prog:
@ -51,16 +63,54 @@ efm32bootprog:
cd './targets/efm32boot/GNU ARM v7.2.1 - Debug' && $(MAKE) all cd './targets/efm32boot/GNU ARM v7.2.1 - Debug' && $(MAKE) all
commander flash './efm32boot/GNU ARM v7.2.1 - Debug/efm32boot.hex' $(EFM32_DEBUGGER) --masserase commander flash './efm32boot/GNU ARM v7.2.1 - Debug/efm32boot.hex' $(EFM32_DEBUGGER) --masserase
$(name): $(obj) $(name): $(obj) $(LIBCBOR)
$(CC) $(LDFLAGS) -o $@ $(obj) $(LDFLAGS) $(CC) $(LDFLAGS) -o $@ $(obj) $(LDFLAGS)
testgcm: $(obj) crypto/aes-gcm/aes_gcm.o:
$(CC) -c main.c $(CFLAGS) -DTEST -o main.o $(CC) -c crypto/aes-gcm/aes_gcm.c $(CFLAGS) -DTEST -o crypto/aes-gcm/aes_gcm.o
$(CC) -c crypto/aes_gcm.c $(CFLAGS) -DTEST -o crypto/aes_gcm.o
testgcm: $(obj) $(LIBCBOR) crypto/aes-gcm/aes_gcm.o
$(CC) -c fido2/main.c $(CFLAGS) -DTEST -o fido2/main.o
$(CC) $(LDFLAGS) -o $@ $^ $(LDFLAGS) $(CC) $(LDFLAGS) -o $@ $^ $(LDFLAGS)
uECC.o: ./crypto/micro-ecc/uECC.c uECC.o: ./crypto/micro-ecc/uECC.c
$(CC) -c -o $@ $^ -O2 -fdata-sections -ffunction-sections -DuECC_PLATFORM=$(platform) -I./crypto/micro-ecc/ $(CC) -c -o $@ $^ -O2 -fdata-sections -ffunction-sections -DuECC_PLATFORM=$(platform) -I./crypto/micro-ecc/
# python virtualenv
venv:
@if ! which virtualenv >/dev/null ; then \
echo "ERR: Sorry, no python virtualenv found. Please consider installing " ;\
echo " it via something like:" ;\
echo " sudo apt install python-virtualenv" ;\
echo " or maybe:" ;\
echo " pip install virtualenv" ;\
fi
virtualenv venv
./venv/bin/pip install wheel
.PHONY: python-fido2
python-fido2: venv
cd python-fido2/ && ../venv/bin/python setup.py install
venv/bin/mkdocs: venv
./venv/bin/pip install mkdocs mkdocs-material
.PHONY: docsrv
docsrv: venv/bin/mkdocs
./venv/bin/mkdocs serve
.PHONY: fido2-test
fido2-test:
./venv/bin/python tools/ctap_test.py
clean: clean:
rm -f *.o main.exe main $(obj) rm -f *.o main.exe main testgcm $(obj)
for f in crypto/tiny-AES-c/Makefile tinycbor/Makefile ; do \
if [ -f "$$f" ]; then \
(cd `dirname $$f` ; git checkout -- .) ;\
fi ;\
done
rm -rf venv

View File

@ -39,39 +39,22 @@ bulk order and provide open source security tokens for everyone that is interest
# Setting up # Setting up
Clone and Compile CBOR library and FIDO 2 client library. Clone solo and build it
```bash ```bash
git clone https://github.com/SoloKeysSec/solo git clone https://github.com/SoloKeysSec/solo
cd solo/ cd solo/
git submodule update --init make all
cd tinycbor && make
cd ..
cd python-fido2/
python setup.py install
``` ```
This builds our FIDO 2.0 and the U2F authenticator, as well as making a virtualenv in venv/
that has our python-fido2 fork installed.
Note that our python-fido2 fork will only connect to the software FIDO2 application, Note that our python-fido2 fork will only connect to the software FIDO2 application,
not a hardware authenticator. Install Yubico's fork to do that. not a hardware authenticator. Install Yubico's fork to do that.
Open `crypto/tiny-AES-c/aes.h` in a text editor and make sure AES256 is selected as follows.
```
//#define AES128 1
//#define AES192 1
#define AES256 1
```
Now compile FIDO 2.0 and U2F authenticator.
```bash
make
```
# Testing and development # Testing and development
The application is set up to send and recv USB HID messages over UDP to ease The application is set up to send and recv USB HID messages over UDP to ease
@ -90,13 +73,13 @@ Run FIDO 2 / U2F application.
Run example client software. This runs through a registration and authentication. Run example client software. This runs through a registration and authentication.
``` ```
python python-fido2/examples/credential.py ./venv/bin/python python-fido2/examples/credential.py
``` ```
Run the FIDO2 tests. Run the FIDO2 tests.
``` ```
python tools/ctap_test.py make fido2-test
``` ```
Follow specifications to really dig in. Follow specifications to really dig in.
@ -142,8 +125,7 @@ for each interface.
Look at the issues to see what is currently being worked on. Feel free to add issues as well. Look at the issues to see what is currently being worked on. Feel free to add issues as well.
This is an upgrade to [U2F This is an upgrade to [U2F Zero](https://github.com/conorpp/u2f-zero).
Zero](https://github.com/conorpp/u2f-zero).
# License # License

View File

@ -2,8 +2,6 @@ Documentation of the `master` branch is deployed to Netlify automatically.
To host or develop locally: To host or develop locally:
- install python3 and pip - `make docsrv` and visit [localhost:8000](http://localhost:8000).
- `pip install mkdocs mkdocs-material`
- `mkdocs serve` and visit [localhost:8000](http://localhost:8000).
The file `runtime.txt` is necessary to tell Netlify to use Python3. The file `runtime.txt` is necessary to tell Netlify to use Python3.