Added debian packaging

This commit is contained in:
Viktor Dragomiretskyy 2020-07-10 17:48:51 +12:00
parent 8d11c36361
commit 23498ba122
15 changed files with 92 additions and 31 deletions

11
.gitignore vendored
View file

@ -1,7 +1,16 @@
debian/tmp/
debian/python3-validity/
debian/python3-validity.substvars
debian/python3-validity.prerm.debhelper
debian/python3-validity.postinst.debhelper
debian/files
debian/.debhelper/
__pycache__
.pybuild/
build
dist
python3_validity.egg-info/
python_validity.egg-info/
tls.dict
*.bin
*.log

View file

@ -0,0 +1,4 @@
# TODO me
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="138a", ATTRS{idProduct}=="0097", TAG+="systemd", ENV{SYSTEMD_WANTS}+="python-validity@usb-$env{BUSNUM}-$env{DEVNUM}.service"

View file

@ -0,0 +1,12 @@
# TODO me
[Unit]
Description=python-validity driver dbus service for %I
[Service]
Type=simple
ExecStart=/usr/lib/python-validity/dbus-service %i
Restart=no
#[Install]
#WantedBy=multi-user.target

5
debian/changelog vendored Normal file
View file

@ -0,0 +1,5 @@
python-validity (0.1~ppa1) bionic; urgency=medium
* Initial release.
-- uunicorn <viktor.dragomiretskyy@gmail.com> Fri, 10 Jul 2020 17:21:35 +1200

1
debian/compat vendored Normal file
View file

@ -0,0 +1 @@
9

25
debian/control vendored Normal file
View file

@ -0,0 +1,25 @@
Source: python-validity
Section: misc
Priority: optional
Maintainer: uunicorn <viktor.dragomiretskyy@gmail.com>
Build-Depends: debhelper (>= 7.0.50~),
dh-python,
python3-all,
python3-setuptools
X-Python3-Version: >= 3.6
Standards-Version: 3.9.2
Package: python3-validity
Architecture: all
Depends: ${python3:Depends},
${misc:Depends},
python3-dbus,
python3-usb,
dbus,
open-fprintd (>= 0.2~)
XB-Python-Version: ${python3:Versions}
Description: Validity Fingerprint Sensor DBus Driver
This package adds support to some Validity sensors.
.
Warning: this is an experimental software. It lacks proper auth checks.
Install and use at your own risk.

9
debian/copyright vendored Normal file
View file

@ -0,0 +1,9 @@
Files: *
Copyright: Copyright © 2020, uunicorn <viktor.dragomiretskyy@gmail.com>
License: GPL-2+
License: GPL-2+
On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL-2'.

5
debian/install vendored Normal file
View file

@ -0,0 +1,5 @@
usr/bin
usr/lib/python*/*-packages/*.egg-info
usr/lib/python*/*-packages/validitysensor/*.py
usr/lib/python-validity
usr/share/python-validity

1
debian/pycompat vendored Normal file
View file

@ -0,0 +1 @@
2

10
debian/rules vendored Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/make -f
#export DH_VERBOSE = 1
%:
dh $@ --with python3 --buildsystem=pybuild
override_dh_auto_install:
python3 ./setup.py install --root=$(CURDIR)/debian/tmp --prefix=/usr --install-layout=deb

1
debian/source/format vendored Normal file
View file

@ -0,0 +1 @@
3.0 (native)

View file

@ -1,2 +0,0 @@
cryptography>=2.1.4
pyusb>=1.0.2

View file

@ -2,7 +2,7 @@
from setuptools import setup
setup(name='python3-validity',
setup(name='python-validity',
version='0.1',
py_modules = [],
packages=['validitysensor'],
@ -15,6 +15,7 @@ setup(name='python3-validity',
'pyusb >= 1.0.2'
],
data_files=[
('share/python-validity/playground/', ['factory-reset.py', 'pair.py', 'prototype.py']),
('lib/python-validity/', ['dbus_service/dbus-service']),
]
)

View file

@ -15,9 +15,8 @@ from .hw_tables import dev_info_lookup
from .blobs import reset_blob
from . import timeslot as prg
calib_data_path='calib-data.bin'
debug=False
# TODO: this should be specific to an individual device (system may have more than one sensor)
calib_data_path='/usr/share/python-validity/calib-data.bin'
line_update_type1_devices = [ 0xB5, 0x885, 0xB3, 0x143B, 0x1055, 0xE1, 0x8B1, 0xEA, 0xE4, 0xED, 0x1825, 0x1FF5, 0x199 ]
@ -67,12 +66,7 @@ def factory_reset():
class RomInfo():
def get():
if not debug:
rsp=tls.cmd(b'\x01')
else:
# 0097
rsp=unhexlify('0000f0b05e54a40000000607013000010000090a089141a80023000000000100000000000007');
rsp=tls.cmd(b'\x01')
assert_status(rsp)
rsp=rsp[2:]
return RomInfo(*unpack('<LLBBxBxxxB', rsp[0:0x10]))
@ -86,14 +80,7 @@ class RomInfo():
def identify_sensor():
if not debug:
rsp=tls.cmd(b'\x75')
else:
# 009a
#rsp=unhexlify('0000000000005a009001');
# 0097
rsp=unhexlify('0000000000000d007100');
rsp=tls.cmd(b'\x75')
assert_status(rsp)
rsp=rsp[2:]
@ -113,15 +100,7 @@ def identify_sensor():
# 6c010000 1400 0e00 0f00 0080 05550007 7701002805720000080100020811e107
# 88010000 0c00 0e00 1200 0080 07000000 7002 7800 7002 7800
def get_factory_bits(tag):
if not debug:
rsp=tls.cmd(pack('<B H HL', 0x6f, tag, 0, 0))
else:
# 6f 000e 00000000 response from the 009a logs:
#rsp=unhex('0000a80200000c0000000800000074000e0003000080070000007e7e7c767d7a737a807c7c7975847f85858184888786888a8a8a8c8d8b85878c8689878689898484837d8b8b8289898d8f8c90908f86858c8b8d90908b848f8694928a8e908d8e8d898d8d8c8e8f8d8c878986808a8a818686848187888c8e7e7e85888989857f8077777b7872767c7e8400000074000e0003000080070000007e7e7c767d7a737a807c7c7975847f85858184888786888a8a8a8c8d8b85878c8689878689898484837d8b8b8289898d8f8c90908f86858c8b8d90908b848f8694928a8e908d8e8d898d8d8c8e8f8d8c878986808a8a818686848187888c8e7e7e85888989857f8077777b7872767c7e0001000034020e000c00008007000000010205060504040708060403050709080705040401fffdfbfdfdfcfaf8f7f7f7f7f5f5f5f5f4f6f6f5f4f6fbff00fffcfaf9f7f7f5f6f6f9fcfdfefefefdfcfdfdfdfd000202020303020103050609090c0e100f0a0909080501ffff00020303020201ff0000fffefcfcfbfbfdff0000f0f4f5f5f7f9fbfaf5f3f3f6f5f6f7f7f6f6f7f8f9f9fbfafbfdfe00000101020306080a0a09080706040303030403050204050704fcf7f6f9fbfdff000306090a0909090b0d0e0e0e0d0c0d0e0c07070a0c090603020100fefbfafafcfcfdfcfcfbfaf9fafbff000201ff0003060403f1f3f2f3f4f3f0eff0f1f2f2f2f0f0f1f1eff0f2f6f8fcff04090c0d0c0f1013141617191c1d1e1c1a1b1c1e1c1c19141210100b07090f141614110f0f0d090401fffffdfefaf7f2f0edececebebeceff1f1efeef0f4f6f5f2eff1f4f5f6f6f5f5f5f5f5f4f5f7f6f4f2f4f4f7f9f9f9ebfafbfaf7f8f6f5f4f1f0f0f2f2f4f3f1eff0f4f7fbfd00030407070a0c1115151515171b1e1d1d1c1d2022201e1d1e20212324231e1a1c1d1b1b1a17120f0e0a080500fdfbfbf9f5f2f1f0f0f0f0efedeef0f1eeebeaeaeceff0efedebe9e9e9e9eae9e8ebeef1f2f4f3f3f2f3f7f9eff2f3f4f9fafcfbfbfaf7f6f6f8f9f8f7f7f9f9f8f7f6f5f6f6f9fafcfbfbfafafaf7f7f7f8f8fafafbfbff0000fdfbfafcfdfffefe0003050503010001050a101313110f0d09070400fefcfe000101fcf9f8f7f6f4f5f4f8fcff01020100fdf8f7f9fc000102fdfbfbfdff000407083c03000034020e000c00008007000000010205060504040708060403050709080705040401fffdfbfdfdfcfaf8f7f7f7f7f5f5f5f5f4f6f6f5f4f6fbff00fffcfaf9f7f7f5f6f6f9fcfdfefefefdfcfdfdfdfd000202020303020103050609090c0e100f0a0909080501ffff00020303020201ff0000fffefcfcfbfbfdff0000f0f4f5f5f7f9fbfaf5f3f3f6f5f6f7f7f6f6f7f8f9f9fbfafbfdfe00000101020306080a0a09080706040303030403050204050704fcf7f6f9fbfdff000306090a0909090b0d0e0e0e0d0c0d0e0c07070a0c090603020100fefbfafafcfcfdfcfcfbfaf9fafbff000201ff0003060403f1f3f2f3f4f3f0eff0f1f2f2f2f0f0f1f1eff0f2f6f8fcff04090c0d0c0f1013141617191c1d1e1c1a1b1c1e1c1c19141210100b07090f141614110f0f0d090401fffffdfefaf7f2f0edececebebeceff1f1efeef0f4f6f5f2eff1f4f5f6f6f5f5f5f5f5f4f5f7f6f4f2f4f4f7f9f9f9ebfafbfaf7f8f6f5f4f1f0f0f2f2f4f3f1eff0f4f7fbfd00030407070a0c1115151515171b1e1d1d1c1d2022201e1d1e20212324231e1a1c1d1b1b1a17120f0e0a080500fdfbfbf9f5f2f1f0f0f0f0efedeef0f1eeebeaeaeceff0efedebe9e9e9e9eae9e8ebeef1f2f4f3f3f2f3f7f9eff2f3f4f9fafcfbfbfaf7f6f6f8f9f8f7f7f9f9f8f7f6f5f6f6f9fafcfbfbfafafaf7f7f7f8f8fafafbfbff0000fdfbfafcfdfffefe0003050503010001050a101313110f0d09070400fefcfe000101fcf9f8f7f6f4f5f4f8fcff01020100fdf8f7f9fc000102fdfbfbfdff000407087805000014000e000f00008005550007890312000587000781010026040fe3079405000014000e000f00008005550007890312000587000781010026040fe307b005000008000e00080000809901000000000000c005000008000e00080000809901000000000000d005000008000e0002000000000000005a009001e005000008000e0002000000000000005a009001f005000004000e00050000803a690200fc05000004000e00050000803a690200')
# another example, which will require alignment adjustments
#rsp=unhex('0000080c0000070000000800000074000e0003000080070000007f7f7e787f7c747b827f7f7c768681888883868a8988898b8b8a8d8e8d86888c878a88868a8a8586847d8b8b8389898c8e8b8f908f86878d8b8d90908b868f8592918a8e908d8e8e8a8e8e8c8d8f8d8d888887828a8b818787848389898d8f7f80878a8a8a86818178797d7b74787e818400000008000e0002000000000000004a0090019400000008000e00080000809901000000000000a400000004000e0005000080337b0200b000000034020e000c00008007000000fd050809050202030404060809060200fefcfcff01010000ff00000301fdfbfdfdfd000101fcf9f9f9fcfe0001010000fcfcfafb00040d1215100b0703fffd000202fefcfefd0002080708080804030301030103010204070402fffdf8f8fbff0301020204050406070b090a0604fffeedf2f5f6f2f0f1f3f5f7fafcfffffefcfaf9f7f7f9fbfbfaf8f8f2f3f4fafcfdfdff00feff00fefbf8f8fc010506060706060403fdf8f7fa02050707060300fe0003070a090a0a0a0705050c0e100d080505070604020407080808060504070a0d0a09080b0b0a0a070400000200fffeeaf3f7f7f6f7f5f1eceaebeaeaeaeaeeeff1f3f4f3f3f4f8f9f9f6f9fe0204040706050508080a0809080b0c0f0f110d0f10151312120c0a040605090d0e0f0e1112100c0808070400fdfdff000200fcfbfe0202ff000407030100fefefcff0304060608090c0f0e100b080505080908ed02fffbf8f8f9f9fbfcfcf7f6f8fcfbf9f5f4f7f9f8f6f5f4f6fc03090c0b07030304080707080c0c0a0603020304050406050100ff0400fffbf9fbfd0000fdfaf8f9ff03000000080a09080702faf7f5f7f7f8f9f8fafafaf6f2f0f1f4f7f6f5f5f8f9fafb0000fff9f4f5f8fe0200f70000fefcfbfafc000204060708060603060807070607070302fefffe0305050305050600fcf8fcff0005080903030303030307070702fffe030807070508080a0c0f0d090707060601fdfbfafbfbfaf8f6f6f4f6f7fefefffdfefcfdfcfcfbfcfcfafaf9fd00000402030205070808ec02000014000e000f00008005550007770100310587000780010013000fe207080300000c000e0012000080070000003807540138075401')
rsp=unhex('0000880d0000070000000800000094000e0003000080070000007e7f807f808080808080808080808080808080808080818081808180818080808080818081808080818081808180818081808180818081808180808081808180808081807f80808180808081808180818080808180818081808180818081808080818081808180818081808180818081808180818081808180818081808080808080808080807f807f807f807f7f7e7ea400000008000e0002000000000000000d007100b400000008000e0008000080db00000000000000c400000004000e00050000801c6f0400d000000094000e0007000080070000002b23203c2d182e1e30182e1c321d341d341e321c301e1e241e201f201d1c321a301e1c211e21341f1e202024201f1e20201f212221221d221e23341e1d1e1d20341f1d193b341c1d1e35201e201c20221f341c1e1e1c221f201d21201e1c1f34242221201f20221f201e241e241d2020221e2420231d221e211e1f1e1e341c321e3220301d2d302f2d2c2b23223a211c6c01000014000e000f000080055500077701002805720000080100020811e107880100000c000e0012000080070000007002780070027800')
rsp=tls.cmd(pack('<B H HL', 0x6f, tag, 0, 0))
assert_status(rsp)
rsp=rsp[2:]

View file

@ -9,6 +9,7 @@ from .sensor import reboot, write_hw_reg32, read_hw_reg32, identify_sensor
from .flash import flush_changes, read_flash, erase_flash, write_flash_all, write_fw_signature, get_fw_info
from .util import assert_status
firmware_home='/usr/share/python-validity'
def default_fwext_name():
if usb.usb_dev().idVendor == 0x138a:
@ -32,7 +33,7 @@ def upload_fwext(fw_path=None):
# ^ TODO -- what is the real reason to detect HW at this stage?
# just a guess: perhaps it is used to construct fwext filename
default_name = default_fwext_name()
default_name = firmware_home + '/' + default_fwext_name()
if not fw_path:
fw_path = default_name
elif basename(fw_path) != default_name: