Présentation
Pigeon est une bibliothèque open‑source publiée par Pigeon Labs sur GitHub (repo pigeonlabsHQ/pigeon). La version stable la plus récente, v0.5.0, propose une API Go permettant de générer des Apple Wallet Passes (PassKit) à partir de données JSON et de les signer numériquement. Le projet se positionne comme un « signed Pass for what a sub‑agent may do », c’est‑à‑dire un moyen de déléguer la création de passes à des services tiers tout en conservant la traçabilité cryptographique.
Architecture et flux de génération
Le cœur de Pigeon repose sur trois composants : un template engine qui assemble le répertoire du pass, un module de PKCS#7 qui applique la signature, et un wrapper HTTP qui expose une API REST. Le processus débute par la lecture d’un fichier pass.json contenant les champs obligatoires (formatVersion, passTypeIdentifier, serialNumber, teamIdentifier). Ensuite, le moteur copie les ressources (images, localisation) dans un répertoire temporaire, crée le fichier manifest.json en calculant le SHA‑1 de chaque fichier, et enfin invoque la fonction SignPass avec le certificat .p12 du développeur et le certificat Apple WWDR. Le résultat est un fichier .pkpass compressé, prêt à être envoyé au client iOS.
Sécurité du processus de signature
La sécurité repose sur deux certificats : le certificat développeur (.p12) protégé par un mot de passe, et le certificat Apple WWDR (public). Pigeon utilise la bibliothèque crypto/pkcs7 de Go pour générer une signature CMS (Cryptographic Message Syntax) conforme aux exigences d’Apple. La signature intègre le hachage SHA‑1 de chaque fichier du pass, ce qui empêche toute modification post‑signature sans invalider le manifest.json. De plus, le code vérifie explicitement la chaîne de confiance du certificat développeur ; si le mot de passe est incorrect ou le certificat expiré, la fonction renvoie une erreur ErrInvalidCertificate. Cette approche garantit que chaque pass est authentifié par le propriétaire du compte développeur et que les sous‑agents ne peuvent pas altérer le contenu sans disposer du certificat.
Limites et perspectives
Malgré sa robustesse, Pigeon présente quelques contraintes. Premièrement, la dépendance à crypto/pkcs7 impose Go 1.13 ou supérieur, ce qui exclut les environnements plus anciens. Deuxièmement, le processus de génération reste monolithique : le serveur doit disposer du certificat .p12 en clair, ce qui complique le déploiement dans des architectures zero‑trust où les secrets sont stockés dans des vaults externes. Enfin, la documentation indique que le support des champs de localisation dynamique est limité à la version 1 du format PassKit, ce qui peut restreindre les cas d’usage multilingues. Les contributeurs envisagent d’ajouter un mode « sign‑as‑service » où la signature serait externalisée vers un HSM (Hardware Security Module), réduisant ainsi la surface d’exposition du certificat.