Skip to content

Loading builds...

Changes

#86 (Jul 10, 2026, 3:35:17 PM)

doc/build.md: fix typo

Related: SYS#8100
Change-Id: Ie6a066f3289fbdde40f55bd9f38a3dd90102e7e6
pmaier@sysmocom.de at

#85 (Jul 10, 2026, 3:35:17 PM)

esipa: rename TransactionId to EimTransactionId where applicable

In SGP.32 V.1.2 all TransactionIds which are generated by the eIM are
called now called "eimTransactionId". Let's make sure that we name
the EimTransactionId variables and atoms (eimTransactionId) accordingly.

Change-Id: Ia97f96c27d5dc4405effd5266de4cdb797849699
Related: SYS#8100
pmaier@sysmocom.de at

#84 (Jul 10, 2026, 3:35:17 PM)

esipa_asn1_handler: use eimTransactionId in EimPackageResultResponseError

EimPackageResultResponseError contains an eimTransactionId, let's use this
eimTransactionId and add a dedicated handler function for the
EimPackageResultResponseError to esipa_asn1_handler_utils

Change-Id: Iadd852a7531f180618cf12b314170ceea3f97615
Related: SYS#8100
pmaier@sysmocom.de at

#83 (Jul 10, 2026, 3:35:17 PM)

esipa_asn1_handler_utils: use maps:find

We can replace maps:is_key and maps:get with a single maps:find call.

Change-Id: I6cc151deef161f3ca4726e6b81ae1f5cc80ad184
Related: SYS#8100
pmaier@sysmocom.de at

#82 (Jul 10, 2026, 3:35:17 PM)

esipa: supply eimTransactionId in profileDownloadTriggerRequest

When we supply an eimTransactionId in profileDownloadTriggerRequest,
the IPAd will echo the same eimTransactionId in the
initiateAuthenticationRequestEsipa message. This allows the eIM
to distinguish to which transaction (work) the received
initiateAuthenticationRequestEsipa belongs. This was not possible
before. The eIM had to rely soly on the PID of the sub process
which is handling the HTTP connection.

Change-Id: I822d6b2bb51498713739671804b173260e9a28a3
Related: SYS#8100
pmaier@sysmocom.de at

#81 (Jul 10, 2026, 3:35:17 PM)

mnesia_db_euicc: rename timer_setparam to timer_rest

The function timer_setparam is processing REST API orders
in regular intervals. Naming the timer "timer_rest" makes
more sense.

Change-Id: Icfa203477e044ce2cc312d4b6e2693a97191c61d
pmaier@sysmocom.de at

#80 (Jul 10, 2026, 3:35:17 PM)

esipa_asn1_handler: use eimTransactionId for ipaEuiccDataResponse

The ipaEuiccDataResponse does currently not use the eimTransactionId,
which was added with SGP.32 V.1.2, let's make use of the eimTransactionId
and move the handler functionality to a dedicated helper function in
esipa_asn_handler_utils.

Change-Id: Ie414eef7fd5c8928dd611503f4dd8d67322c0e80
Related: SYS#8100
pmaier@sysmocom.de at

#79 (Jul 10, 2026, 3:35:16 PM)

esipa_asn1_handler: replace handle_asn1_notificationList

The helper function handle_asn1_notificationList can also be
described using the comprehension syntax.

Change-Id: Ia95f56998b4f7a8b0f9fce727d82dedc942e5aeb
Related: SYS#8100
pmaier@sysmocom.de at

#78 (Jul 10, 2026, 3:35:16 PM)

mnesia_db_euicc: renovate handling of euicc table (mnesia, REST)

The REST API that allows users to set certain eUICC parameters
(we call them "states" from now on) only allows to set eUICC
states, but doesn't allow to read them back.

With this patch, we renovate the handling of the mnesia euicc
table from the ground up so that REST API users have read and
write access to the states stored in the mnesia euicc table.

Related: SYS#8100

The original purpose of the euicc table was to hold static params
for an eUICC (e.g. the public key or the flag that tells if it is
a consumer eUICC or not). Now that we plan to extend the scope
of the euicc table, it makes more sense to talk about states rather
than parameters.

Change-Id: I74c602555b194a28d6eb9dd67ec4c6a8865fcb77
pmaier@sysmocom.de at

#77 (Jul 10, 2026, 3:35:16 PM)

contrib/tryme_euiccDataRequest: fixup example tag string

The eUICC data request takes a string with TLV tags as input. The
example in this example still uses tags from SGP.32 V.1.0.1, let's
update the string so that it is compliant with SGP.32 V.1.2.

(see also SGP.32, section 2.11.1.2)

Related: SYS:8100
Change-Id: I5be04c954330638d3e7d78e8f5f280bebb707efa
pmaier@sysmocom.de at

#76 (Jul 10, 2026, 3:35:16 PM)

esipa_asn1_handler_utils: rename EsipaReq to Debuginfo

The parameter EsipaReq only exists because we pass it as
Debuginfo to mnesia_db_work:finish. Let's rename it to
"Debuginfo" in esipa_asn1_handler_utils as well to make
clear what the purpose of this parameter is.

Change-Id: I8115d382172989b9ef7ae7f97ce39520e3e2dd16
Related: SYS#8100
pmaier@sysmocom.de at

#75 (Jul 10, 2026, 3:35:16 PM)

mnesia_db_rest: add comment on why we create an euicc entry early

Even though it is technically not necessary, we ensure that an
entry is present in the euicc table on each REST API call. Let's
add a comment to explain why we do it anyway.

Change-Id: Ifb9340655c5f36e074a1a92c0e234ef62c79b9d8
pmaier@sysmocom.de at

#74 (Jul 10, 2026, 3:35:14 PM)

mnesia_db: split functionality into dedicated modules

The mnesia_db module is responsible to handle three different tables
with different scope. Let's split the functionality into separate
modules to make the code easier to maintain.

Change-Id: Ifc649337ab7ce7eb9dc602a1439293130f002f41
Related: SYS#8100
pmaier@sysmocom.de at

#73 (Jul 10, 2026, 10:31:53 AM)

Add Makefile and start script for installation

The Makefile allows to compile and install onomondo-eim. This allows to
build it with osmo-dev and therefore build and run it with testenv of
osmo-ttcn3-hacks.

The start script allows to run onomondo-eim without starting erlang by
hand. It was taken from osmo-s1gw repository and log-level option was
added.

The program name changed from 'onomondo_eim_release' to 'onomodo-eim'.

Related: SYS#8100
Change-Id: I4f038c0901c23cbe18ef62eb546e264d0b924cc7
Andreas Eversberg at

#72 (Jul 8, 2026, 3:34:54 PM)

esipa: rename TransactionId to EimTransactionId where applicable

In SGP.32 V.1.2 all TransactionIds which are generated by the eIM are
called now called "eimTransactionId". Let's make sure that we name
the EimTransactionId variables and atoms (eimTransactionId) accordingly.

Change-Id: Ia97f96c27d5dc4405effd5266de4cdb797849699
Related: SYS#8100
pmaier@sysmocom.de at

#71 (Jul 8, 2026, 3:34:54 PM)

esipa: supply eimTransactionId in profileDownloadTriggerRequest

When we supply an eimTransactionId in profileDownloadTriggerRequest,
the IPAd will echo the same eimTransactionId in the
initiateAuthenticationRequestEsipa message. This allows the eIM
to distinguish to which transaction (work) the received
initiateAuthenticationRequestEsipa belongs. This was not possible
before. The eIM had to rely soly on the PID of the sub process
which is handling the HTTP connection.

Change-Id: I822d6b2bb51498713739671804b173260e9a28a3
Related: SYS#8100
pmaier@sysmocom.de at

#70 (Jul 8, 2026, 3:34:54 PM)

esipa_asn1_handler: use eimTransactionId for ipaEuiccDataResponse

The ipaEuiccDataResponse does currently not use the eimTransactionId,
which was added with SGP.32 V.1.2, let's make use of the eimTransactionId
and move the handler functionality to a dedicated helper function in
esipa_asn_handler_utils.

Change-Id: Ie414eef7fd5c8928dd611503f4dd8d67322c0e80
Related: SYS#8100
pmaier@sysmocom.de at

#69 (Jul 8, 2026, 3:34:54 PM)

esipa_asn1_handler_utils: use maps:find

We can replace maps:is_key and maps:get with a single maps:find call.

Change-Id: I6cc151deef161f3ca4726e6b81ae1f5cc80ad184
Related: SYS#8100
pmaier@sysmocom.de at

#68 (Jul 8, 2026, 3:34:54 PM)

esipa_asn1_handler_utils: rename EsipaReq to Debuginfo

The parameter EsipaReq only exists because we pass it as
Debuginfo to mnesia_db_work:finish. Let's rename it to
"Debuginfo" in esipa_asn1_handler_utils as well to make
clear what the purpose of this parameter is.

Change-Id: I8115d382172989b9ef7ae7f97ce39520e3e2dd16
Related: SYS#8100
pmaier@sysmocom.de at

#67 (Jul 8, 2026, 3:34:54 PM)

esipa_asn1_handler: use eimTransactionId in EimPackageResultResponseError

EimPackageResultResponseError contains an eimTransactionId, let's use this
eimTransactionId and add a dedicated handler function for the
EimPackageResultResponseError to esipa_asn1_handler_utils

Change-Id: Iadd852a7531f180618cf12b314170ceea3f97615
Related: SYS#8100
pmaier@sysmocom.de at

#66 (Jul 8, 2026, 3:34:53 PM)

mnesia_db_euicc: rename timer_setparam to timer_rest

The function timer_setparam is processing REAT api orders
in regular intervals. Naming the timer "timer_rest" makes
more sense.

Change-Id: Icfa203477e044ce2cc312d4b6e2693a97191c61d
pmaier@sysmocom.de at

#65 (Jul 8, 2026, 3:34:53 PM)

esipa_asn1_handler: replace handle_asn1_notificationList

The helper function handle_asn1_notificationList can also be
described using the comprehension syntax.

Change-Id: Ia95f56998b4f7a8b0f9fce727d82dedc942e5aeb
Related: SYS#8100
pmaier@sysmocom.de at

#64 (Jul 8, 2026, 10:57:24 AM)

esipa_asn1_handler_utils: rename EsipaReq to Debuginfo

The parameter EsipaReq only exists because we pass it as
Debuginfo to mnesia_db_work:finish. Let's rename it to
"Debuginfo" in esipa_asn1_handler_utils as well to make
clear what the purpose of this parameter is.

Change-Id: I8115d382172989b9ef7ae7f97ce39520e3e2dd16
Related: SYS#8100
pmaier@sysmocom.de at

#63 (Jul 8, 2026, 10:57:24 AM)

esipa_asn1_handler: use eimTransactionId for ipaEuiccDataResponse

The ipaEuiccDataResponse does currently not use the eimTransactionId,
which was added with SGP.32 V.1.2, let's make use of the eimTransactionId
and move the handler functionality to a dedicated helper function in
esipa_asn_handler_utils.

Change-Id: Ie414eef7fd5c8928dd611503f4dd8d67322c0e80
Related: SYS#8100
pmaier@sysmocom.de at

#62 (Jul 8, 2026, 10:57:24 AM)

esipa_asn1_handler: replace handle_asn1_notificationList

The helper function handle_asn1_notificationList can also be
described using the comprehension syntax.

Change-Id: Ia95f56998b4f7a8b0f9fce727d82dedc942e5aeb
Related: SYS#8100
pmaier@sysmocom.de at

#61 (Jul 8, 2026, 10:57:24 AM)

esipa: supply eimTransactionId in profileDownloadTriggerRequest

When we supply an eimTransactionId in profileDownloadTriggerRequest,
the IPAd will echo the same eimTransactionId in the
initiateAuthenticationRequestEsipa message. This allows the eIM
to distinguish to which transaction (work) the received
initiateAuthenticationRequestEsipa belongs. This was not possible
before. The eIM had to rely soly on the PID of the sub process
which is handling the HTTP connection.

Change-Id: I822d6b2bb51498713739671804b173260e9a28a3
Related: SYS#8100
pmaier@sysmocom.de at

#60 (Jul 8, 2026, 10:57:24 AM)

esipa_asn1_handler: use eimTransactionId in EimPackageResultResponseError

EimPackageResultResponseError contains an eimTransactionId, let's use this
eimTransactionId and add a dedicated handler function for the
EimPackageResultResponseError to esipa_asn1_handler_utils

Change-Id: Iadd852a7531f180618cf12b314170ceea3f97615
Related: SYS#8100
pmaier@sysmocom.de at

#59 (Jul 8, 2026, 10:57:24 AM)

esipa: rename TransactionId to EimTransactionId where applicable

In SGP.32 V.1.2 all TransactionIds which are generated by the eIM are
called now called "eimTransactionId". Let's make sure that we name
the EimTransactionId variables and atoms (eimTransactionId) accordingly.

Change-Id: Ia97f96c27d5dc4405effd5266de4cdb797849699
Related: SYS#8100
pmaier@sysmocom.de at

#58 (Jul 8, 2026, 10:48:37 AM)

mnesia_db: split functionality into dedicated modules

The mnesia_db module is responsible to handle three different tables
with different scope. Let's split the functionality into separate
modules to make the code easier to maintain.

Change-Id: Ifc649337ab7ce7eb9dc602a1439293130f002f41
Related: SYS#8100
pmaier@sysmocom.de at

#57 (Jul 8, 2026, 10:31:15 AM)

mnesia_db: split functionality into dedicated modules

The mnesia_db module is responsible to handle three different tables
with different scope. Let's split the functionality into separate
modules to make the code easier to maintain.

Change-Id: Ifc649337ab7ce7eb9dc602a1439293130f002f41
Related: SYS#8100
pmaier@sysmocom.de at

#56 (Jul 8, 2026, 10:16:59 AM)

esipa: rename TransactionId to EimTransactionId where applicable

In SGP.32 V.1.2 all TransactionIds which are generated by the eIM are
called now called "eimTransactionId". Let's make sure that we name
the EimTransactionId variables and atoms (eimTransactionId) accordingly.

Change-Id: Ia97f96c27d5dc4405effd5266de4cdb797849699
Related: SYS#8100
pmaier@sysmocom.de at

#55 (Jul 8, 2026, 10:16:59 AM)

esipa_asn1_handler: use eimTransactionId for ipaEuiccDataResponse

The ipaEuiccDataResponse does currently not use the eimTransactionId,
which was added with SGP.32 V.1.2, let's make use of the eimTransactionId
and move the handler functionality to a dedicated helper function in
esipa_asn_handler_utils.

Change-Id: Ie414eef7fd5c8928dd611503f4dd8d67322c0e80
Related: SYS#8100
pmaier@sysmocom.de at

#54 (Jul 8, 2026, 10:16:59 AM)

esipa_asn1_handler: use eimTransactionId in EimPackageResultResponseError

EimPackageResultResponseError contains an eimTransactionId, let's use this
eimTransactionId and add a dedicated handler function for the
EimPackageResultResponseError to esipa_asn1_handler_utils

Change-Id: Iadd852a7531f180618cf12b314170ceea3f97615
Related: SYS#8100
pmaier@sysmocom.de at

#53 (Jul 8, 2026, 10:16:59 AM)

esipa_asn1_handler_utils: rename EsipaReq to Debuginfo

The parameter EsipaReq only exists because we pass it as
Debuginfo to mnesia_db_work:finish. Let's rename it to
"Debuginfo" in esipa_asn1_handler_utils as well to make
clear what the purpose of this parameter is.

Change-Id: I8115d382172989b9ef7ae7f97ce39520e3e2dd16
Related: SYS#8100
pmaier@sysmocom.de at

#52 (Jul 8, 2026, 10:16:59 AM)

esipa_asn1_handler: replace handle_asn1_notificationList

The helper function handle_asn1_notificationList can also be
described using the comprehension syntax.

Change-Id: Ia95f56998b4f7a8b0f9fce727d82dedc942e5aeb
Related: SYS#8100
pmaier@sysmocom.de at

#51 (Jul 8, 2026, 10:16:57 AM)

esipa: supply eimTransactionId in profileDownloadTriggerRequest

When we supply an eimTransactionId in profileDownloadTriggerRequest,
the IPAd will echo the same eimTransactionId in the
initiateAuthenticationRequestEsipa message. This allows the eIM
to distinguish to which transaction (work) the received
initiateAuthenticationRequestEsipa belongs. This was not possible
before. The eIM had to rely soly on the PID of the sub process
which is handling the HTTP connection.

Change-Id: I822d6b2bb51498713739671804b173260e9a28a3
Related: SYS#8100
pmaier@sysmocom.de at

#50 (Jul 8, 2026, 10:09:34 AM)

esipa_rest_utils: re-align to SGP.32 Section 2.11.2

Section 2.11.2: rename EuiccPackageResultDataSigned.configureAutoEnableResult to EuiccPackageResultDataSigned.configureImmediateEnableResult

Change-Id: Ib4e6a4b4cb4d26a391346169b9047515496dd308
Related: SYS#8100
pmaier@sysmocom.de at

#49 (Jul 8, 2026, 10:09:34 AM)

mnesia_db: split functionality into dedicated modules

The mnesia_db module is responsible to handle three different tables
with different scope. Let's split the functionality into separate
modules to make the code easier to maintain.

Change-Id: Ifc649337ab7ce7eb9dc602a1439293130f002f41
Related: SYS#8100
pmaier@sysmocom.de at

#48 (Jul 8, 2026, 10:09:33 AM)

es9p_client: convert InitiateAuthenticationOkEsipa to match SGP.32 V.1.2

In SGP.32 V.1.0.1, InitiateAuthenticationOkEsipa is almost identical to
SGP.22 InitiateAuthenticationOkEs9. However, in SGP.32 V.1.2, the member
euiccCiPKIdToBeUsed is renamed to euiccCiPKIdentifierToBeUsed. This means
it is no longer possible to pass InitiateAuthenticationOkEsipa as
InitiateAuthenticationOkEs9 to ES9+ directly. Instead we have to re-build
the the InitiateAuthenticationOkEs9 from the contents of
InitiateAuthenticationOkEsipa.

Change-Id: I44c60a2f0d1129093ea67908d2eed167643a4a87
Related: SYS#8100
pmaier@sysmocom.de at

#47 (Jul 8, 2026, 10:09:33 AM)

esipa_asn1_handler: re-align to SGP.32 section 2.11.2 and section 5.14.6

Section 2.11.2: eIM package result (EuiccPackageResult case) is now concatenated with PendingNotificationList instead of RetrieveNotificationsListResponse
Section 5.14.6: ESipa.ProvideEimPackageResult: Significant change in parameters

Change-Id: Ic0872edefc1844166943c60528557c6b7a6602ce
Related: SYS#8100
pmaier@sysmocom.de at

#46 (Jul 8, 2026, 10:02:11 AM)

eim_cfg: set eimSupportedProtocol and indirectProfileDownload flags

The members eimSupportedProtocol and indirectProfileDownload were
added as optional members to EimConfigurationData with SGP.32 V.1.2.

Since our eIM implementation only supports eIM Package Retrieval via
HTTPs and the Indirect Profile Download procedure is the only Profile
Download procedure we currently support, the EimConfigurationData
should reflect those properties correctly.

(The EimConfigurationData is not announced actively by the eIM, but
this eIM implementation contains a generator to help with the encoding
of the EimConfigurationData that is programmed into the eUICC)

Change-Id: I4ce236fb1bfb8a3790191be95ab0958dce13a9d8
Related: SYS#8100
pmaier@sysmocom.de at

#45 (Jul 8, 2026, 9:24:25 AM)

esipa_asn1_handler: fix transactionId handling

The transactionId member is now called eimTransactionId. It is also
an optional member.

Change-Id: I1340e0c7aed091e8e5a5089ebd6e524512408cf7
Related: SYS#8100
pmaier@sysmocom.de at

#44 (Jul 8, 2026, 9:24:25 AM)

esipa_asn1_codec: add special handling for ProvideEimPackageResultResponse

In SGP.32 V.1.2 ProvideEimPackageResultResponse is defined as a CHOICE.
This means that this struct now also requires special handling.

Change-Id: I859a175cc28a18ea9334d9b2cf233294fdc95b76
Related: SYS#8100
pmaier@sysmocom.de at

#43 (Jun 30, 2026, 3:28:42 PM)

rest_api_response_schema: add missing error codes

In SGP.32 V.1.2, new error codes were added to EnableProfileResult,
DisableProfileResult, DeleteProfileResult and AddEimResult

See also: SGP.32, section 2.11.2

Change-Id: I525ca9d3b7fb870405d374160272d8ec26c85880
Related: SYS#8100
pmaier@sysmocom.de at

#42 (Jun 30, 2026, 3:26:42 PM)

esipa_rest_utils: align IpaEuiccDataResponse to SGP.32 V.1.2

The ASN.1 struct IpaEuiccDataResponse has renamed the error code
member from ipaEuiccDataError to ipaEuiccDataErrorCode. The new
ipaEuiccDataErrorCode is a sequence that has an ipaEuiccDataErrorCode
member, which is the equivalent of the previously existing
ipaEuiccDataError member.

See also: SGP.32, section 2.11.2.2

Change-Id: Ie734a09ed4b0d57de30dc6fb377dfada79ea2ae4
Related: SYS#8100
pmaier@sysmocom.de at

#41 (Jun 30, 2026, 3:24:07 PM)

esipa_rest_utils: add support for PSMOs added in SGP.32 V.1.2

SGP.32 adds 3 additional PSMOs:
- setFallbackAttribute
- unsetFallbackAttribute
- setDefaultDpAddress

Change-Id: I03cdd70065a83dfc611d614cf32d817c13fad347
Related: SYS#8100
pmaier@sysmocom.de at

#40 (Jun 30, 2026, 3:20:12 PM)

esipa_rest_utils: add support for PSMOs added in SGP.32 V.1.2

SGP.32 adds 3 additional PSMOs:
- setFallbackAttribute
- unsetFallbackAttribute
- setDefaultDpAddress

Change-Id: I03cdd70065a83dfc611d614cf32d817c13fad347
Related: SYS#8100
pmaier@sysmocom.de at

#39 (Jun 30, 2026, 3:14:32 PM)

rest_api: move "required" member to the correct level

In some locations in the JSON schema files we find the "required"
member on the same level as the members of "properties" (likewise
"items"). This is incorrect, the "required" member should always
be on the same level as the "properties" or "items" member.

(At the moment the JSON schema files serve only documentation
purposes, they are not used to do any actual validation yet.)

Change-Id: I07d51d0e809a718144bd51a6540ab51187bb4daa
Related: SYS#8100
pmaier@sysmocom.de at

#38 (Jun 30, 2026, 3:12:07 PM)

eim_cfg: set eimSupportedProtocol and indirectProfileDownload flags

The members eimSupportedProtocol and indirectProfileDownload were
added as optional members to EimConfigurationData with SGP.32 V.1.2.

Since our eIM implementation only supports eIM Package Retrieval via
HTTPs and the Indirect Profile Download procedure is the only Profile
Download procedure we currently support, the EimConfigurationData
should reflect those properties correctly.

(The EimConfigurationData is not announced actively by the eIM, but
this eIM implementation contains a generator to help with the encoding
of the EimConfigurationData that is programmed into the eUICC)

Change-Id: I4ce236fb1bfb8a3790191be95ab0958dce13a9d8
Related: SYS#8100
pmaier@sysmocom.de at

#37 (Jun 30, 2026, 3:10:16 PM)

esipa_rest_utils: re-align to SGP.32 Section 2.11.2

Section 2.11.2: rename EuiccPackageResultDataSigned.configureAutoEnableResult to EuiccPackageResultDataSigned.configureImmediateEnableResult

Change-Id: Ib4e6a4b4cb4d26a391346169b9047515496dd308
Related: SYS#8100
pmaier@sysmocom.de at

#36 (Jun 30, 2026, 3:03:04 PM)

esipa_rest_utils: re-align to SGP.32 Section 2.11.2

Section 2.11.2: rename EuiccPackageResultDataSigned.configureAutoEnableResult to EuiccPackageResultDataSigned.configureImmediateEnableResult

Change-Id: Ib4e6a4b4cb4d26a391346169b9047515496dd308
Related: SYS#8100
pmaier@sysmocom.de at

#35 (Jun 30, 2026, 3:03:04 PM)

eim_cfg: set eimSupportedProtocol and indirectProfileDownload flags

The members eimSupportedProtocol and indirectProfileDownload were
added as optional members to EimConfigurationData with SGP.32 V.1.2.

Since our eIM implementation only supports eIM Package Retrieval via
HTTPs and the Indirect Profile Download procedure is the only Profile
Download procedure we currently support, the EimConfigurationData
should reflect those properties correctly.

(The EimConfigurationData is not announced actively by the eIM, but
this eIM implementation contains a generator to help with the encoding
of the EimConfigurationData that is programmed into the eUICC)

Change-Id: I4ce236fb1bfb8a3790191be95ab0958dce13a9d8
Related: SYS#8100
pmaier@sysmocom.de at

#34 (Jun 30, 2026, 3:00:56 PM)

esipa_asn1_handler: re-align to SGP.32 section 2.11.2 and section 5.14.6

Section 2.11.2: eIM package result (EuiccPackageResult case) is now concatenated with PendingNotificationList instead of RetrieveNotificationsListResponse
Section 5.14.6: ESipa.ProvideEimPackageResult: Significant change in parameters

Change-Id: Ic0872edefc1844166943c60528557c6b7a6602ce
Related: SYS#8100
pmaier@sysmocom.de at

#33 (Jun 30, 2026, 2:40:18 PM)

esipa_asn1_handler: re-align to SGP.32 section 2.11.2 and section 5.14.6

Section 2.11.2: eIM package result (EuiccPackageResult case) is now concatenated with PendingNotificationList instead of RetrieveNotificationsListResponse
Section 5.14.6: ESipa.ProvideEimPackageResult: Significant change in parameters

Change-Id: Ic0872edefc1844166943c60528557c6b7a6602ce
Related: SYS#8100
pmaier@sysmocom.de at

#32 (Jun 30, 2026, 2:35:59 PM)

esipa_asn1_handler: fix transactionId handling

The transactionId member is now called eimTransactionId. It is also
an optional member.

Change-Id: I1340e0c7aed091e8e5a5089ebd6e524512408cf7
Related: SYS#8100
pmaier@sysmocom.de at

#31 (Jun 30, 2026, 2:33:34 PM)

esipa_asn1_codec: add special handling for ProvideEimPackageResultResponse

In SGP.32 V.1.2 ProvideEimPackageResultResponse is defined as a CHOICE.
This means that this struct now also requires special handling.

Change-Id: I859a175cc28a18ea9334d9b2cf233294fdc95b76
Related: SYS#8100
pmaier@sysmocom.de at

#30 (Jun 30, 2026, 2:30:39 PM)

es9p_client: section 6.3.2.1, rename euiccCiPKIdToBeused to match SGP.32 V.1.2

Section 6.3.2.1: rename InitiateAuthenticationOkEsipa.euiccCiPKIdToBeused to InitiateAuthenticationOkEsipa.euiccCiPKIdentifierToBeUsed

Change-Id: I44c60a2f0d1129093ea67908d2eed167643a4a87
Related: SYS#8100
pmaier@sysmocom.de at

#29 (Jun 30, 2026, 10:46:08 AM)

eim_cfg: set eimSupportedProtocol and indirectProfileDownload flags

The members eimSupportedProtocol and indirectProfileDownload were
added as optional members to EimConfigurationData with SGP.32 V.1.2.

Since our eIM implementation only supports eIM Package Retrieval via
HTTPs and the Indirect Profile Download procedure is the only Profile
Download procedure we currently support, the EimConfigurationData
should reflect those properties correctly.

(The EimConfigurationData is not announced actively by the eIM, but
this eIM implementation contains a generator to help with the encoding
of the EimConfigurationData that is programmed into the eUICC)

Change-Id: I4ce236fb1bfb8a3790191be95ab0958dce13a9d8
Related: SYS#8100
pmaier@sysmocom.de at

#28 (Jun 30, 2026, 10:10:29 AM)

esipa_rest_utils: re-align to SGP.32 Section 2.11.2

Section 2.11.2: rename EuiccPackageResultDataSigned.configureAutoEnableResult to EuiccPackageResultDataSigned.configureImmediateEnableResult

Change-Id: Ib4e6a4b4cb4d26a391346169b9047515496dd308
Related: SYS#8100
pmaier@sysmocom.de at

#27 (Jun 30, 2026, 10:10:29 AM)

es9p_client: section 6.3.2.1, rename euiccCiPKIdToBeused to match SGP.32 V.1.2

Section 6.3.2.1: rename InitiateAuthenticationOkEsipa.euiccCiPKIdToBeused to InitiateAuthenticationOkEsipa.euiccCiPKIdentifierToBeUsed

Change-Id: I44c60a2f0d1129093ea67908d2eed167643a4a87
Related: SYS#8100
pmaier@sysmocom.de at

#26 (Jun 30, 2026, 10:10:29 AM)

esipa_asn1_handler: fix transactionId handling

The transactionId member is now called eimTransactionId. It is also
an optional member.

Change-Id: I1340e0c7aed091e8e5a5089ebd6e524512408cf7
Related: SYS#8100
pmaier@sysmocom.de at

#25 (Jun 30, 2026, 10:10:29 AM)

esipa_asn1_codec: add special handling for ProvideEimPackageResultResponse

In SGP.32 V.1.2 ProvideEimPackageResultResponse is defined as a CHOICE.
This means that this struct now also requires special handling.

Change-Id: I859a175cc28a18ea9334d9b2cf233294fdc95b76
Related: SYS#8100
pmaier@sysmocom.de at

#24 (Jun 30, 2026, 10:10:29 AM)

esipa_asn1_handler: re-align to SGP.32 section Section 2.11.2 and Section 5.14.6

Section 2.11.2: eIM package result (EuiccPackageResult case) is now concatenated with PendingNotificationList instead of RetrieveNotificationsListResponse
Section 5.14.6: ESipa.ProvideEimPackageResult: Significant change in parameters

Change-Id: Ic0872edefc1844166943c60528557c6b7a6602ce
Related: SYS#8100
pmaier@sysmocom.de at

#23 (Jun 30, 2026, 9:55:17 AM)

asn1/SGP32Definitions: apply workarounds

- Some ASN.1 structs from SGP.22 are re-defined under the same name by SGP.32.
  This leads to name clashes, which most ASN.1 compilers have problems with.
  Prefixing the re-defined struct in SGP.32 with "SGP32-" solves the problem.

- The erlang asn1ct ASN.1 compiler seems to misinterpret the ASN.1 spec when
  a context specific tag is used (redundently) on a child struct definition
  and in the parent definition at the same time. Removing te context specific
  tag on the child struct definition solves the problem.

Change-Id: Id90b005fc3c8c8f737b0c740d4c067f90842a1fe
Related: SYS#8100
pmaier@sysmocom.de at

#22 (Jun 30, 2026, 9:47:22 AM)

asn1/SGP32Definitions: upgrade ASN.1 spec to V.1.2

This replaces the existing SGP.32 V.1.0.1 ASN.1 spec with the
unmodified, official SGP.32 V.1.2 spec.

Unfortunately V.1.2 is not backward compatible to V.1.0.1. This means
that the eIM application will still compile, but the result will be
non-functional. The incompatibility problems will be addressed in
the follow-up patches of this patchset.

Change-Id: Id4d217296f43846aa39f5dc7076465e2dab72a7c
Related: SYS#8100
pmaier@sysmocom.de at

#21 (Jun 29, 2026, 9:59:32 AM)

contrib/jenkins: run 'rebar3 fmt --check'

The pull request "v0.0.2" had a patch that formatted everything with
erlfmt. Let's run it in CI to keep the style consistent.

Related: https://github.com/onomondo/onomondo-eim/pull/10/commits/8bafdb3839d868d6bc18499617761d9acd73d2ad
Change-Id: I271c90dace6e7b6f052b38054815e6dfcbfa60f5
Oliver Smith at

#20 (Jun 29, 2026, 9:59:31 AM)

src/utils.erl: format with erlfmt

Keep the file consistent with the rest of the codebase by running
'rebar3 fmt -w' on it.

Change-Id: I806c912a1bc82c26ecd23759a927f22328e743b9
Oliver Smith at

#19 (Jun 29, 2026, 9:55:40 AM)

contrib/jenkins: run 'rebar3 fmt --check'

The pull request "v0.0.2" had a patch that formatted everything with
erlfmt. Let's run it in CI to keep the style consistent.

Related: https://github.com/onomondo/onomondo-eim/pull/10/commits/8bafdb3839d868d6bc18499617761d9acd73d2ad
Change-Id: I271c90dace6e7b6f052b38054815e6dfcbfa60f5
Oliver Smith at

#18 (Jun 29, 2026, 9:53:15 AM)

contrib/jenkins: run 'rebar3 fmt --check'

The pull request "v0.0.2" had a patch that formatted everything with
erlfmt. Let's run it in CI to keep the style consistent.

Related: https://github.com/onomondo/onomondo-eim/pull/10/commits/8bafdb3839d868d6bc18499617761d9acd73d2ad
Change-Id: I271c90dace6e7b6f052b38054815e6dfcbfa60f5
Oliver Smith at

#17 (Jun 24, 2026, 9:27:36 AM)

rest_api_response_schema: add missing error codes

In SGP.32 V.1.2, new error codes were added to EnableProfileResult,
DisableProfileResult, DeleteProfileResult and AddEimResult

See also: SGP.32, section 2.11.2

Change-Id: I525ca9d3b7fb870405d374160272d8ec26c85880
Related: SYS#8100
pmaier@sysmocom.de at

#16 (Jun 24, 2026, 9:27:36 AM)

esipa_rest_utils: align IpaEuiccDataResponse to SGP.32 V.1.2

The ASN.1 struct IpaEuiccDataResponse has renamed the error code
member from ipaEuiccDataError to ipaEuiccDataErrorCode. The new
ipaEuiccDataErrorCode is a sequence that has an ipaEuiccDataErrorCode
member, which is the equivalent of the previously existing
ipaEuiccDataError member.

See also: SGP.32, section 2.11.2.2

Change-Id: Ie734a09ed4b0d57de30dc6fb377dfada79ea2ae4
Related: SYS#8100
pmaier@sysmocom.de at

#15 (Jun 24, 2026, 9:27:36 AM)

esipa_asn1_handler: fix transactionId handling

The transactionId member is now called eimTransactionId. It is also
an optional member.

Change-Id: I1340e0c7aed091e8e5a5089ebd6e524512408cf7
Related: SYS#8100
pmaier@sysmocom.de at

#14 (Jun 24, 2026, 9:27:36 AM)

rest_api: move "required" member to the correct level

In some locations in the JSON schema files we find the "required"
member on the same lavel as the "properties" (likewise "items")
members. This is incorrect, the "required" member should always be
on the same level as the "properties" member

(At the moment the JSON schema files serve only documentation purposes,
they are not used to do any actual validation yet.)

Change-Id: I07d51d0e809a718144bd51a6540ab51187bb4daa
Related: SYS#8100
pmaier@sysmocom.de at

#13 (Jun 24, 2026, 9:27:36 AM)

eim_cfg: set eimSupportedProtocol and indirectProfileDownload flags

The members eimSupportedProtocol and indirectProfileDownload were
added as optional members to EimConfigurationData with SGP.32 V.1.2.

Since our eIM implementation only supports eIM Package Retrieval via
HTTPs and the Indirect Profile Download procedure is the only Profile
Download procedure we currently support, the EimConfigurationData
should reflect those properties correctly.

(The EimConfigurationData is not announced actively by the eIM, but
this eIM implementation contains a generator to help with the encoding
of the EimConfigurationData that is programmed into the eUICC)

Change-Id: I4ce236fb1bfb8a3790191be95ab0958dce13a9d8
Related: SYS#8100
pmaier@sysmocom.de at

#12 (Jun 24, 2026, 9:27:36 AM)

esipa_rest_utils: re-align to SGP.32 Section 2.11.2

Section 2.11.2: rename EuiccPackageResultDataSigned.configureAutoEnableResult to EuiccPackageResultDataSigned.configureImmediateEnableResult

Change-Id: Ib4e6a4b4cb4d26a391346169b9047515496dd308
Related: SYS#8100
pmaier@sysmocom.de at

#11 (Jun 24, 2026, 9:27:36 AM)

esipa_asn1_handler: re-align to SGP.32 section Section 2.11.2 and Section 5.14.6

Section 2.11.2: eIM package result (EuiccPackageResult case) is now concatenated with PendingNotificationList instead of RetrieveNotificationsListResponse
Section 5.14.6: ESipa.ProvideEimPackageResult: Significant change in parameters

Change-Id: Ic0872edefc1844166943c60528557c6b7a6602ce
Related: SYS#8100
pmaier@sysmocom.de at

#10 (Jun 24, 2026, 9:27:36 AM)

es9p_client: section 6.3.2.1, rename euiccCiPKIdToBeused to match SGP.32 V.1.2

Section 6.3.2.1: rename InitiateAuthenticationOkEsipa.euiccCiPKIdToBeused to InitiateAuthenticationOkEsipa.euiccCiPKIdentifierToBeUsed

Change-Id: I44c60a2f0d1129093ea67908d2eed167643a4a87
Related: SYS#8100
pmaier@sysmocom.de at

#9 (Jun 24, 2026, 9:27:35 AM)

rest_api: revert json schema re-formatting

The JSON schema got reformatted in patch 78810e9d0e2c4fcfa0bff2e16aedd225c7145055,
however, the reformatted version now follows a scheme that is incompatible with
the emacs default settings. This makes it very hard to work with those files, so
let's revert this change.

Change-Id: I2361891875a8e190fff7003196c2df76fd877080
Related: SYS#8100
pmaier@sysmocom.de at

#8 (Jun 24, 2026, 9:27:35 AM)

esipa_asn1_codec: add special handling for ProvideEimPackageResultResponse

In SGP.32 V.1.2 ProvideEimPackageResultResponse is defined as a CHOICE.
This means that this struct now also requires special handling.

Change-Id: I859a175cc28a18ea9334d9b2cf233294fdc95b76
Related: SYS#8100
pmaier@sysmocom.de at

#7 (Jun 24, 2026, 9:27:35 AM)

esipa_rest_utils: add support for PSMOs added in SGP.32 V.1.2

SGP.32 adds 3 additional PSMOs:
- setFallbackAttribute
- unsetFallbackAttribute
- setDefaultDpAddress

Change-Id: I03cdd70065a83dfc611d614cf32d817c13fad347
Related: SYS#8100
pmaier@sysmocom.de at

#6 (Jun 23, 2026, 11:25:37 AM)

asn1/SGP32Definitions: apply workarounds

- Some ASN.1 structs from SGP.22 are re-defined under the same name by SGP.32.
  This leads to name clashes, which most ASN.1 compilers have problems with.
  Prefixing the re-defined struct in SGP.32 with "SGP32-" solves the problem.

- The erlang asn1ct ASN.1 compiler seems to misinterpret the ASN.1 spec when
  a context specific tag is used (redundently) on a child struct definition
  and in the parent definition at the same time. Removing te context specific
  tag on the child struct definition solves the problem.

Change-Id: Id90b005fc3c8c8f737b0c740d4c067f90842a1fe
Related: SYS#8100
pmaier@sysmocom.de at

#5 (Jun 23, 2026, 11:25:36 AM)

asn1/SGP32Definitions: upgrade ASN.1 spec to V.1.2

This replaces the existing SGP.32 V.1.0.1 ASN.1 spec with the
unmodified, official SGP.32 V.1.2 spec.

Unfortunately V.1.2 is not backward compatible to V.1.0.1. This means
that the eIM application will still compile, but the result will be
non-functional. The incompatibility problems will be addressed in
the follow-up patches of this patchset.

Change-Id: Id4d217296f43846aa39f5dc7076465e2dab72a7c
Related: SYS#8100
pmaier@sysmocom.de at

#4 (Jun 23, 2026, 11:14:31 AM)

contrib/jenkins: run 'rebar3 fmt --check'

The pull request "v0.0.2" had a patch that formatted everything with
erlfmt. Let's run it in CI to keep the style consistent.

Related: https://github.com/onomondo/onomondo-eim/pull/10/commits/8bafdb3839d868d6bc18499617761d9acd73d2ad
Change-Id: I271c90dace6e7b6f052b38054815e6dfcbfa60f5
Oliver Smith at

#3 (Jun 23, 2026, 10:44:36 AM)

certificates: fix certificate location, make sure cert/key files are readable

The certificate and key files are placed in the config directory. This is
an unfortunate location, since it causes a lot of trouble when referencing
those files.

The erlang documentation suggests to place so called auxillary files in a
"priv" directory on the same level as the config directory. The path to
the priv directory can then be located using code:priv_dir.

see also: https://www.erlang.org/docs/26/design_principles/applications.html

Let's adopt this mechanism by adding utility functions that allow us to
resolve the file paths to files inside the priv directory. Let's also
automatically check if the referenced file is readable, so that we get
a proper error in the log in case a certificate or key file is missing

Change-Id: Ie09d746a6e28ac6fee3e00dfa32cb01f8a7b947e
Related: SYS#7093
pmaier@sysmocom.de at

#2 (Jun 23, 2026, 10:38:56 AM)

esipa_rest_utils: fix searchCritera.profileClass type conversion

We currently use utils:hex_to_integer to convert the ProfileClass,
which is supposedly a string, to integer. However, hex_to_inteteger
does not exist and when looking into the related JSON schema
definition of we see that the profileClass member is already defined
as integer. This means that ProfileClass already arrives as integer
and can be used as it is. removing the hex_to_integer call solves
the problem.

Change-Id: I4bd223dbef00be9c800539b8d0dc9a84e3e93b73
pmaier@sysmocom.de at