Comprehensive technical knowledge base covering 12 GSMA eSIM specifications. 84+ articles on Remote SIM Provisioning — SGP.02, SGP.22, SGP.32, SGP.41, SGP.29, SGP.23, SGP.25, SGP.26 and more.
🏠 eUICC.tech > SGP.23 Test Specifications > Testing the LPA: LDS, LPD, and LUI Conformance
💡 Why this matters: The LPA is the bridge between the user and the eUICC: and between the device and the SM-DP+/SM-DS. Get the LPA wrong, and profile downloads fail, discovery breaks, or users can’t switch carriers. SGP.23 dedicates two complete testing chapters (eUICC ES10x and LPAd interfaces) to ensuring this bridge works correctly in every scenario.
Key takeaways:
- ES10a (LDS → eUICC) is tested for two functions: discovery address retrieval and default SM-DP+ configuration
- ES10b (LPD → eUICC) covers 12 functions: the full profile download pipeline from challenge generation to CRL loading
- ES10c (LUI → eUICC) covers 8 functions for local profile management: list, enable, disable, delete, reset, EID, nickname
- LPAd interface testing (Section 4.4) verifies that the device-side LPA correctly relays commands and handles responses
- ES11 (LDS → SM-DS) event retrieval is tested from both the eUICC side (Section 4.2) and the LPAd side (Section 4.4)
- Device-level procedure testing (Section 5.4) verifies full workflows: Add Profile, Enable/Disable/Delete, Set Nickname, eUICC Memory Reset
The LPA (Local Profile Assistant) is the most interface-heavy component in the eSIM ecosystem. It has three sub-components: LDS (discovery), LPD (download), and LUI (user interface) : and touches four interfaces: ES10a, ES10b, ES10c (to the eUICC) and ES9+, ES11 (to remote servers). SGP.23 tests both the eUICC’s implementation of the LPA services and the LPAd/Device’s implementation as a client.
The LDS sub-component uses ES10a to query the eUICC about discovery configuration. Two functions are tested:
Returns the SM-DP+ address (if set as default) and/or the Root SM-DS address configured on the eUICC. Test cases verify:
GetEuiccConfiguredAddressesResponseConfigures the eUICC’s default SM-DP+ address: the fallback server used when no explicit SM-DP+ address is provided in an Activation Code. Test cases verify:
GetEuiccConfiguredAddressesThe LPD sub-component is the workhorse. Twelve ES10b functions are tested:
The two functions that kick off mutual authentication. GetEUICCInfo returns the eUICC’s capabilities, supported CI public key identifiers (for signing and verification), and SAS accreditation number. GetEUICCChallenge generates a fresh random challenge. Test cases verify:
EUICCInfo1 and EUICCInfo2 structure encodingeuiccCiPKIdListForSigning and euiccCiPKIdListForVerification are populated correctlyThe eUICC verifies the SM-DP+’s identity. The test tool sends a simulated AuthenticateServerRequest containing the SM-DP+’s certificate chain and signature. The eUICC must:
CERT.DPauth.ECDSA → CI → root)Test cases cover valid authentication, wrong certificates, expired certificates, mismatched matching IDs, and unsupported CI public key identifiers.
The eUICC prepares to receive a profile. It verifies the SM-DP+’s profile binding certificate (CERT.DPpb.ECDSA) and generates a one-time key pair (otPK.eUICC.ECKA / otSK.eUICC.ECKA) for the encrypted download channel. Test cases verify:
The critical function that delivers encrypted profile data to the eUICC. The eUICC receives the BoundProfilePackage (encrypted specifically for this eUICC) and processes it internally: the LPA never sees the decrypted content. Test cases verify:
LoadBoundProfilePackage is called repeatedly)StoreMetadata step embedded within the bound packageThree functions manage the eUICC’s notification queue:
NotificationMetadataListPendingNotification structuresTest cases verify ordered delivery, sequence number management, and that notifications persist until explicitly removed.
Loads a Certificate Revocation List onto the eUICC. Test cases verify correct parsing of the CRL ASN.1 structure and that subsequent authentications reject certificates listed in the CRL.
The LUI sub-component uses ES10c for all user-facing profile operations:
Returns information about all installed profiles: ICCID, ISD-P AID, profile state (Enabled/Disabled), profile nickname, Service Provider Name, Profile Name, Profile Class, and PPRs. Test cases verify:
ProfileInfoListResponseEnable makes a profile the active subscription (deactivating the previously enabled one). Disable makes it dormant while keeping it installed. Test cases verify:
RefreshFlag behaviour (whether the eUICC sends a REFRESH proactive command in “UICC Reset” mode)Permanently removes an ISD-P and all its contents. Test cases verify:
GetProfilesInfoWhen testing the LPAd (device-side LPA), the perspective flips: the test tool simulates the eUICC and remote servers, and the Device Under Test exercises the ES10x, ES9+, and ES11 interfaces:
GetEuiccConfiguredAddresses and SetDefaultDPAddress and handle the eUICC’s responsesInitiateAuthentication, GetBoundProfilePackage, and AuthenticateClient on the simulated SM-DP+ES11.GetEvents and handle event recordsThe S_EndUser simulator (person or software) drives all user interactions, following the vendor’s documented confirmation mechanisms (#IUT_LPAd_Confirmation).
Beyond interface-level testing, Section 5.4 tests complete workflows:
Based on GSMA SGP.23 v1.16 (29 April 2025) : RSP Test Specification, Sections 4.2 (eUICC Interfaces), 4.4 (LPAd Interfaces), 5.2 (eUICC Behaviour), 5.4 (Device Procedures)
| ← Previous: The GSMA eSIM Test Infrastructure | Section Index | Next: Testing the SM-DP+ and SM-DS → |