diff --git a/README.md b/README.md index d06777f..3e8a6e9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,41 @@ To install Python dependencies run $ pip3 install -r requirements.txt ``` -## Getting the firmware +## Initialization + +### Automatic factory reset, pairing and firmware flashing + +This repo includes `validity-sensors-initializer.py`, a simple tool that +helps initializing Validity fingerprint readers under linux, loading their +binary firmware and initializing them. + +This tool currently only supports these sensors: +- 138a:0090 Validity Sensors, Inc. VFS7500 Touch Fingerprint Sensor +- 138a:0097 Validity Sensors, Inc. +Which are present in various ThinkPad and HP laptops. + +These devices communicate with the laptop via an encrypted protocol and they +need to be paired with the host computer in order to work and compute the +TLS keys. +Such initialization is normally done by the Windows driver, however thanks to +the amazing efforts of Viktor Dragomiretskyy (uunicorn), and previously of +Nikita Mikhailov, we have reverse-engineerd the pairing process, and so it's +possible to do it under Linux with only native tools as well. + +The procedure is quite simple: +- Device is factory-reset and its flash repartitioned +- A TLS key is negotiated, generated via host hw ID and serial +- Windows driver is downloaded from Lenovo to extract the device firmware +- The device firmware is uploaded to the device +- The device is calibrated + +Once the chip is paired with the computer via this tool, it's possible to use +it in libfprint using the driver at +- https://github.com/3v1n0/libfprint/ + +--- + +### Getting the firmware It's possible to just extract [official Lenovo device driver for vfs0097](https://support.lenovo.com/us/en/downloads/DS121407) or [driver for vfs0090](https://support.lenovo.com/us/en/downloads/DS120491) (also [part of the SCCM package](https://support.lenovo.com/ec/th/downloads/DS112113) using [innoextract](https://constexpr.org/innoextract/) (available for all the distros), or `wine`. @@ -18,7 +52,7 @@ The only reason you need to do this is to find `6_07f_lenovo_mis.xpfwext` (for v innoextract n1mgf03w.exe -e -I 6_07f_lenovo_mis.xpfwext # vfs0097 innoextract n1cgn08w.exe -e -I 6_07f_Lenovo.xpfwext # vfs0090 -## Factory reset +### Factory reset If your device was previously paired with another OS or computer, you need to do a factory reset. This will erase all fingers from the internal database and make the device ready for pairing. ``` @@ -26,7 +60,7 @@ $ python3 factory-reset.py $ ``` -## Pairing +### Pairing After performing a factory reset you need to pair your device with a host computer. This must be done only once, before you can enroll/identify/verify fingers. ```