https://github.com/argosylabs/gubbins
Gubbins product serial number generator & validator
https://github.com/argosylabs/gubbins
cryptography serial-numbers
Last synced: about 1 year ago
JSON representation
Gubbins product serial number generator & validator
- Host: GitHub
- URL: https://github.com/argosylabs/gubbins
- Owner: ArgosyLabs
- License: mit
- Created: 2019-10-02T16:49:58.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-06-01T23:08:31.000Z (about 6 years ago)
- Last Synced: 2025-05-31T16:35:45.716Z (about 1 year ago)
- Topics: cryptography, serial-numbers
- Language: Python
- Homepage:
- Size: 14.6 KB
- Stars: 3
- Watchers: 1
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gubbins
Product serial number generator/validator
======
A simple but powerful product serial number generator and validator written
in Python. Given a Prefix and a 32-bit ID, produces a Serial. Given a
valid Serial, returns the Prefix and 32-bit ID. Optionally takes Additional
Data.
```python
from gubbins import Gubbins
for i in range(10):
serial = Gubbins.generate("AX", i)
prefix, id = Gubbins.validate(serial)
assert prefix.lower() == "AX".lower()
assert id == i
print(i, serial)
```
or via the command-line,
```bash
gubbins 1-10 --solo --prefix AX | ungubbins
```
Gubbins has several interesting features. A Gubbins Serial
* is human-friendly,
* ignores case,
* fixes up typos,
* can be reversed,
* contains a checksum,
* avoids collisions, &
* attempts to prevent enumeration.
Modifying any of Prefix, ID, or Additional Data results in a different
Serial.
Gubbins uses a lightly modified
[z-base-32](https://philzimmermann.com/docs/human-oriented-base-32-encoding.txt)
alphabet, with the letters `AJNRTUV` canonically upper-case and all other
letters lower-case. The validator will automatically fix up typos related
to `oO0`, `iIlL1`, & `zZ2`.
For best results,
* a Prefix can not contain the characters `-oOiIlLzZ`,
* IDs should not be sequential, &
* Additional Data may depend on the Prefix but must not be derived from it.
Note: we make no security claims about Gubbins. YMMV
Requires
* [more_itertools](https://github.com/erikrose/more-itertools),
* [anybase32](https://github.com/alanblevins/anybase32), &
* [pynumparser](https://gitlab.com/n2vram/pynumparser).
License: [MIT](https://opensource.org/licenses/MIT)