UNPKG

ntag424-nodejs

Version:

A Node.js library for NTAG424 SDM (Secure Dynamic Messaging) authentication and data verification

77 lines 3.4 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("../index"); /** * Advanced usage example showing individual functions */ const sdmKey = Buffer.from('00000000000000000000000000000000', 'hex'); const piccDataHex = '1234567890ABCDEF1234567890ABCDEF'; const providedCmacHex = '1234567890ABCDEF'; console.log('NTAG424 Advanced Usage Example'); console.log('=============================='); console.log(); // Step 1: Decrypt PICC data console.log('Step 1: Decrypt PICC Data'); console.log('-------------------------'); const piccData = Buffer.from(piccDataHex, 'hex'); const decrypted = (0, index_1.decryptPiccData)(piccData, sdmKey); if (decrypted) { console.log(`✓ PICC data decrypted successfully`); console.log(` Decrypted: ${decrypted.toString('hex').toUpperCase()}`); } else { console.log('✗ PICC data decryption failed'); process.exit(1); } console.log(); // Step 2: Extract UID and counter console.log('Step 2: Extract UID and Counter'); console.log('-------------------------------'); const uidAndCounter = (0, index_1.extractUidAndCounter)(decrypted); if (uidAndCounter) { console.log(`✓ UID and counter extracted successfully`); console.log(` UID: ${uidAndCounter.uidHex}`); console.log(` Counter: ${uidAndCounter.counterInt} (0x${uidAndCounter.counterInt.toString(16).toUpperCase()})`); } else { console.log('✗ Failed to extract UID and counter'); process.exit(1); } console.log(); // Step 3: Generate session key console.log('Step 3: Generate Session Key'); console.log('----------------------------'); const SESSION_MAC_KEY_PURPOSE = Buffer.from([0x3C, 0xC3]); const sessionMacKey = (0, index_1.generateSdmSessionKey)(sdmKey, SESSION_MAC_KEY_PURPOSE, uidAndCounter.uid, uidAndCounter.counterInt, { uidMirroring: true, readCounter: true }); console.log(`✓ Session MAC key generated`); console.log(` Session Key: ${sessionMacKey.toString('hex').toUpperCase()}`); console.log(); // Step 4: Calculate CMAC console.log('Step 4: Calculate CMAC'); console.log('----------------------'); const fullCmac = (0, index_1.calculateCmac)(sessionMacKey, Buffer.alloc(0)); const truncatedCmac = (0, index_1.truncateCmac)(fullCmac); const calculatedCmac = truncatedCmac.toString('hex').toUpperCase(); console.log(`✓ CMAC calculated`); console.log(` Full CMAC: ${fullCmac.toString('hex').toUpperCase()}`); console.log(` Truncated: ${calculatedCmac}`); console.log(); // Step 5: Verify authentication console.log('Step 5: Verify Authentication'); console.log('-----------------------------'); const providedCmac = providedCmacHex.toUpperCase(); const isValid = calculatedCmac === providedCmac; console.log(`Provided CMAC: ${providedCmac}`); console.log(`Calculated: ${calculatedCmac}`); console.log(`Match: ${isValid ? '✓ Valid' : '✗ Invalid'}`); console.log(); // Compare with high-level function console.log('High-level Function Comparison'); console.log('------------------------------'); const highLevelResult = (0, index_1.verifySdmAuth)(piccDataHex, providedCmacHex, sdmKey.toString('hex')); console.log(`High-level result: ${highLevelResult.success ? '✓ Valid' : '✗ Invalid'}`); console.log(`UID: ${highLevelResult.uid}`); console.log(`Counter: ${highLevelResult.counter}`); console.log(`Method: ${highLevelResult.method}`); //# sourceMappingURL=advanced-usage.js.map