MCPcopy Index your code
hub / github.com/bulwarkid/virtual-fido

github.com/bulwarkid/virtual-fido @v0.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.0 ↗ · + Follow
1,282 symbols 2,974 edges 188 files 37 documented · 3%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Virtual FIDO

Also check out Bulwark Passkey, a passkey manager based on VirtualFIDO that is currently in beta!

Virtual FIDO is a virtual USB device that implements the FIDO2/U2F protocol (like a YubiKey) to support 2FA and WebAuthN. Please note that this software is still in beta and under active development, so APIs may be subject to change.

Features

  • Support for both Windows and Linux through USB/IP (Mac support coming later)
  • Connect using both U2F and FIDO2 protocols for both normal 2FA and WebAuthN
  • Store credentials in an encrypted format with a passphrase
  • Store credential data anywhere (example provided: a local file)
  • Generic approval mechanism for credential creation and login (example provided: terminal-based)

How it works

Virtual FIDO creates a USB/IP server over local TCP to attach a virtual USB device. This USB device then emulates the USB/CTAP protocols to provide U2F/FIDO services to the host computer. In the demo, credentials created by the virtual device are stored in a local file, and approvals are done using the terminal.

Demo Usage

Go to the YubiKey test page in order to test WebAuthN.

Windows

Run go run ./cmd/demo start to attach the USB device. Run go run ./cmd/demo --help to see more commands, such as to list or delete credentials from the file.

Linux

Note that this tool requires elevated permissions.

  1. Run sudo modprobe vhci-hcd to load the necessary drivers.
  2. Run sudo go run ./cmd/demo start to start up the USB device server. Authenticate when sudo prompts you; this is necessary to attach the device.

Extension points exported contracts — how you extend this code

USBDevice (Interface)
(no doc) [2 implementers]
usbip/usb_device.go
ClientRequestApprover (Interface)
(no doc) [1 implementers]
fido_client/fido_client.go
ClientDataSaver (Interface)
(no doc) [1 implementers]
fido_client/fido_client.go
FIDOClient (Interface)
(no doc) [1 implementers]
fido_client/fido_client.go

Core symbols most depended-on inside this repo

libdrv_snprintf
called by 33
cmd/demo/usbip/usbip-win/driver/lib/strutil.c
dbg_ntstatus
called by 32
cmd/demo/usbip/usbip-win/driver/lib/dbgcode.c
CheckErr
called by 30
util/util.go
dbg_vdev_type
called by 29
cmd/demo/usbip/usbip-win/driver/vhci/vhci_dbg.c
reply_stub_req_err
called by 21
cmd/demo/usbip/usbip-win/driver/stub/stub_res.c
ToBE
called by 20
util/util.go
irp_done
called by 15
cmd/demo/usbip/usbip-win/driver/vhci/vhci_irp.c
Write
called by 15
util/util.go

Shape

Function 816
Class 237
Method 141
Struct 59
TypeAlias 21
Enum 4
Interface 4

Languages

C70%
Go23%
C++7%

Modules by API surface

fido_client/fido_client.go49 symbols
cmd/demo/usbip/usbip-win/driver/vhci/vhci_read.c44 symbols
ctap/ctap.go37 symbols
cmd/demo/usbip/usbip-win/userspace/lib/usbip_forward.c37 symbols
cmd/demo/usbip/usbip-win/driver/vhci/vhci_write.c33 symbols
cmd/demo/usbip/usbip-win/userspace/src/usbip/usbip_install.c31 symbols
cmd/demo/usbip/usbip-win/userspace/lib/names.c31 symbols
cmd/demo/usbip/usbip-win/driver/stub/stub_usbd.c30 symbols
usbip/usb_device.go25 symbols
ctap_hid/ctap_hid.go25 symbols
util/util.go24 symbols
usbip/usbip.go24 symbols

For agents

$ claude mcp add virtual-fido \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page