This command is a one-time setup command that is crucial for provisioning the card and activating its secure features. It’s the first secure write to the card and must be used only once, during initial setup of the secure applet.
def init(name: str, email: str, pin: str, puk: str, pairing_secret: bytes, nfc_sign: bool)
card.init(name, email, pin, puk, pairing_secret, nfc_sign)
For example, init(“name”, “email”, “pin_code”, “puk_code”, b"Cryptnox_Basic_PairingKey_String", false)
📘 Note
– PIN (9 digits/bytes)
– PUK (12 digits/bytes)
– Secure Channel pairing secret (32 bytes)
– User personal information (e.g., name and email)
– A random IV
– A key derived via EC-DH between the card’s public key (GET CARD CERTIFICATE) and a client-generated ephemeral keypair
– ISO/IEC 9797-1 Method 2 padding
[LEN | Name] + [LEN | Email] + PIN + PUK + PairingSecret
– The INIT command becomes permanently disabled (unless reset)
– The Secure Channel is enabled and PIN/PUK become active and required
Application Protocol Data Unit (APDU) Components
The following table outlines the components of the Application Protocol Data Unit (APDU).
Field | Description | Value |
CLA | This field specifies the class of the instruction. | 0x80 |
INS | This field specifies the particular command or operation that the smart card or secure element should execute. | 0xFE |
P1 | First parameter of the instruction that specifies the details about the operation being requested. | 0x00 |
P2 | First parameter of the instruction that specifies additional details about the operation being requested. | 0x00 |
Data | Key data | EC public key (LV encoded) | IV | encrypted payload |
Response
The following table outlines the possible responses that you will receive:
Response Code | Description |
0x9000 | Success |
0x6D00 | The applet is already initialized |
0x6A80 | The data is invalid (pubkey, non-digits in PIN, decrypted data length) |
0x6984 | The decryption is invalid (wrong encryption key or bad padding) |