C-APDU constructor spec fixes (TS 102 221 / GPC v2.3 / TS 102 226)
SIM/USIM tab (TS 102 221): - Record P2 modes: 04/06/02 -> 04/02/03; P1=00 for next/previous - SELECT Le rules: USIM FID no Le, path/dfname P2=04+Le; SIM no Le - Path placeholder: 3F007FFF6FC5 -> 7FFF6FC5 - ACTIVATE/DEACTIVATE: 5-byte -> 4-byte case-1 - VERIFY PIN: dedicated input, Lc=08, FF-pad to 8 bytes - CHANGE PIN: old/new inputs, Lc=10, two 8-byte fields - ERASE BINARY removed from USIM tab RAM tab (GPC v2.3): - INSTALL: all 5 variants rewritten to strict LV + Le 00 - ELF/Module AID inputs for install-install - Privileges: 1 byte if only byte-1, else 3 bytes - InstallParams: C9 00 + toolkit TLV (mandatory) - LOAD/DELETE/GET STATUS: append Le 00 - GET STATUS P2: drop 40/42, keep 02/03/00 - GET DATA: 2F00/5031 -> case-4 5C00 data - SET STATUS: raw AID (no 4F), ISD card states, P1=60 - EXT AUTH: CLA 84, P1 security level, Lc=10 - INT AUTH: CLA 00 Toolkit (TS 102 226): - MSL: 01 <msl> -> 00 (no check) or 02 01 <msl> - SIM CA wrapped in EF: C9 00 EF <len> CA... - TAR length %3 validation - Menu IDs <= 7F validation Script Chaining (TS 102 226 Table 5.9a): - Removed Script ID + Additional Data fields - Emit strictly 83 01 <flags> - Deleted generateScriptIdHint Privilege label: Token Verification -> Token Management
This commit is contained in:
@@ -87,7 +87,7 @@ function genRamApdu() {
|
||||
|
||||
test('UICC toolkit nested inside EA (m=2, services 0)', () => {
|
||||
const apdu = genRamApdu();
|
||||
assert.ok(apdu.includes('EA128010000000020101020200011603B0000100'), apdu);
|
||||
assert.ok(apdu.includes('EA13801100000002010102020002011603B0000100'), apdu);
|
||||
});
|
||||
|
||||
test('UICC m=1 emits single pair', () => {
|
||||
@@ -111,7 +111,7 @@ test('UICC m=1 emits single pair', () => {
|
||||
set('ram-tk-ad', '');
|
||||
set('ram-tk-services', '0');
|
||||
const apdu = genRamResult();
|
||||
assert.ok(apdu.includes('EA10800E00000001010100011603B0000100'), apdu);
|
||||
assert.ok(apdu.includes('EA11800F0000000101010002011603B0000100'), apdu);
|
||||
});
|
||||
|
||||
test('UICC m=3 fills middle pair with 0000', () => {
|
||||
@@ -135,7 +135,7 @@ test('UICC m=3 fills middle pair with 0000', () => {
|
||||
set('ram-tk-ad', '');
|
||||
set('ram-tk-services', '0');
|
||||
const apdu = genRamResult();
|
||||
assert.ok(apdu.includes('EA1480120000000301010000030300011603B0000100'), apdu);
|
||||
assert.ok(apdu.includes('EA158013000000030101000003030002011603B0000100'), apdu);
|
||||
});
|
||||
|
||||
test('UICC services 7 appended as final byte', () => {
|
||||
@@ -159,7 +159,7 @@ test('UICC services 7 appended as final byte', () => {
|
||||
set('ram-tk-ad', '');
|
||||
set('ram-tk-services', '7');
|
||||
const apdu = genRamResult();
|
||||
assert.ok(apdu.includes('EA128010000000020101020200011603B0000107'), apdu);
|
||||
assert.ok(apdu.includes('EA13801100000002010102020002011603B0000107'), apdu);
|
||||
});
|
||||
|
||||
test('SIM (CA) access domain FIRST, no services byte', () => {
|
||||
@@ -183,7 +183,7 @@ test('SIM (CA) access domain FIRST, no services byte', () => {
|
||||
set('ram-tk-ad', '5A');
|
||||
set('ram-tk-services', '0');
|
||||
const apdu = genRamResult();
|
||||
assert.ok(apdu.includes('CA11015A000000020101020200011603B00001'), apdu);
|
||||
assert.ok(apdu.includes('EF14CA12015A00000002010102020002011603B00001'), apdu);
|
||||
});
|
||||
|
||||
test('SIM (CA) blank access domain emits length byte 00', () => {
|
||||
@@ -207,7 +207,7 @@ test('SIM (CA) blank access domain emits length byte 00', () => {
|
||||
set('ram-tk-ad', '');
|
||||
set('ram-tk-services', '0');
|
||||
const apdu = genRamResult();
|
||||
assert.ok(apdu.includes('CA1000000000020101020200011603B00001'), apdu);
|
||||
assert.ok(apdu.includes('EF13CA110000000002010102020002011603B00001'), apdu);
|
||||
});
|
||||
|
||||
test('SIM (CA) m=3, no TAR, blank access domain', () => {
|
||||
@@ -231,7 +231,7 @@ test('SIM (CA) m=3, no TAR, blank access domain', () => {
|
||||
set('ram-tk-ad', '');
|
||||
set('ram-tk-services', '0');
|
||||
const apdu = genRamResult();
|
||||
assert.ok(apdu.includes('CA0F000000000301010000030300011600'), apdu);
|
||||
assert.ok(apdu.includes('EF12CA1000000000030101000003030002011600'), apdu);
|
||||
});
|
||||
|
||||
test('UICC m=60 uses long-form BER lengths (EA 81 87 / inner 81 84)', () => {
|
||||
@@ -255,7 +255,7 @@ test('UICC m=60 uses long-form BER lengths (EA 81 87 / inner 81 84)', () => {
|
||||
set('ram-tk-ad', '');
|
||||
set('ram-tk-services', '0');
|
||||
const apdu = genRamResult();
|
||||
assert.ok(apdu.includes('EA8187808184'), apdu);
|
||||
assert.ok(apdu.includes('EA8188808185'), apdu);
|
||||
});
|
||||
|
||||
test('LOAD P1 fixed to 80 (last block)', () => {
|
||||
|
||||
Reference in New Issue
Block a user