Privacy policy
Which data is collected, and why that comes down to none.
Read moreA scanned code can be a wifi password, a ticket worth three hundred euros or the address of your house. So here is exactly what happens to that data.
The history is stored encrypted with AES-256-GCM in the app's private folder. The key sits in the operating system's secure storage. Tickets are in a second file whose key is only released after your fingerprint, face, PIN or pattern. There is no server, no account and no place outside your device where anything ends up.
In a file in the app's private folder, on your own device. Other apps cannot get at it. Nothing goes to a server, because there is no server.
That file is encrypted. If someone did get hold of it, with a cable or through a backup of the phone, what they would find in it is unreadable rubbish.
With AES-256-GCM. That is the standard that also protects your banking traffic, and it does not just seal things up: it also notices if the file has been tampered with.
Two things matter in that, and both are done properly:
Then the key is replaced as well. That is not an extra but the heart of the matter: a deleted file can sometimes still be recovered from flash memory. Without the old key, whatever may still be there is unreadable.
So nothing can be brought back after that, and the person who made the app cannot help with it either. The app warns you beforehand.
Tickets are in a second encrypted file. Its key is wrapped by a key in the Android Keystore, and that one can only be used straight after authentication with your fingerprint, face, PIN or pattern.
The bolt reaches the key, not the screen. That is the difference with an app that only puts a window in front of your data: there the data lies readable on the disk and the lock is no more than a curtain. Here there is nothing to read without authentication, not even for someone who manages to take the file off the device.
The key does not linger in memory afterwards. That is why the vault asks for your fingerprint again every time, and closes by itself as soon as the app goes to the background.
The vault needs Android 10 or newer and a screen lock on the device. If either of the two is missing, the app builds no vault and says so. Calling something a vault while the door stands open is pointless.
Because Android throws the vault key away as soon as a fingerprint or face scan is added. It is deliberately built that way: otherwise someone who knows your PIN could add a finger of their own and reach your tickets.
What was in there is unreadable from then on. Only a backup brings it back. The app warns about this before you start using the vault, and reports it afterwards with a pointer to the backup.
The backup is one file with the history and the tickets in it, encrypted with a password you choose yourself. That password is turned into a key with PBKDF2, so that guessing is slow and expensive.
Outside the app that file is protected by your password and no longer by your fingerprint. So choose one that means something to you. If you lose it, the file can no longer be opened, by anyone. That is exactly why the backup is worth something.
| Permission | What for |
|---|---|
| Camera | Reading codes. No photos are taken or stored. |
| Fingerprint | The lock on the ticket vault. Without this permission, Android refuses even the question whether a fingerprint is available. |
| In-app purchase | The one-off purchase of Pro, through the Play Store app on your device. No payment detail passes through Barcodehammer. |
| Internet | Not used by the app itself. The permission is in the file though; see below. |
Because Google's scanning library, ML Kit, puts that permission in its own part of the file. Barcodehammer does not ask for it and does not use it. That library can send usage data about itself to Google with it; what you scan or create is not in there.
This could easily have been kept quiet. It is stated here on purpose, because anyone who reads the permissions through after being promised "completely offline" feels short-changed. The full story is in the privacy policy.
A code appearing neatly on screen says nothing about what is in it. The encryption protects what you keep; it says nothing about whether a scanned web address can be trusted or whether a ticket is still good. The app reads what is there and does not judge. See chapter 4 of the terms of use.
Which data is collected, and why that comes down to none.
Read moreEverything the app does, from scanning to backup.
Read moreAnswers to what goes wrong in practice.
Read more