solokeys / solo1

Solo 1 firmware in C
https://solokeys.com/
Other
2.29k stars 273 forks source link

Windows - how to develop without hardware? #204

Open KrishnaPG opened 5 years ago

KrishnaPG commented 5 years ago

The ReadMe has a section describing a case of developing for this without the hardware. Unfortunately it is not clear how to achieve it. Any information in this regard would be of great help.

For example,

The instructions in the aforesaid section says, run make all. Unfortunately windows / Visual studio does not come with make. Not sure how to build this code with Visual Studio. The comment here indicates that others have already used VS to build this. Appreciate any pointers on how it was done.

In this regard, one suggestion / request is, to adapt CMake as the cross-platform build, if possible.

nickray commented 5 years ago

I think you can install make with chocolatey or scoop.

KrishnaPG commented 5 years ago

Thank you @nickray

Assuming that we use the chocolatey or similar and get the code built, would we then be able to:

The goal is to be able to create / store few keys and check how the whole webAuth flow works, and build /test apps that can use such flow.

0x0ece commented 5 years ago

@KrishnaPG not really.

The pc implementation of Solo listens to a UDP port for "usb" packages. The goal is to let you develop our firmware without the hardware, and when you run the tests under the hood we're using a custom python-fido2 library that sends messages over UDP instead of USB.

If you're writing python programs (e.g. a FIDO2 server), then yes, you can reuse this library and interact with the executable.

However if you want to just make a webapp, you'd need to change your browser or your OS, to create an extension or driver that fakes a usb interface and instead sends data via udp. This is currently not possible.

KrishnaPG commented 5 years ago

Thank you @0x0ece That makes things clear.

Then I am wondering, what is the procedure for creating apps that can take advantage of the Solo keys (without really having a key or two at hand)?

For example, I would really love to provide my customers the ability to use the Solo keys with our app. It is expected that the customers would have the Solo keys, but the developers (of the web/mobile app) do not have the keys at hand.

Is there some driver or simulator that can be used for this purpose? It would really really help the developers build the ecosystem around these keys.

alphathegeek commented 5 years ago

I find a raspberry pi zero works great. It's all of $5.00 and runs the solo application. There is already support for this in the solo codebase, since it can use /dev/hidg.

Failing that, it's up to the app developer to use usb over udp to emulate the key. You need a server running, preferably on a linux machine. the usb specific calls are already replaced with "udp_send" and "udp_recv".

stappersg commented 4 years ago

Here a happy Linux user.

I have been told that recent versions of Microsoft Windows have something that is called Windows Subsytem for Linux, or just wsl.

Visiting Microsoft.com got me redirected to a local branch of MSFT and did a search on Linux https://www.microsoft.com/nl-nl/search?q=Linux

Got several results, one being https://www.microsoft.com/nl-nl/p/debian/9msvkqc78pk6 it says

With this app you get Debian for the Windows Subsystem for Linux (WSL). You will be able to use a complete Debian command line environment containing a full current stable release environment. Please set up WSL first by following the guide at https://docs.microsoft.com/en-us/windows/wsl/install-win10 After the installation you can start the WSL console by either clicking the "Debian" tile in the start menu or by typing "debian" in powershell or cmd. The source code for this application can be found at the Debian repository: https://salsa.debian.org/rhaist-guest/WSL

I would like to know if wsl is a solution that this issue is about. Such as if make is available. Thing I do know is that default installs have no C-compiler installed. Neither is git installed. I think this is needed

make --version  # either version information or a "not found"
sudo apt update  # fetches package meta data
sudo apt install git build-essential  # fetches and installs programs

to get you started.

Please report your milage