Skip to content

Loading builds...

Changes

#186 (Jul 31, 2026, 9:52:09 AM)

esipa_rest_utils: use correct ASN.1 type for notificationsList

In SGP.32 V.1.0.1, the type for notificationsList is
SGP32-RetrieveNotificationsListResponse. With SGP.32 V.1.2, the
type is changed to PendingNotificationList

Related SYS#8100

Change-Id: I997b566bf8175a508b30b2696f845a09ba78f266
pmaier@sysmocom.de at

#185 (Jul 31, 2026, 9:52:09 AM)

rest_handler: add API versions and schema validation

The JSON based REST API currently has no version checking and also
does not use any JSON schema based validation yet. This patch adds
both. An X-ADMIN-PROTOCOL field in the HTTP header informs about
the API version (same style as the JSON interfaces defined in
GSMA SGP.32 and SGP.22 would use). For incoming messages, the
X-ADMIN-PROTOCOL field is checked to prevent outdated clients from
using the REST API.

The incoming and outgoing JSON messages are now validated against
JSON schema files. Those are the same JSON schema file which were
only provided for documentation purposes only before. Now those
files have been fixed up and moved to the priv directory, where
they are now actively used.

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

#184 (Jul 31, 2026, 9:52:09 AM)

onomondo_eim_app: unify HTTP/HTTPs server startup

The REST API also makes use of the cowboy HTTP server in the same
way as the ESipa API does when running without SSL/TLS. Let's unify
the code in such a way that both HTTP servers call the same startup
helper functions.

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

#183 (Jul 31, 2026, 9:52:08 AM)

esipa_asn1_handler_utils: use eimTransactionId in EuiccPackageErrorUnsigned

EuiccPackageErrorUnsigned contains an eimTransactionId, let's make sure that
it is used (if it is present).

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

#182 (Jul 31, 2026, 9:52:08 AM)

rest_handler, cosmetic: clean up order of variable assignments

We assign a couple of varibales before we output them to InfoList,
let's make sure the order is consistent with the order in InfoList.

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

#181 (Jul 31, 2026, 9:52:08 AM)

esipa_asn1_handler_utils: clean up handling of EuiccPackageResult

The function that handles the parsing and processing of the
EuiccPackageResult is written in a confusing way and also seems
to be slightly wrong (we do not want to re-bind any work item to a
eimTransactionId here). Let's clean it up in a way that is easier
to follow.

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

#180 (Jul 31, 2026, 9:52:08 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

#179 (Jul 31, 2026, 9:52:07 AM)

contrib: restructure REST API usage examples (tryme-scripts)

The so called tryme scripts are using a very clumsy method to set
the varying parameters (tryme.cfg). The files also mix with other
unrelated files in the contrib directory. There is also a lot of
distracting output displayed which complicates the usage of the
examples even further. This patch fixes those shortcomings.

- put everything related to the usage example into a dedicated
  directory.
- renovate restop.py so that it produces more readable output.
- in the tryme_*.sh scripts, avoid output that is not needed.
- cleanup tryme.cfg so that it only contains one set of parameters,
  add some helpful comments.
- add functionality to pass the the parameters either via
  commandline options or via tryme.cfg, add a parameter to point
  to an alternative .cfg file, so that users can use multiple
  different configurations.
- update documentation
- cleanup other minor inconsistencies

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

#178 (Jul 31, 2026, 9:21:53 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

#177 (Jul 31, 2026, 9:08:53 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

#176 (Jul 30, 2026, 4:13:32 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

#175 (Jul 30, 2026, 4:13:31 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

#174 (Jul 30, 2026, 4:13:31 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

#173 (Jul 30, 2026, 4:13:31 PM)

restop.py, tryme_*.sh: improve log output and handling

The tryme scripts and the restop.py script produce lots of
distracting and difficult to read log output. Let's renovate
the scripts a bit so that the useful information is displayed
in a readable way.

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

#172 (Jul 30, 2026, 4:13:31 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

#171 (Jul 30, 2026, 4:13:30 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

#170 (Jul 30, 2026, 4:13:30 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
Related: SYS#8100
pmaier@sysmocom.de at

#169 (Jul 30, 2026, 4:13:30 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
Related: SYS#8100
pmaier@sysmocom.de at

#168 (Jul 30, 2026, 4:13:30 PM)

rest_handler, cosmetic: clean up order of variable assignments

We assign a couple of varibales before we output them to InfoList,
let's make sure the order is consistent with the order in InfoList.

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

#167 (Jul 30, 2026, 4:13:30 PM)

esipa_asn1_handler_utils: use eimTransactionId in EuiccPackageErrorUnsigned

EuiccPackageErrorUnsigned contains an eimTransactionId, let's make sure that
it is used (if it is present).

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

#166 (Jul 30, 2026, 4:13:29 PM)

onomondo_eim_app: unify HTTP/HTTPs server startup

The REST API also makes use of the cowboy HTTP server in the same
way as the ESipa API does when running without SSL/TLS. Let's unify
the code in such a way that both HTTP servers call the same startup
helper functions.

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

#165 (Jul 30, 2026, 4:13:29 PM)

contrib: restructure REST API usage examples (tryme-scripts)

The so called tryme scripts are using a very clumsy method to set
the varying parameters (tryme.cfg). The files also mix with other
unrelated files in the contrib directory. This patch fixes those
shortcomings.

- put everything related to the usage example into a dedicated
  directory.
- cleanup tryme.cfg so that it only contains one set of parameters,
  add some helpful comments.
- add functionality to pass the the parameters either via
  commandline options or via tryme.cfg, add a parameter to point
  to an alternative .cfg file, so that users can use multiple
  different configurations.
- update documentation
- cleanup other minor inconsistencies

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

#164 (Jul 30, 2026, 4:13:29 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

#163 (Jul 30, 2026, 4:13:28 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

#162 (Jul 30, 2026, 4:13:28 PM)

esipa_asn1_handler_utils: clean up handling of EuiccPackageResult

The function that handles the parsing and processing of the
EuiccPackageResult is written in a confusing way and also seems
to be slightly wrong (we do not want to re-bind any work item to a
eimTransactionId here). Let's clean it up in a way that is easier
to follow.

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

#161 (Jul 30, 2026, 4:13:28 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

#160 (Jul 30, 2026, 4:13:28 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

#159 (Jul 30, 2026, 4:13:28 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

#158 (Jul 30, 2026, 4:13:28 PM)

esipa_rest_utils: use correct ASN.1 type for notificationsList

In SGP.32 V.1.0.1, the type for notificationsList is
SGP32-RetrieveNotificationsListResponse. With SGP.32 V.1.2, the
type is changed to PendingNotificationList

Related SYS#8100

Change-Id: I997b566bf8175a508b30b2696f845a09ba78f266
pmaier@sysmocom.de at

#157 (Jul 30, 2026, 4:13:27 PM)

rest_handler: add API versions and schema validation

The JSON based REST API currently has no version checking and also
does not use any JSON schema based validation yet. This patch adds
both. An X-ADMIN-PROTOCOL field in the HTTP header informs about
the API version (same style as the JSON interfaces defined in
GSMA SGP.32 and SGP.22 would use). For incoming messages, the
X-ADMIN-PROTOCOL field is checked to prevent outdated clients from
using the REST API.

The incoming and outgoing JSON messages are now validated against
JSON schema files. Those are the same JSON schema file which were
only provided for documentation purposes only before. Now those
files have been fixed up and moved to the priv directory, where
they are now actively used.

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

#156 (Jul 30, 2026, 4:13:26 PM)

esipa_asn1_handler: store IPAd stateChangeCause

The IPAd may pass a notifyStateChange and a stateChangeCause code.
The notifyStateChange flag tells that a state change happened and
the stateChangeCause code tells what the cause was.

let's store the stateChangeCause code as a state in the euicc
table, so that the REST API user can poll for stateChangeCause
codes in suitable intervals.

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

#155 (Jul 30, 2026, 4:13:26 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

#154 (Jul 30, 2026, 4:13:24 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.

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

#153 (Jul 28, 2026, 2:38:40 PM)

Add missing depenency 'jsx'

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

#152 (Jul 28, 2026, 2:38:40 PM)

Integrate 'rebar3 get-deps' into Makefile

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

#151 (Jul 23, 2026, 2:11:03 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

#150 (Jul 23, 2026, 2:11:03 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

#149 (Jul 23, 2026, 2:11:03 PM)

esipa_asn1_handler_utils: use eimTransactionId in EuiccPackageErrorUnsigned

EuiccPackageErrorUnsigned contains an eimTransactionId, let's make sure that
it is used (if it is present).

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

#148 (Jul 23, 2026, 2:11:02 PM)

esipa_asn1_handler_utils: clean up handling of EuiccPackageResult

The function that handles the parsing and processing of the
EuiccPackageResult is written in a confusing way and also seems
to be slightly wrong (we do not want to re-bind any work item to a
eimTransactionId here). Let's clean it up in a way that is easier
to follow.

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

#147 (Jul 23, 2026, 2:11:02 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

#146 (Jul 23, 2026, 2:11:02 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

#145 (Jul 23, 2026, 2:11:02 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

#144 (Jul 23, 2026, 2:11:02 PM)

esipa_middleware: log incompatible requests

The esipa_middleware filters incompatible requests by their protocol
version (X-ADMIN-PROTOCOL), but there is no error logged in that
case. Let's make sure that incompatible requests are brought to the
operator's attention.

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

#143 (Jul 23, 2026, 2:11:02 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.

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

#142 (Jul 23, 2026, 2:11:01 PM)

restop.py, tryme_*.sh: improve log output and handling

The tryme scripts and the restop.py script produce lots of
distracting and difficult to read log output. Let's renovate
the scripts a bit so that the useful information is displayed
in a readable way.

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

#141 (Jul 23, 2026, 2:11:01 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

#140 (Jul 23, 2026, 2:11:01 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
Related: SYS#8100
pmaier@sysmocom.de at

#139 (Jul 23, 2026, 2:11:01 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

#138 (Jul 23, 2026, 2:11:00 PM)

esipa_rest_utils: use correct ASN.1 type for notificationsList

In SGP.32 V.1.0.1, the type for notificationsList is
SGP32-RetrieveNotificationsListResponse. With SGP.32 V.1.2, the
type is changed to PendingNotificationList

Related SYS#8100

Change-Id: I997b566bf8175a508b30b2696f845a09ba78f266
pmaier@sysmocom.de at

#137 (Jul 23, 2026, 2:11:00 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

#136 (Jul 23, 2026, 2:11:00 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

#135 (Jul 23, 2026, 2:11:00 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
Related: SYS#8100
pmaier@sysmocom.de at

#134 (Jul 23, 2026, 2:10:59 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

#133 (Jul 23, 2026, 2:10:59 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

#132 (Jul 23, 2026, 2:10:59 PM)

esipa_asn1_handler: store IPAd stateChangeCause

The IPAd may pass a notifyStateChange and a stateChangeCause code.
The notifyStateChange flag tells that a state change happened and
the stateChangeCause code tells what the cause was.

let's store the stateChangeCause code as a state in the euicc
table, so that the REST API user can poll for stateChangeCause
codes in suitable intervals.

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

#131 (Jul 21, 2026, 1:46:43 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

#130 (Jul 21, 2026, 1:46:43 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

#129 (Jul 21, 2026, 1:46:43 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

#128 (Jul 21, 2026, 1:46:43 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
Related: SYS#8100
pmaier@sysmocom.de at

#127 (Jul 21, 2026, 1:46:42 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

#126 (Jul 21, 2026, 1:46:42 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

#125 (Jul 21, 2026, 1:46:42 PM)

rest_handler: add API versions and schema validation

The JSON based REST API currently has no version checking and also
does not use any JSON schema based validation yet. This patch adds
both. An X-ADMIN-PROTOCOL field in the HTTP header informs about
the API version (same style as the JSON interfaces defined in
GSMA SGP.32 and SGP.22 would use). For incoming messages, the
X-ADMIN-PROTOCOL field is checked to prevent outdated clients from
using the REST API.

The incoming and outgoing JSON messages are now validated against
JSON schema files. Those are the same JSON schema file which were
only provided for documentation purposes only before. Now those
files have been fixed up and moved to the priv directory, where
they are now actively used.

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

#124 (Jul 21, 2026, 1:46:42 PM)

esipa_asn1_handler: store IPAd stateChangeCause

The IPAd may pass a notifyStateChange and a stateChangeCause code.
The notifyStateChange flag tells that a state change happened and
the stateChangeCause code tells what the cause was.

let's store the stateChangeCause code as a state in the euicc
table, so that the REST API user can poll for stateChangeCause
codes in suitable intervals.

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

#123 (Jul 21, 2026, 1:46:42 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
Related: SYS#8100
pmaier@sysmocom.de at

#122 (Jul 21, 2026, 1:46:42 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

#121 (Jul 21, 2026, 1:46:41 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)

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

#120 (Jul 21, 2026, 1:46:41 PM)

rest_handler, cosmetic: clean up order of variable assignments

We assign a couple of varibales before we output them to InfoList,
let's make sure the order is consistent with the order in InfoList.

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

#119 (Jul 21, 2026, 1:46:41 PM)

esipa_middleware: log incompatible requests

The esipa_middleware filters incompatible requests by their protocol
version (X-ADMIN-PROTOCOL), but there is no error logged in that
case. Let's make sure that incompatible requests are brought to the
operator's attention.

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

#118 (Jul 21, 2026, 1:46:41 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

#117 (Jul 21, 2026, 1:46:41 PM)

esipa_asn1_handler_utils: use eimTransactionId in EuiccPackageErrorUnsigned

EuiccPackageErrorUnsigned contains an eimTransactionId, let's make sure that
it is used (if it is present).

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

#116 (Jul 21, 2026, 1:46:41 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

#115 (Jul 21, 2026, 1:46:41 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

#114 (Jul 21, 2026, 1:46:41 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

#113 (Jul 21, 2026, 1:46:40 PM)

restop.py, tryme_*.sh: improve log output and handling

The tryme scripts and the restop.py script produce lots of
distracting and difficult to read log output. Let's renovate
the scripts a bit so that the useful information is displayed
in a readable way.

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

#112 (Jul 21, 2026, 1:46:40 PM)

esipa_asn1_handler_utils: clean up handling of EuiccPackageResult

The function that handles the parsing and processing of the
EuiccPackageResult is written in a confusing way and also seems
to be slightly wrong (we do not want to re-bind any work item to a
eimTransactionId here). Let's clean it up in a way that is easier
to follow.

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

#111 (Jul 21, 2026, 1:46:40 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

#110 (Jul 21, 2026, 1:46:40 PM)

onomondo_eim_app: unify HTTP/HTTPs server startup

The REST API also makes use of the cowboy HTTP server in the same
way as the ESipa API does when running without SSL/TLS. Let's unify
the code in such a way that both HTTP servers call the same startup
helper functions.

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

#109 (Jul 15, 2026, 3:52:29 PM)

esipa_asn1_handler_utils: use eimTransactionId in EuiccPackageErrorUnsigned

EuiccPackageErrorUnsigned contains an eimTransactionId, let's make sure that
it is used (if it is present).

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

#108 (Jul 15, 2026, 3:52:28 PM)

esipa_asn1_handler_utils: clean up handling of EuiccPackageResult

The function that handles the parsing and processing of the
EuiccPackageResult is written in a confusing way and also seems
to be slightly wrong (we do not want to re-bind any work item to a
eimTransactionId here). Let's clean it up in a way that is easier
to follow.

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

#107 (Jul 15, 2026, 11:18:58 AM)

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.

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

#106 (Jul 15, 2026, 11:18:58 AM)

doc/build.md: fix typo

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

#105 (Jul 15, 2026, 11:18:58 AM)

restop.py, tryme_*.sh: improve log output and handling

The tryme scripts and the restop.py script produce lots of
distracting and difficult to read log output. Let's renovate
the scripts a bit so that the useful information is displayed
in a readable way.

Change-Id: I7fe40e7ed50354114e80cd96a5b40f3e579220e9
Related SYS#8100

Change-Id: Id257e7a541fc92386cecee5af3dad2077b62709c
pmaier@sysmocom.de at

#104 (Jul 15, 2026, 11:18:58 AM)

esipa_asn1_handler: store IPAd stateChangeCause

The IPAd may pass a notifyStateChange and a stateChangeCause code.
The notifyStateChange flag tells that a state change happened and
the stateChangeCause code tells what the cause was.

let's store the stateChangeCause code as a state in the euicc
table, so that the REST API user can poll for stateChangeCause
codes in suitable intervals.

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

#103 (Jul 14, 2026, 3:33:33 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

#102 (Jul 14, 2026, 3:33:33 PM)

doc/build.md: fix typo

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

#101 (Jul 14, 2026, 3:33:33 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

#100 (Jul 14, 2026, 3:33:33 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.

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

#99 (Jul 14, 2026, 3:33:33 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

#98 (Jul 14, 2026, 3:33:33 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

#97 (Jul 14, 2026, 3:33:32 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

#96 (Jul 14, 2026, 3:33:32 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

#95 (Jul 14, 2026, 3:33:32 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

#94 (Jul 14, 2026, 3:33:32 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

#93 (Jul 14, 2026, 3:33:32 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

#92 (Jul 14, 2026, 3:33:32 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

#91 (Jul 14, 2026, 3:33:32 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

#90 (Jul 14, 2026, 3:33:32 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

#89 (Jul 14, 2026, 3:33:32 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

#88 (Jul 14, 2026, 3:33:31 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

#87 (Jul 14, 2026, 10:57:23 AM)

contrib/onomondo-eim.sh: add option to set a mnesia dir

The onomondo-eim.sh startscript we provide in the contrib directory
does not set the "mnesia dir" parameter when starting the erlang VM.
Let's add a commandline parameter and a default location to the
script.

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

#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