<matrixBuild _class='hudson.matrix.MatrixBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='hudson.model.ParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>651171</blockedDurationMillis><blockedTimeMillis>651171</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>932469</buildingDurationMillis><executingTimeMillis>932469</executingTimeMillis><executorUtilization>1.0</executorUtilization><queuingDurationMillis>660278</queuingDurationMillis><queuingTimeMillis>660278</queuingTimeMillis><subTaskCount>0</subTaskCount><totalDurationMillis>1592747</totalDurationMillis><waitingDurationMillis>9102</waitingDurationMillis><waitingTimeMillis>9102</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginpmaierfixgr _class='hudson.plugins.git.util.Build'><buildNumber>2045</buildNumber><marked><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></marked><revision><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></revision></refsremotesoriginpmaierfixgr><refsremotesoriginpmaierrcp _class='hudson.plugins.git.util.Build'><buildNumber>2131</buildNumber><marked><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></marked><revision><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></revision></refsremotesoriginpmaierrcp><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>2190</buildNumber><marked><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></marked><revision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></revision></originmaster><refsremotesoriginpmaierara-m _class='hudson.plugins.git.util.Build'><buildNumber>1320</buildNumber><marked><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></marked><revision><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></revision></refsremotesoriginpmaierara-m><refsremotesoriginpmaierkeepfiles _class='hudson.plugins.git.util.Build'><buildNumber>1353</buildNumber><marked><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></marked><revision><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></revision></refsremotesoriginpmaierkeepfiles><refsremotesoriginpmaierfixapdu _class='hudson.plugins.git.util.Build'><buildNumber>1421</buildNumber><marked><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></marked><revision><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></revision></refsremotesoriginpmaierfixapdu><refsremotesoriginpmaieraramtest _class='hudson.plugins.git.util.Build'><buildNumber>1467</buildNumber><marked><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></marked><revision><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></revision></refsremotesoriginpmaieraramtest><refsremotesoriginosmithwip _class='hudson.plugins.git.util.Build'><buildNumber>1816</buildNumber><marked><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></marked><revision><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></revision></refsremotesoriginosmithwip><refsremotesoriginpmaierotatest _class='hudson.plugins.git.util.Build'><buildNumber>2022</buildNumber><marked><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></marked><revision><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></revision></refsremotesoriginpmaierotatest><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>402</buildNumber><marked><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/2190/artifact</artifactsUrl><changesUrl>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/changes</changesUrl><displayUrl>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/2190/</displayUrl><testsUrl>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/2190/testReport</testsUrl></action><building>false</building><displayName>#2190</displayName><duration>932469</duration><estimatedDuration>941466</estimatedDuration><fullDisplayName>master-pysim #2190</fullDisplayName><id>2190</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2190</number><queueId>149480</queueId><result>SUCCESS</result><timestamp>1782116460649</timestamp><url>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/2190/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</commitId><timestamp>1781988126000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use random.SystemRandom as random nr source

Python's random module uses a PRNG (Mersenne Twister) which is
utterly insecure for key generation - it was so far only used for
testing.  Replace it with random.SystemRandom(), which draws from
/dev/urandom and is suitable for generating cryptographic key material.

Change-Id: I6de38c14ac6dd55bc84d53974192509c18d02bfa
Jenkins: skip-card-test
</comment><date>2026-06-21 03:42:06 +0700</date><id>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</id><msg>param_source: use random.SystemRandom as random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>aad92f2b73ce7742c4aa1191d6984261d2eaecee</commitId><timestamp>1781988371000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use secrets.SystemRandom as secure random nr source

secrets.SystemRandom is defined as the most secure random source
available on the given operating system.

Change-Id: I8049cd1292674b3ced82b0926569128535af6efe
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:11 +0700</date><id>aad92f2b73ce7742c4aa1191d6984261d2eaecee</id><msg>param_source: use secrets.SystemRandom as secure random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>saip/param_source: try to not repeat random values

Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</id><msg>saip/param_source: try to not repeat random values</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/unittests/test_esim_saip.py</affectedPath><affectedPath>tests/unittests/test_configurable_parameters.py</affectedPath><affectedPath>tests/unittests/xo/test_configurable_parameters</affectedPath><affectedPath>pyproject.toml</affectedPath><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>e9ff4f3b93c173fb8c619452636a2b6f8314c927</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>personalization: generate sdkey classes from a list

Change-Id: Ic92ddea6e1fad8167ea75baf78ffc3eb419838c4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>e9ff4f3b93c173fb8c619452636a2b6f8314c927</id><msg>personalization: generate sdkey classes from a list</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path><path><editType>edit</editType><file>tests/unittests/test_configurable_parameters.py</file></path><path><editType>edit</editType><file>pyproject.toml</file></path><path><editType>edit</editType><file>tests/unittests/xo/test_configurable_parameters</file></path><path><editType>edit</editType><file>tests/unittests/test_esim_saip.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/batch.py</affectedPath><commitId>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>UppAudit: better indicate exception cause

Change-Id: I4d986b89a473a5b12ed56b4710263b034876a33e
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</id><msg>UppAudit: better indicate exception cause</msg><path><editType>edit</editType><file>pySim/esim/saip/batch.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>c5e7e599282891412868d57ba0ad186c633fafb5</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>ConfigurableParameter: safer val length check

validate_val() calls len() to check the value against allow_len,
min_len and max_len. len() requires the object to have a __len__()
method, which integers do not — calling len() on an int raises
TypeError.

Fix this by checking for __len__ first: if present, use len(val) as
usual; otherwise fall back to len(str(val)), which gives the number
of decimal digits for integer values.

Change-Id: Ibe91722ed1477b00d20ef5e4e7abd9068ff2f3e4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>c5e7e599282891412868d57ba0ad186c633fafb5</id><msg>ConfigurableParameter: safer val length check</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><description></description><fullName>Vadim Yanitskiy</fullName><id>fixeria</id></culprit><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "master-pysim" build number 2,190</shortDescription><upstreamBuild>2190</upstreamBuild><upstreamProject>master-pysim</upstreamProject><upstreamUrl>job/master-pysim/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>1</buildableDurationMillis><buildableTimeMillis>1</buildableTimeMillis><buildingDurationMillis>931485</buildingDurationMillis><executingTimeMillis>931485</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginpmaierrcp _class='hudson.plugins.git.util.Build'><buildNumber>2131</buildNumber><marked><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></marked><revision><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></revision></refsremotesoriginpmaierrcp><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>2190</buildNumber><marked><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></marked><revision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></revision></originmaster></buildsByBranchName><lastBuiltRevision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2190</displayName><duration>931485</duration><estimatedDuration>939221</estimatedDuration><fullDisplayName>master-pysim » card-test,a1=default,a3=default,a4=default,simtester #2190</fullDisplayName><id>2190</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2190</number><queueId>149486</queueId><result>SUCCESS</result><timestamp>1782116460649</timestamp><url>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/JOB_TYPE=card-test,a1=default,a3=default,a4=default,label=simtester/2190/</url><builtOn>simtester</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</commitId><timestamp>1781988126000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use random.SystemRandom as random nr source

Python's random module uses a PRNG (Mersenne Twister) which is
utterly insecure for key generation - it was so far only used for
testing.  Replace it with random.SystemRandom(), which draws from
/dev/urandom and is suitable for generating cryptographic key material.

Change-Id: I6de38c14ac6dd55bc84d53974192509c18d02bfa
Jenkins: skip-card-test
</comment><date>2026-06-21 03:42:06 +0700</date><id>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</id><msg>param_source: use random.SystemRandom as random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>aad92f2b73ce7742c4aa1191d6984261d2eaecee</commitId><timestamp>1781988371000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use secrets.SystemRandom as secure random nr source

secrets.SystemRandom is defined as the most secure random source
available on the given operating system.

Change-Id: I8049cd1292674b3ced82b0926569128535af6efe
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:11 +0700</date><id>aad92f2b73ce7742c4aa1191d6984261d2eaecee</id><msg>param_source: use secrets.SystemRandom as secure random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>saip/param_source: try to not repeat random values

Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</id><msg>saip/param_source: try to not repeat random values</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/unittests/test_esim_saip.py</affectedPath><affectedPath>tests/unittests/test_configurable_parameters.py</affectedPath><affectedPath>tests/unittests/xo/test_configurable_parameters</affectedPath><affectedPath>pyproject.toml</affectedPath><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>e9ff4f3b93c173fb8c619452636a2b6f8314c927</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>personalization: generate sdkey classes from a list

Change-Id: Ic92ddea6e1fad8167ea75baf78ffc3eb419838c4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>e9ff4f3b93c173fb8c619452636a2b6f8314c927</id><msg>personalization: generate sdkey classes from a list</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path><path><editType>edit</editType><file>pyproject.toml</file></path><path><editType>edit</editType><file>tests/unittests/xo/test_configurable_parameters</file></path><path><editType>edit</editType><file>tests/unittests/test_esim_saip.py</file></path><path><editType>edit</editType><file>tests/unittests/test_configurable_parameters.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/batch.py</affectedPath><commitId>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>UppAudit: better indicate exception cause

Change-Id: I4d986b89a473a5b12ed56b4710263b034876a33e
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</id><msg>UppAudit: better indicate exception cause</msg><path><editType>edit</editType><file>pySim/esim/saip/batch.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>c5e7e599282891412868d57ba0ad186c633fafb5</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>ConfigurableParameter: safer val length check

validate_val() calls len() to check the value against allow_len,
min_len and max_len. len() requires the object to have a __len__()
method, which integers do not — calling len() on an int raises
TypeError.

Fix this by checking for __len__ first: if present, use len(val) as
usual; otherwise fall back to len(str(val)), which gives the number
of decimal digits for integer values.

Change-Id: Ibe91722ed1477b00d20ef5e4e7abd9068ff2f3e4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>c5e7e599282891412868d57ba0ad186c633fafb5</id><msg>ConfigurableParameter: safer val length check</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></culprit></run><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "master-pysim" build number 2,190</shortDescription><upstreamBuild>2190</upstreamBuild><upstreamProject>master-pysim</upstreamProject><upstreamUrl>job/master-pysim/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>10035</buildingDurationMillis><executingTimeMillis>10035</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginpmaierrcp _class='hudson.plugins.git.util.Build'><buildNumber>2131</buildNumber><marked><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></marked><revision><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></revision></refsremotesoriginpmaierrcp><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>2190</buildNumber><marked><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></marked><revision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></revision></originmaster></buildsByBranchName><lastBuiltRevision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2190</displayName><duration>10035</duration><estimatedDuration>10674</estimatedDuration><fullDisplayName>master-pysim » distcheck,a1=default,a3=default,a4=default,osmocom-master #2190</fullDisplayName><id>2190</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2190</number><queueId>149485</queueId><result>SUCCESS</result><timestamp>1782116460649</timestamp><url>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/JOB_TYPE=distcheck,a1=default,a3=default,a4=default,label=osmocom-master/2190/</url><builtOn>build4-deb12build-ansible</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</commitId><timestamp>1781988126000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use random.SystemRandom as random nr source

Python's random module uses a PRNG (Mersenne Twister) which is
utterly insecure for key generation - it was so far only used for
testing.  Replace it with random.SystemRandom(), which draws from
/dev/urandom and is suitable for generating cryptographic key material.

Change-Id: I6de38c14ac6dd55bc84d53974192509c18d02bfa
Jenkins: skip-card-test
</comment><date>2026-06-21 03:42:06 +0700</date><id>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</id><msg>param_source: use random.SystemRandom as random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>aad92f2b73ce7742c4aa1191d6984261d2eaecee</commitId><timestamp>1781988371000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use secrets.SystemRandom as secure random nr source

secrets.SystemRandom is defined as the most secure random source
available on the given operating system.

Change-Id: I8049cd1292674b3ced82b0926569128535af6efe
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:11 +0700</date><id>aad92f2b73ce7742c4aa1191d6984261d2eaecee</id><msg>param_source: use secrets.SystemRandom as secure random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>saip/param_source: try to not repeat random values

Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</id><msg>saip/param_source: try to not repeat random values</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/unittests/test_esim_saip.py</affectedPath><affectedPath>tests/unittests/test_configurable_parameters.py</affectedPath><affectedPath>tests/unittests/xo/test_configurable_parameters</affectedPath><affectedPath>pyproject.toml</affectedPath><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>e9ff4f3b93c173fb8c619452636a2b6f8314c927</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>personalization: generate sdkey classes from a list

Change-Id: Ic92ddea6e1fad8167ea75baf78ffc3eb419838c4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>e9ff4f3b93c173fb8c619452636a2b6f8314c927</id><msg>personalization: generate sdkey classes from a list</msg><path><editType>edit</editType><file>tests/unittests/xo/test_configurable_parameters</file></path><path><editType>edit</editType><file>tests/unittests/test_configurable_parameters.py</file></path><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path><path><editType>edit</editType><file>tests/unittests/test_esim_saip.py</file></path><path><editType>edit</editType><file>pyproject.toml</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/batch.py</affectedPath><commitId>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>UppAudit: better indicate exception cause

Change-Id: I4d986b89a473a5b12ed56b4710263b034876a33e
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</id><msg>UppAudit: better indicate exception cause</msg><path><editType>edit</editType><file>pySim/esim/saip/batch.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>c5e7e599282891412868d57ba0ad186c633fafb5</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>ConfigurableParameter: safer val length check

validate_val() calls len() to check the value against allow_len,
min_len and max_len. len() requires the object to have a __len__()
method, which integers do not — calling len() on an int raises
TypeError.

Fix this by checking for __len__ first: if present, use len(val) as
usual; otherwise fall back to len(str(val)), which gives the number
of decimal digits for integer values.

Change-Id: Ibe91722ed1477b00d20ef5e4e7abd9068ff2f3e4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>c5e7e599282891412868d57ba0ad186c633fafb5</id><msg>ConfigurableParameter: safer val length check</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></culprit></run><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "master-pysim" build number 2,190</shortDescription><upstreamBuild>2190</upstreamBuild><upstreamProject>master-pysim</upstreamProject><upstreamUrl>job/master-pysim/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>25905</buildingDurationMillis><executingTimeMillis>25905</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginpmaierfixgr _class='hudson.plugins.git.util.Build'><buildNumber>2045</buildNumber><marked><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></marked><revision><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></revision></refsremotesoriginpmaierfixgr><refsremotesoriginpmaierrcp _class='hudson.plugins.git.util.Build'><buildNumber>2131</buildNumber><marked><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></marked><revision><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></revision></refsremotesoriginpmaierrcp><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>2190</buildNumber><marked><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></marked><revision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></revision></originmaster><refsremotesoriginpmaierara-m _class='hudson.plugins.git.util.Build'><buildNumber>1320</buildNumber><marked><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></marked><revision><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></revision></refsremotesoriginpmaierara-m><refsremotesoriginpmaierkeepfiles _class='hudson.plugins.git.util.Build'><buildNumber>1353</buildNumber><marked><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></marked><revision><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></revision></refsremotesoriginpmaierkeepfiles><refsremotesoriginpmaierfixapdu _class='hudson.plugins.git.util.Build'><buildNumber>1421</buildNumber><marked><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></marked><revision><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></revision></refsremotesoriginpmaierfixapdu><refsremotesoriginpmaieraramtest _class='hudson.plugins.git.util.Build'><buildNumber>1467</buildNumber><marked><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></marked><revision><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></revision></refsremotesoriginpmaieraramtest><refsremotesoriginosmithwip _class='hudson.plugins.git.util.Build'><buildNumber>1816</buildNumber><marked><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></marked><revision><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></revision></refsremotesoriginosmithwip><refsremotesoriginpmaierotatest _class='hudson.plugins.git.util.Build'><buildNumber>2022</buildNumber><marked><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></marked><revision><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></revision></refsremotesoriginpmaierotatest><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>402</buildNumber><marked><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2190</displayName><duration>25905</duration><estimatedDuration>26714</estimatedDuration><fullDisplayName>master-pysim » docs,a1=default,a3=default,a4=default,osmocom-master #2190</fullDisplayName><id>2190</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2190</number><queueId>149487</queueId><result>SUCCESS</result><timestamp>1782116460649</timestamp><url>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/JOB_TYPE=docs,a1=default,a3=default,a4=default,label=osmocom-master/2190/</url><builtOn>build5-deb12build-ansible</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</commitId><timestamp>1781988126000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use random.SystemRandom as random nr source

Python's random module uses a PRNG (Mersenne Twister) which is
utterly insecure for key generation - it was so far only used for
testing.  Replace it with random.SystemRandom(), which draws from
/dev/urandom and is suitable for generating cryptographic key material.

Change-Id: I6de38c14ac6dd55bc84d53974192509c18d02bfa
Jenkins: skip-card-test
</comment><date>2026-06-21 03:42:06 +0700</date><id>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</id><msg>param_source: use random.SystemRandom as random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>aad92f2b73ce7742c4aa1191d6984261d2eaecee</commitId><timestamp>1781988371000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use secrets.SystemRandom as secure random nr source

secrets.SystemRandom is defined as the most secure random source
available on the given operating system.

Change-Id: I8049cd1292674b3ced82b0926569128535af6efe
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:11 +0700</date><id>aad92f2b73ce7742c4aa1191d6984261d2eaecee</id><msg>param_source: use secrets.SystemRandom as secure random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>saip/param_source: try to not repeat random values

Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</id><msg>saip/param_source: try to not repeat random values</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/unittests/test_esim_saip.py</affectedPath><affectedPath>tests/unittests/test_configurable_parameters.py</affectedPath><affectedPath>tests/unittests/xo/test_configurable_parameters</affectedPath><affectedPath>pyproject.toml</affectedPath><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>e9ff4f3b93c173fb8c619452636a2b6f8314c927</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>personalization: generate sdkey classes from a list

Change-Id: Ic92ddea6e1fad8167ea75baf78ffc3eb419838c4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>e9ff4f3b93c173fb8c619452636a2b6f8314c927</id><msg>personalization: generate sdkey classes from a list</msg><path><editType>edit</editType><file>pyproject.toml</file></path><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path><path><editType>edit</editType><file>tests/unittests/test_esim_saip.py</file></path><path><editType>edit</editType><file>tests/unittests/xo/test_configurable_parameters</file></path><path><editType>edit</editType><file>tests/unittests/test_configurable_parameters.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/batch.py</affectedPath><commitId>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>UppAudit: better indicate exception cause

Change-Id: I4d986b89a473a5b12ed56b4710263b034876a33e
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</id><msg>UppAudit: better indicate exception cause</msg><path><editType>edit</editType><file>pySim/esim/saip/batch.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>c5e7e599282891412868d57ba0ad186c633fafb5</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>ConfigurableParameter: safer val length check

validate_val() calls len() to check the value against allow_len,
min_len and max_len. len() requires the object to have a __len__()
method, which integers do not — calling len() on an int raises
TypeError.

Fix this by checking for __len__ first: if present, use len(val) as
usual; otherwise fall back to len(str(val)), which gives the number
of decimal digits for integer values.

Change-Id: Ibe91722ed1477b00d20ef5e4e7abd9068ff2f3e4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>c5e7e599282891412868d57ba0ad186c633fafb5</id><msg>ConfigurableParameter: safer val length check</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></culprit></run><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "master-pysim" build number 2,190</shortDescription><upstreamBuild>2190</upstreamBuild><upstreamProject>master-pysim</upstreamProject><upstreamUrl>job/master-pysim/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>11668</buildingDurationMillis><executingTimeMillis>11668</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginpmaierfixgr _class='hudson.plugins.git.util.Build'><buildNumber>2045</buildNumber><marked><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></marked><revision><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></revision></refsremotesoriginpmaierfixgr><refsremotesoriginpmaierrcp _class='hudson.plugins.git.util.Build'><buildNumber>2131</buildNumber><marked><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></marked><revision><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></revision></refsremotesoriginpmaierrcp><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>2190</buildNumber><marked><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></marked><revision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></revision></originmaster><refsremotesoriginpmaierara-m _class='hudson.plugins.git.util.Build'><buildNumber>1320</buildNumber><marked><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></marked><revision><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></revision></refsremotesoriginpmaierara-m><refsremotesoriginpmaierkeepfiles _class='hudson.plugins.git.util.Build'><buildNumber>1353</buildNumber><marked><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></marked><revision><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></revision></refsremotesoriginpmaierkeepfiles><refsremotesoriginpmaierfixapdu _class='hudson.plugins.git.util.Build'><buildNumber>1421</buildNumber><marked><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></marked><revision><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></revision></refsremotesoriginpmaierfixapdu><refsremotesoriginpmaieraramtest _class='hudson.plugins.git.util.Build'><buildNumber>1467</buildNumber><marked><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></marked><revision><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></revision></refsremotesoriginpmaieraramtest><refsremotesoriginosmithwip _class='hudson.plugins.git.util.Build'><buildNumber>1816</buildNumber><marked><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></marked><revision><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></revision></refsremotesoriginosmithwip><refsremotesoriginpmaierotatest _class='hudson.plugins.git.util.Build'><buildNumber>2022</buildNumber><marked><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></marked><revision><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></revision></refsremotesoriginpmaierotatest><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>402</buildNumber><marked><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2190</displayName><duration>11668</duration><estimatedDuration>12528</estimatedDuration><fullDisplayName>master-pysim » pylint,a1=default,a3=default,a4=default,osmocom-master #2190</fullDisplayName><id>2190</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2190</number><queueId>149488</queueId><result>SUCCESS</result><timestamp>1782116460649</timestamp><url>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/JOB_TYPE=pylint,a1=default,a3=default,a4=default,label=osmocom-master/2190/</url><builtOn>build4-deb12build-ansible</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</commitId><timestamp>1781988126000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use random.SystemRandom as random nr source

Python's random module uses a PRNG (Mersenne Twister) which is
utterly insecure for key generation - it was so far only used for
testing.  Replace it with random.SystemRandom(), which draws from
/dev/urandom and is suitable for generating cryptographic key material.

Change-Id: I6de38c14ac6dd55bc84d53974192509c18d02bfa
Jenkins: skip-card-test
</comment><date>2026-06-21 03:42:06 +0700</date><id>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</id><msg>param_source: use random.SystemRandom as random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>aad92f2b73ce7742c4aa1191d6984261d2eaecee</commitId><timestamp>1781988371000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use secrets.SystemRandom as secure random nr source

secrets.SystemRandom is defined as the most secure random source
available on the given operating system.

Change-Id: I8049cd1292674b3ced82b0926569128535af6efe
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:11 +0700</date><id>aad92f2b73ce7742c4aa1191d6984261d2eaecee</id><msg>param_source: use secrets.SystemRandom as secure random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>saip/param_source: try to not repeat random values

Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</id><msg>saip/param_source: try to not repeat random values</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/unittests/test_esim_saip.py</affectedPath><affectedPath>tests/unittests/test_configurable_parameters.py</affectedPath><affectedPath>tests/unittests/xo/test_configurable_parameters</affectedPath><affectedPath>pyproject.toml</affectedPath><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>e9ff4f3b93c173fb8c619452636a2b6f8314c927</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>personalization: generate sdkey classes from a list

Change-Id: Ic92ddea6e1fad8167ea75baf78ffc3eb419838c4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>e9ff4f3b93c173fb8c619452636a2b6f8314c927</id><msg>personalization: generate sdkey classes from a list</msg><path><editType>edit</editType><file>pyproject.toml</file></path><path><editType>edit</editType><file>tests/unittests/test_esim_saip.py</file></path><path><editType>edit</editType><file>tests/unittests/test_configurable_parameters.py</file></path><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path><path><editType>edit</editType><file>tests/unittests/xo/test_configurable_parameters</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/batch.py</affectedPath><commitId>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>UppAudit: better indicate exception cause

Change-Id: I4d986b89a473a5b12ed56b4710263b034876a33e
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</id><msg>UppAudit: better indicate exception cause</msg><path><editType>edit</editType><file>pySim/esim/saip/batch.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>c5e7e599282891412868d57ba0ad186c633fafb5</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>ConfigurableParameter: safer val length check

validate_val() calls len() to check the value against allow_len,
min_len and max_len. len() requires the object to have a __len__()
method, which integers do not — calling len() on an int raises
TypeError.

Fix this by checking for __len__ first: if present, use len(val) as
usual; otherwise fall back to len(str(val)), which gives the number
of decimal digits for integer values.

Change-Id: Ibe91722ed1477b00d20ef5e4e7abd9068ff2f3e4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>c5e7e599282891412868d57ba0ad186c633fafb5</id><msg>ConfigurableParameter: safer val length check</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></culprit></run><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "master-pysim" build number 2,190</shortDescription><upstreamBuild>2190</upstreamBuild><upstreamProject>master-pysim</upstreamProject><upstreamUrl>job/master-pysim/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>26934</buildingDurationMillis><executingTimeMillis>26934</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginpmaierrcp _class='hudson.plugins.git.util.Build'><buildNumber>2131</buildNumber><marked><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></marked><revision><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></revision></refsremotesoriginpmaierrcp><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>2190</buildNumber><marked><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></marked><revision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></revision></originmaster></buildsByBranchName><lastBuiltRevision><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><branch><SHA1>c5e7e599282891412868d57ba0ad186c633fafb5</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2190</displayName><duration>26934</duration><estimatedDuration>22619</estimatedDuration><fullDisplayName>master-pysim » test,a1=default,a3=default,a4=default,osmocom-master #2190</fullDisplayName><id>2190</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2190</number><queueId>149489</queueId><result>SUCCESS</result><timestamp>1782116460649</timestamp><url>https://jenkins.osmocom.org/jenkins/view/no-generated/job/master-pysim/JOB_TYPE=test,a1=default,a3=default,a4=default,label=osmocom-master/2190/</url><builtOn>build5-deb12build-ansible</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</commitId><timestamp>1781988126000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use random.SystemRandom as random nr source

Python's random module uses a PRNG (Mersenne Twister) which is
utterly insecure for key generation - it was so far only used for
testing.  Replace it with random.SystemRandom(), which draws from
/dev/urandom and is suitable for generating cryptographic key material.

Change-Id: I6de38c14ac6dd55bc84d53974192509c18d02bfa
Jenkins: skip-card-test
</comment><date>2026-06-21 03:42:06 +0700</date><id>512aba8b1dacae25e3ad74d990fa9fd1e2f6ac65</id><msg>param_source: use random.SystemRandom as random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>aad92f2b73ce7742c4aa1191d6984261d2eaecee</commitId><timestamp>1781988371000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>param_source: use secrets.SystemRandom as secure random nr source

secrets.SystemRandom is defined as the most secure random source
available on the given operating system.

Change-Id: I8049cd1292674b3ced82b0926569128535af6efe
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:11 +0700</date><id>aad92f2b73ce7742c4aa1191d6984261d2eaecee</id><msg>param_source: use secrets.SystemRandom as secure random nr source</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/param_source.py</affectedPath><commitId>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>saip/param_source: try to not repeat random values

Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>ce039d69ba0ccc31ea504f62d55e33d6bdb46188</id><msg>saip/param_source: try to not repeat random values</msg><path><editType>edit</editType><file>pySim/esim/saip/param_source.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/unittests/test_esim_saip.py</affectedPath><affectedPath>tests/unittests/test_configurable_parameters.py</affectedPath><affectedPath>tests/unittests/xo/test_configurable_parameters</affectedPath><affectedPath>pyproject.toml</affectedPath><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>e9ff4f3b93c173fb8c619452636a2b6f8314c927</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>personalization: generate sdkey classes from a list

Change-Id: Ic92ddea6e1fad8167ea75baf78ffc3eb419838c4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>e9ff4f3b93c173fb8c619452636a2b6f8314c927</id><msg>personalization: generate sdkey classes from a list</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path><path><editType>edit</editType><file>pyproject.toml</file></path><path><editType>edit</editType><file>tests/unittests/test_configurable_parameters.py</file></path><path><editType>edit</editType><file>tests/unittests/xo/test_configurable_parameters</file></path><path><editType>edit</editType><file>tests/unittests/test_esim_saip.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/batch.py</affectedPath><commitId>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>UppAudit: better indicate exception cause

Change-Id: I4d986b89a473a5b12ed56b4710263b034876a33e
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>98af3dd2e956fdb6acdcb41ddc42b645bb44b348</id><msg>UppAudit: better indicate exception cause</msg><path><editType>edit</editType><file>pySim/esim/saip/batch.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>c5e7e599282891412868d57ba0ad186c633fafb5</commitId><timestamp>1781988376000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></author><authorEmail>vyanitskiy@sysmocom.de</authorEmail><comment>ConfigurableParameter: safer val length check

validate_val() calls len() to check the value against allow_len,
min_len and max_len. len() requires the object to have a __len__()
method, which integers do not — calling len() on an int raises
TypeError.

Fix this by checking for __len__ first: if present, use len(val) as
usual; otherwise fall back to len(str(val)), which gives the number
of decimal digits for integer values.

Change-Id: Ibe91722ed1477b00d20ef5e4e7abd9068ff2f3e4
Jenkins: skip-card-test
</comment><date>2026-06-21 03:46:16 +0700</date><id>c5e7e599282891412868d57ba0ad186c633fafb5</id><msg>ConfigurableParameter: safer val length check</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/fixeria</absoluteUrl><fullName>Vadim Yanitskiy</fullName></culprit></run></matrixBuild>