Skip to content

Releases: kpagnussat/canvasbio-cb2000

CanvasBio CB2000 libfprint TOD driver v1.0.2

Choose a tag to compare

@github-actions github-actions released this 28 Sep 15:07

A maintenance release of the libfprint TOD module for the CanvasBio CB2000 (USB 2df0:0003). Nothing changes in how the reader captures or matches a good print, and fingers enrolled with 1.0.0 or 1.0.1 keep working. Install it over the previous release the same way.

On Ubuntu 26.04:

sudo apt install ./libfprint-2-tod1-canvasbio-cb2000_1.0.2_amd64.deb
sudo systemctl restart fprintd

What changed

  • A damaged print is reported as damaged. A stored print whose template cannot be read is now refused when it is loaded, so the driver reports it as unreadable and asks for the finger to be enrolled again. Before, it was treated as a template that matches nothing, and every touch failed with no hint that a retry could not help.
  • Hardened a distance read from the print file. One minutia distance was computed in 32 bits from a coordinate stored in the print, where a forged value could overflow. It is now computed in 64 bits, like the other distances; on a print this driver wrote the result is unchanged. A regression test covers it.
  • Tests run in every package build. The offline engine and capture tests used to need a developer option, so a package could be built without running any. They are now on by default and the .deb, both .rpm and the Arch build run them.
  • All four packages come from the same tarball. The .deb was built from the working tree; it is now built from the release tarball like the others.

Built by CI

This is the first release built by a GitHub Actions workflow instead of on my machine: the tag started .github/workflows/release.yml, which ran the same scripts as docs/DEVELOPMENT.md describes, with the tests, and attached the files below. Each file carries a build provenance attestation, so you can check that it came from that workflow and that commit:

gh attestation verify libfprint-2-tod1-canvasbio-cb2000_1.0.2_amd64.deb --repo kpagnussat/canvasbio-cb2000

The source tarball is reproducible: building it again from the tagged commit gives the same bytes, and the one the workflow built matches the one built locally.

What was tested

1.0.2 ran on the sensor through the device test (tests/device/run.sh): an enrollment of 15 touches, the enrolled finger accepted 5 times out of 5 and another finger refused 5 times out of 5. The openSUSE, Fedora and Arch packages of this release were not run on the sensor; they are built from the same packaging as the releases that were, and this change touches nothing that differs between distributions.

What is here

File For
libfprint-2-tod1-canvasbio-cb2000_1.0.2_amd64.deb Ubuntu 26.04.
libfprint-2-tod1-canvasbio-cb2000-1.0.2-1.opensuse.x86_64.rpm openSUSE Tumbleweed.
libfprint-2-tod1-canvasbio-cb2000-1.0.2-1.fc44.x86_64.rpm Fedora 44; needs a third-party COPR for TOD and an SELinux policy.
PKGBUILD Arch; builds from the tarball below.
canvasbio-cb2000-1.0.2.tar.gz The source every package above is built from.

The README has the install command for each distribution and what each one costs before you try it. Everything else about the driver, what it does and how far to trust it, is unchanged from v1.0.0.

Verifying what you downloaded

fd40e5ecbd440bd1f72f5dc2b6774aab5ca7a16e32da4c7fe32666a18bdb1402  canvasbio-cb2000-1.0.2.tar.gz
5e3f5e5626bc572ab41a4f281b1288f0df3d19ca24af9612607f167f097c4090  libfprint-2-tod1-canvasbio-cb2000_1.0.2_amd64.deb
c7b8bb2e5180ad2381eec519e6529c0f84bce51efa333fec8e2a47255e918e84  libfprint-2-tod1-canvasbio-cb2000-1.0.2-1.opensuse.x86_64.rpm
e87d67ce4881bc30198f4a63ca0c5d23ec4c9b2b5a9d7c00100af688572b9d7a  libfprint-2-tod1-canvasbio-cb2000-1.0.2-1.fc44.x86_64.rpm
61b553779d7d53752c4e5430066e99321a7a764987152349b6c3ee33427d751b  PKGBUILD

CanvasBio CB2000 libfprint TOD driver v1.0.1

Choose a tag to compare

@kpagnussat kpagnussat released this 23 Sep 23:17

A maintenance release of the libfprint TOD module for the CanvasBio CB2000 (USB 2df0:0003). It hardens how the driver keeps the sensor's replies; nothing changes on the wire, in any decision or in the print format, so fingers enrolled with 1.0.0 keep working. Install it over 1.0.0 the same way you installed 1.0.0.

On Ubuntu 26.04:

sudo apt install ./libfprint-2-tod1-canvasbio-cb2000_1.0.1_amd64.deb
sudo systemctl restart fprintd

What changed

The driver keeps a few replies from the sensor for its state machine: the coverage register after the detection and after each image, and the interrupt status. Until now it recognised them by the name of the command sequence and the position of the read in it. They are now filed by a tag on their entry in the command table.

The old way worked, but it could break without a sound. A missing coverage reply counts as covered, on purpose, so a truncated USB transfer never locks the reader. That same rule meant that renaming a sequence or adding a command to a table would have turned the coverage check off with no error: an empty touch would reach the matcher, which refuses it as a retry, and the reader would just feel worse. With the tag on the table entry, that mistake can no longer happen silently.

What was tested

1.0.1 ran on the sensor through the device test (tests/device/run.sh, see the README's Try it without installing): an enrollment of 15 touches, the enrolled finger accepted 5 times out of 5 and another finger refused 5 times out of 5. A second run with debug output showed every coverage reply read with its real zone count.

To be plain about it: the openSUSE, Fedora and Arch packages of this release were not run on the sensor. They are built from the same packaging as 1.0.0, and this change touches nothing that differs between distributions. If a package of this release misbehaves on your distribution where 1.0.0 did not, that is a bug worth reporting.

What is here

File For
libfprint-2-tod1-canvasbio-cb2000_1.0.1_amd64.deb Ubuntu 26.04.
libfprint-2-tod1-canvasbio-cb2000-1.0.1-1.opensuse.x86_64.rpm openSUSE Tumbleweed.
libfprint-2-tod1-canvasbio-cb2000-1.0.1-1.fc44.x86_64.rpm Fedora 44; needs a third-party COPR for TOD and an SELinux policy.
PKGBUILD Arch; builds from the tarball below.
canvasbio-cb2000-1.0.1.tar.gz The source every package above is built from.

The README has the install command for each distribution and what each one costs before you try it. Everything else about the driver, what it does and how far to trust it, is unchanged from v1.0.0.

Verifying what you downloaded

daf2ac80b9d0945491c2d5dfbc614b9ac6146e52a66049bed9a090c0fc4ade83  canvasbio-cb2000-1.0.1.tar.gz
06dd69bd369e0b2e24ae38399591829708b4589d0d5b880069f04cf96b203b11  libfprint-2-tod1-canvasbio-cb2000_1.0.1_amd64.deb
b614bc37bc0d1873b7fa2ad9399980c2cbe5bbb105e2ecd483f818b8f003835f  libfprint-2-tod1-canvasbio-cb2000-1.0.1-1.opensuse.x86_64.rpm
e99b229bb5d612cce4b5ab240633d5a594dbc415fe898ed59c1ead17460c330f  libfprint-2-tod1-canvasbio-cb2000-1.0.1-1.fc44.x86_64.rpm
96c8c165caae396645d52761a74489078c062c1af65553648f56a0580573f9c7  PKGBUILD

The tarball is reproducible: building it again from this commit gives the same bytes.

CanvasBio CB2000 libfprint TOD driver v1.0.0

Choose a tag to compare

@kpagnussat kpagnussat released this 23 Sep 18:36

This release provides a libfprint TOD module for the CanvasBio CB2000 fingerprint sensor (USB 2df0:0003), the reader in the power button of the Samsung Galaxy Book2 360 and Book3 360. Your distribution's libfprint stays in place and other fingerprint readers keep working.

On Ubuntu 26.04:

sudo apt install ./libfprint-2-tod1-canvasbio-cb2000_1.0.0_amd64.deb
sudo systemctl restart fprintd
fprintd-enroll

What is here

File For
libfprint-2-tod1-canvasbio-cb2000_1.0.0_amd64.deb Ubuntu 26.04. The package every accuracy figure was measured with.
libfprint-2-tod1-canvasbio-cb2000-1.0.0-1.opensuse.x86_64.rpm openSUSE Tumbleweed. Tested on the sensor from the live image.
libfprint-2-tod1-canvasbio-cb2000-1.0.0-1.fc44.x86_64.rpm Fedora 44. Tested on the sensor from the live image, SELinux enforcing; needs a third-party COPR for TOD and an SELinux policy.
PKGBUILD Arch. Tested on the sensor from the live ISO; builds from the tarball below.
canvasbio-cb2000-1.0.0.tar.gz The source every package above is built from.

All four packages are built from that one tarball, each against its own distribution's libfprint-tod headers. Each of the three non-Ubuntu packages was installed from this page, with the command the README gives, on the live image of its distribution, and enrolled, verified, refused a finger that was not enrolled and survived a cancel through fprintd. The README has the exact commands (zypper needs --allow-unsigned-rpm, dnf needs --allowerasing) and says what each one costs on its distribution before you try it.

What it does

An 80x64 frame yields too few minutiae for libfprint's own matcher, so the driver brings its own. Matching is handled by code written independently for this project, using documented behavior of the sensor's Windows driver as its compatibility target; the two were compared record by record (docs/RESEARCH.md, "Differential comparison").

The same question about capture was answered by measurement rather than assumption. Across three sessions the sensor was handed in turn to the vendor's Windows driver and to this one, with the host recording the USB traffic of both, so every frame either driver read could afterwards be replayed through the same engine. The two come out level: against the template built from Windows touches, the frames this driver read score 60 of 60 and the vendor driver's own score 58 of 60. docs/RESEARCH.md has the tables.

Enrollment fuses 15 counted touches into one template and asks you to move your finger when a touch adds too little new area. An unusable touch is a retry; only a usable touch that matches nothing is a no match. Plain C with GLib, no OpenCV and no third-party matcher. Fingerprint images are never written to disk unless a developer opts in.

2df0:0007 is deliberately not bound. It is a Realtek match-on-chip sensor with a different protocol (#3), tracked in the linux-fingerprint-drivers catalogue, and its support belongs in libfprint's own realtek driver.

Before you trust it

Measured on a private corpus of one person's fingers: the right finger accepted in 70.3% of decided attempts across sessions, and no accept between different fingers in 9489 attempts. Fusing the same enrollment touches in a different order does produce one such accept, and the vendor engine produces it too.

One person, one laptop, one sensor unit. The capture area is about 6 x 5 mm, and neither this driver nor the vendor's has any liveness or fake finger detection, because there is none in the hardware. Treat this sensor as a convenience unlock, not as strong authentication. The README's Known limitations says why, with the references.

Reports from another machine or another person's fingers are the single most useful thing this project can receive.

Coming from the R2.5 snapshot

That snapshot has been removed, and 1.0.0 is not an upgrade of it.

  • It is a different package. R2.5 shipped libfprint-2-2 version 1:1.94.10+canvasbio.202604201514, which replaced your distribution's libfprint with a build that had the driver compiled inside. apt will not treat 1.0.0 as an upgrade, and the old build does not load TOD modules at all. Restore your distribution's libfprint first; the README has the commands.
  • Enrolled fingers must be enrolled again. A print now holds the engine's template instead of captured frames, so an older print ends verify with a "data invalid" error. Run fprintd-delete, then enroll.
  • No polkit rule and no udev rule are installed any more.

Verifying what you downloaded

7ac7bd71572dbbb0552b269e8a442eaf6e7d61c7cfe70dd66f3b5ea25e312c30  canvasbio-cb2000-1.0.0.tar.gz
5c38502957c5e4a85a75bbc60e5d7027b5e273f1014f2d251e514947a680844e  libfprint-2-tod1-canvasbio-cb2000_1.0.0_amd64.deb
c85f2c9a9fa827d5cac5dea1115bd397bb264157f95e54710ac49fb7aa0bd797  libfprint-2-tod1-canvasbio-cb2000-1.0.0-1.opensuse.x86_64.rpm
ca30292f45830540a31f42c98f01969b2d1405e757450d4c077400747d7dced1  libfprint-2-tod1-canvasbio-cb2000-1.0.0-1.fc44.x86_64.rpm
a919f5e654aaf1fdd6531379eefc5f5b87a90262b4325cb4e1ec9ed259a26916  PKGBUILD

The tarball is reproducible: building it again from this commit gives the same bytes.