TigerTag Python SDK

开源 SDK · TigerTag 协议 v2.2

TigerTag Python SDK

用 Python 读取、验证和写入 TigerTag NFC 芯片。

tigertag 软件包把 TigerTag 芯片的 144 字节解析为材料、颜色、温度和数量,验证其 ECDSA-P256 签名,并可创建新标签。参考数据随软件包一起提供,pip install 之后即可离线使用。

pip install tigertag
from tigertag import TigerTag

tag = TigerTag.from_pages(uid, payload)        # from your NFC SDK
print(tag.pretty())                            # human-readable summary
print(tag.verify())                            # VALID / NOT SIGNED / INVALID
print(tag.to_dict())                           # JSON-ready dict
README 中的快速入门:uid 和 payload 来自你的 NFC 读卡器。
1.4.0最新版本 ·
3.8+Python 3.8 及更高版本
0核心运行时依赖:仅标准库
144每颗芯片读取的字节:第 0x04 至 0x27 页,数据与签名

三步上手

tigertag 软件包发布在 PyPI 上。安装它,传入 NFC 读卡器返回的数据,然后验证签名。

  1. 1

    安装

    一条命令。核心只使用标准库,参考数据已内置:无需配置,首次运行也无需联网。

    pip install tigertag
  2. 2

    读取芯片

    传入 NFC SDK 返回的 7 字节 UID 和 144 字节 payload。pretty()、to_dict() 和 validate() 分别给出摘要、可转 JSON 的字典和警告。

    from tigertag import TigerTag
    tag = TigerTag.from_pages(uid, payload)
  3. 3

    验证签名

    verify 扩展会安装 cryptography 包,tag.verify() 即可使用 SDK 内置的公钥离线检查 ECDSA-P256 签名。

    pip install tigertag[verify]

可选扩展

sync 添加 requests(更新本身已可使用标准库),verify 添加用于签名验证的 cryptography,full 同时安装两者,nfc 为演示工具中的 PC/SC 读卡器添加 pyscard。

pip install tigertag                    # core only — stdlib, works fully offline (data bundled)
pip install tigertag[sync]              # + requests (optional — updates use the standard library)
pip install tigertag[verify]            # + cryptography (ECDSA signature check)
pip install tigertag[full]              # everything
pip install "tigertag[nfc]"             # + pyscard (playground: ACR122U / PC/SC readers)

签名与芯片结构

已签名的 TigerTag 带有 ECDSA-P256 签名,把芯片 UID 与产品数据绑定在一起。SDK 无需调用任何服务器即可验证。

tag.verify()

返回 SignatureResult:只有签名有效时 ok 才为 True,否则 status 说明原因(无签名、未安装 cryptography、无公钥、无 UID)。

result = tag.verify()    # fully autonomous — finds the public key from the bundled DB

result.ok       # True only for VALID
result.status   # "valid" | "invalid" | "unsigned" | "no_crypto" | "no_key" | "no_uid"
str(result)     # "VALID" | "INVALID" | "NOT SIGNED" | "NO CRYPTO — …" | "NO PUBLIC KEY — …" | "NO UID — …"
result.to_dict()# {"status": "valid", "ok": True, "detail": "…"}
README 中的更多内容

SDK 读取的内容

from_pages() 接受 144 字节(第 0x04 至 0x27 页,数据与签名)或 80 字节(仅数据)。from_dump() 还接受 180 字节的完整转储,并从中提取 UID。

TigerTag NTAG 芯片的内存结构,第 0x04 至 0x27 页,逐字段说明 TigerTag 规范

SDK 的功能

README 中记录的全部功能,集中在一个可离线运行的软件包里。

离线优先

参考数据表和 TigerTag+ 产品目录(约 1 MB)随软件包提供。设置 offline=True 或 TIGERTAG_OFFLINE=1 即可关闭所有网络访问。

签名验证

ECDSA-P256,完全离线,使用内置 id_version.json 中的公钥。安装 tigertag[verify] 以添加 cryptography 包。

创建、修改、擦除

TigerTag.create() 从零构建标签,patch() 返回修改了字段的新标签,erase() 返回用于擦除芯片的 80 个零字节。修改 UID 或签名会引发 ValueError。

TigerTag+ 产品目录

TigerTag.from_catalog() 根据官方目录,把 TigerTag+ 产品 ID 转换为可直接写入的完整标签。catalog_entry() 提供其名称、品牌、SKU 和图片。

参考数据更新

进程中的第一个 TigerTagDB 每天最多检查一次新数据,且从不抛出异常:出现任何问题时使用本地数据。tigertag update 可立即检查。

兼容各类 NFC SDK

from_pages(uid, payload) 直接接受 Android、iOS、Flutter 和 nfcpy 返回的数据。README 中有使用 nfcpy 和 ACR122U 读卡器的完整示例。

命令行与单文件

tigertag 命令可解析芯片转储,以文本、JSON 或原始字段输出,并更新参考数据。

tigertag dump.bin              # parse + human-readable output
tigertag dump.bin --json       # output as JSON
tigertag dump.bin --raw        # raw protocol fields, no DB lookup
tigertag update [--force]      # check for new reference data now (--catalog, --data-dir)
tigertag dump.bin --offline    # no network access at all
tigertag --version             # show SDK version

python -m tigertag dump.bin    # same, via module runner
README 中的更多内容

单个文件,无需安装包

parse_tigertag.py 是 SDK 的完整独立副本,适用于无法添加依赖的项目:放入文件,从中导入 TigerTag 即可。

parse_tigertag.py

演示工具

一个本地网页,使用本 SDK 创建、解析和验证标签,无需硬件。连接 ACS ACR122U 或其他 PC/SC 读卡器后,还能读写真实芯片。

python3 tools/server.py 7432
README 中的更多内容

常见问题

什么是 TigerTag Python SDK?

一个 Python 软件包(PyPI 上的 tigertag),用于读取、验证、创建和修改 3D 打印耗材与树脂上的 TigerTag NFC 芯片。它基于 Apache License 2.0 开源,实现 TigerTag 协议 v2.2。

如何安装?

在 Python 3.8 或更高版本上运行 pip install tigertag。添加 tigertag[verify] 以验证签名,tigertag[full] 安装全部可选依赖,tigertag[nfc] 用于演示工具中的 PC/SC 读卡器。

需要联网吗?

不需要。参考数据随软件包提供,读取和验证都可离线完成。自 1.3.0 版起,SDK 每天最多检查一次新的参考数据;设置 offline=True、TIGERTAG_OFFLINE=1 或 auto_update=False 即可关闭。

支持哪些芯片?

NTAG213、NTAG215、NTAG216 以及兼容 ISO 14443-3 的芯片,涵盖三种标签类型:TigerTag(Maker)、TigerTag Init 和 TigerTag+。SDK 以相同方式读取这三种类型。

如何验证芯片是正品?

tag.verify() 使用软件包内置的公钥检查芯片的 ECDSA-P256 签名(该签名把芯片 UID 与产品数据绑定),无需调用服务器。验证需要 UID,因此请用 from_pages(uid, payload) 读取芯片。

可以不安装软件包使用吗?

可以。仓库根目录下的 parse_tigertag.py 是完整的独立副本:把该文件复制到你的项目中,从中导入 TigerTag 即可。

有命令行工具吗?

有。tigertag dump.bin 输出可读摘要,--json 输出 JSON,--raw 输出原始协议字段;tigertag update 更新参考数据,python -m tigertag 的用法相同。

用 Python 读取你的第一个 TigerTag

pip install tigertag,然后调用 TigerTag.from_pages(uid, payload)。

PyPI 上的 tigertag