{"id":67,"date":"2005-11-12T12:43:17","date_gmt":"2005-11-12T12:43:17","guid":{"rendered":"http:\/\/www.reactivated.net\/weblog\/?p=67"},"modified":"2007-11-29T23:03:03","modified_gmt":"2007-11-29T23:03:03","slug":"digital-persona-uareu-fingerprint-driver-linux","status":"publish","type":"post","link":"http:\/\/www.reactivated.net\/weblog\/archives\/2005\/11\/digital-persona-uareu-fingerprint-driver-linux\/","title":{"rendered":"Digital Persona UareU Fingerprint Sensor driver for Linux"},"content":{"rendered":"<p>I recently <a href=\"http:\/\/www.reactivated.net\/weblog\/archives\/2005\/09\/various-stuffs\/\">mentioned<\/a> my new project, writing a Linux driver for the &#8220;Microsoft Optical Desktop with Fingerprint Reader&#8221; keyboard. The keyboard works fine already (its just HID), but the fingerprint reader sensor requires its own driver, which I&#8217;m aiming to create.<\/p>\n<p>Thanks to Tony Vroon from Gentoo for donating this device to me, and to the people who sent emails\/comments after the last mention of this. Through this information and some extra googling, I now know:<\/p>\n<ul>\n<li>The fingerprint sensor is almost certainly designed\/manufactured by <a href=\"http:\/\/www.digitalpersona.com\">Digital Persona<\/a>, a biometrics company recently assimilated by Microsoft.<\/li>\n<li>The fingerprint sensor is probably a <a href=\"http:\/\/www.digitalpersona.com\/products\/uauReader.php\">Digital Persona UareU 4000<\/a><\/li>\n<li>If this is true, the fingerprint image <strong>is<\/strong> encrypted&#8230;<\/li>\n<li>&#8230;but a developer familiar with the UareU Windows API suggests that the encryption key is defined by the host computer at installation time.<\/li>\n<li>&#8230;and <a href=\"http:\/\/linuxbiometrics.com\/modules\/newbb\/viewtopic.php?topic_id=99&#038;forum=1\">this forum post<\/a> suggests that the Microsoft keyboard lacks some features of the UareU 4000.<\/li>\n<li>The encryption algorithm might be <a href=\"http:\/\/en.wikipedia.org\/wiki\/XTEA\">XTEA<\/a> (<a href=\"http:\/\/blogs.msdn.com\/mswanson\/archive\/2004\/12\/03\/274170.aspx#345087\">source<\/a>)<\/li>\n<li>VALinux Japan have done some biometrics work, including fingerprint-based login using UareU devices. A presentation (<a href=\"http:\/\/www.google.com\/search?q=cache:mJPtJ6-S8q0J:www.valinux.co.jp\/docs\/pdf\/biometrics.pdf+uareu+linux&#038;hl=en&#038;client=firefox\">html<\/a>, <a href=\"http:\/\/www.valinux.co.jp\/docs\/pdf\/biometrics.pdf\">pdf<\/a>) suggests that they have produced\/obtained a uareu kernel module which has a \/dev\/usb\/uareu char interface. I wonder if they can help me out.<\/li>\n<li>The device is firmware-based, or at least, the driver sends a 1904 byte blob of data found inside one of the windows DLL files on every plugin.<\/li>\n<li><a href=\"http:\/\/llfs.exteen.com\/20041106\/over-view-my-project\">This guy<\/a> also seems to have run into the uareu module. Can anyone help me find his email address?<\/li>\n<\/ul>\n<p>I&#8217;m naming my driver <em>dpfp<\/em> and the initial work can be found <a href=\"http:\/\/dev.gentoo.org\/~dsd\/dpfp\/\">here<\/a>. So far I have created a script to extract the firmware from the windows driver distribution, and a skeleton driver which pulses the light around the sensor 3 times on plugin (looks very cool!). I&#8217;m a bit stuck on the next step, the sniffed data suggests the Windows driver is doing things which are impossible (sending data in the wrong direction). I&#8217;ve been experimenting trying to guess what it might be doing, but I haven&#8217;t been able to provoke the expected response yet (which is the device sending a section of the firmware back to the host computer &#8212; again strange&#8230;).<\/p>\n<p>If any other Linux users are in possession of one of these keyboards or a standalone UareU reader, then please <a href=\"mailto:dsd@gentoo.org\">email me<\/a>. I will send in an article to linuxbiometrics.com soon.<\/p>\n<p><b>Update November 2007:<\/b> I see I&#8217;m still getting a lot of hits from &#8220;digitalpersona linux&#8221; on Google (I&#8217;m still #1). I&#8217;ve recently launched a new project called <a href=\"http:\/\/www.reactivated.net\/fprint\/\">fprint<\/a> which supports DigitalPersona devices under Linux. <a href=\"http:\/\/www.reactivated.net\/fprint\/\">Click to go to the project homepage.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently mentioned my new project, writing a Linux driver for the &#8220;Microsoft Optical Desktop with Fingerprint Reader&#8221; keyboard. The keyboard works fine already (its just HID), but the fingerprint reader sensor requires its own driver, which I&#8217;m aiming to create. Thanks to Tony Vroon from Gentoo for donating this device to me, and to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-67","post","type-post","status-publish","format-standard","hentry","category-gentoo"],"_links":{"self":[{"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/posts\/67","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/comments?post=67"}],"version-history":[{"count":0,"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/posts\/67\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/media?parent=67"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/categories?post=67"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.reactivated.net\/weblog\/wp-json\/wp\/v2\/tags?post=67"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}