TigerTag Python SDK

SDK de código aberto · protocolo TigerTag v2.2

TigerTag Python SDK

Leia, verifique e escreva chips NFC TigerTag em Python.

O pacote tigertag converte os 144 bytes de um chip TigerTag em material, cores, temperaturas e quantidade, verifica a respetiva assinatura ECDSA-P256 e cria novas etiquetas. Os dados de referência vêm dentro do pacote, por isso funciona sem rede logo após o 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
O início rápido, tal como consta do README: uid e payload vêm do seu leitor NFC.
1.4.0Versão mais recente ·
3.8+Python 3.8 e posteriores
0Dependências do núcleo em execução: apenas a biblioteca padrão
144Bytes lidos por chip: páginas 0x04 a 0x27, dados e assinatura

Comece em três passos

O pacote tigertag está no PyPI. Instale-o, entregue-lhe o que o seu leitor NFC devolve e verifique a assinatura.

  1. 1

    Instalar

    Um só comando. O núcleo usa apenas a biblioteca padrão e os dados de referência estão incluídos: sem configuração e sem rede na primeira execução.

    pip install tigertag
  2. 2

    Ler um chip

    Passe o UID de 7 bytes e o payload de 144 bytes devolvidos pelo seu SDK NFC. pretty(), to_dict() e validate() dão um resumo, um dict pronto para JSON e avisos.

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

    Verificar a assinatura

    O extra verify acrescenta o pacote cryptography, para que tag.verify() verifique a assinatura ECDSA-P256 sem rede com a chave pública incluída no SDK.

    pip install tigertag[verify]

Extras opcionais

sync acrescenta requests (as atualizações já funcionam com a biblioteca padrão), verify acrescenta cryptography para assinaturas, full instala ambos e nfc acrescenta pyscard para leitores PC/SC no playground.

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)

Assinaturas e organização do chip

Uma TigerTag assinada contém uma assinatura ECDSA-P256 que associa o UID do chip aos dados do produto. O SDK verifica-a sem contactar qualquer servidor.

tag.verify()

Devolve um SignatureResult: ok é True apenas para uma assinatura válida e, caso contrário, status indica o motivo (sem assinatura, cryptography em falta, sem chave pública, sem 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": "…"}
Mais informação no README

O que o SDK lê

from_pages() aceita 144 bytes (páginas 0x04 a 0x27, dados e assinatura) ou 80 bytes (apenas dados). from_dump() aceita também um dump completo de 180 bytes e extrai dele o UID.

Organização da memória de um chip NTAG TigerTag, páginas 0x04 a 0x27, campo a campo A especificação TigerTag

O que o SDK faz

Tudo o que o README documenta, num único pacote que funciona sem rede.

Sem rede, à partida

As tabelas de referência e o catálogo TigerTag+ (cerca de 1 MB) vêm dentro do pacote. offline=True ou TIGERTAG_OFFLINE=1 desliga todo o acesso à rede.

Verificação de assinatura

ECDSA-P256, totalmente sem rede, com a chave pública do ficheiro id_version.json incluído. Instale tigertag[verify] para acrescentar o pacote cryptography.

Criar, alterar, apagar

TigerTag.create() cria uma etiqueta de raiz, patch() devolve uma nova etiqueta com campos alterados, erase() devolve os 80 bytes a zero que apagam um chip. Alterar o UID ou a assinatura lança ValueError.

Catálogo TigerTag+

TigerTag.from_catalog() converte um ID de produto TigerTag+ numa etiqueta completa pronta a escrever, a partir do catálogo oficial. catalog_entry() fornece título, marca, SKU e fotografia.

Atualização dos dados

O primeiro TigerTagDB de um processo procura dados novos no máximo uma vez por dia e nunca lança erros: perante qualquer falha, usa os dados locais. tigertag update verifica de imediato.

Qualquer SDK NFC

from_pages(uid, payload) aceita o que Android, iOS, Flutter e nfcpy devolvem. O README inclui um exemplo completo para um leitor ACR122U com nfcpy.

Linha de comandos e ficheiro único

O comando tigertag lê o dump de um chip, apresenta-o em texto, JSON ou campos em bruto e atualiza os dados de referência.

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
Mais informação no README

Um ficheiro, sem pacote

parse_tigertag.py é uma cópia completa e autónoma do SDK para projetos que não podem acrescentar dependências: coloque o ficheiro no projeto e importe TigerTag a partir dele.

parse_tigertag.py

Playground

Uma página web local que cria, lê e verifica etiquetas com este SDK, sem hardware. Com um ACS ACR122U ou outro leitor PC/SC, também lê e escreve chips reais.

python3 tools/server.py 7432
Mais informação no README

Perguntas

O que é o SDK Python TigerTag?

Um pacote Python, tigertag no PyPI, que lê, verifica, cria e altera chips NFC TigerTag de filamentos e resinas para impressão 3D. É de código aberto, sob a licença Apache 2.0, e implementa o protocolo TigerTag v2.2.

Como se instala?

Execute pip install tigertag com Python 3.8 ou posterior. Acrescente tigertag[verify] para assinaturas, tigertag[full] para todas as dependências opcionais ou tigertag[nfc] para os leitores PC/SC do playground.

É preciso ligação à internet?

Não. Os dados de referência vêm no pacote, pelo que a leitura e a verificação funcionam sem rede. Desde a versão 1.3.0, o SDK procura dados novos no máximo uma vez por dia; offline=True, TIGERTAG_OFFLINE=1 ou auto_update=False desativa-o.

Que chips lê?

NTAG213, NTAG215, NTAG216 e chips compatíveis com ISO 14443-3, com os três tipos de etiqueta: TigerTag (Maker), TigerTag Init e TigerTag+. O SDK lê os três da mesma forma.

Como verifica que um chip é autêntico?

tag.verify() verifica a assinatura ECDSA-P256 do chip, que associa o seu UID aos dados do produto, com a chave pública incluída no pacote e sem contactar um servidor. É necessário o UID: leia o chip com from_pages(uid, payload).

Pode usar-se sem instalar um pacote?

Sim. parse_tigertag.py, na raiz do repositório, é uma cópia completa e autónoma: copie o ficheiro para o seu projeto e importe TigerTag a partir dele.

Existe uma ferramenta de linha de comandos?

Sim. tigertag dump.bin apresenta um resumo legível, --json apresenta JSON e --raw os campos em bruto do protocolo; tigertag update atualiza os dados de referência e python -m tigertag funciona da mesma forma.

Leia a sua primeira TigerTag em Python

pip install tigertag e, depois, TigerTag.from_pages(uid, payload).

tigertag no PyPI