Attention is currently required from: laforge.
Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/pysim/+/36972?usp=email
to look at the new patch set (#2).
The following approvals got outdated and were removed:
Verified-1 by Jenkins Builder
Change subject: esim.es2p: Split generic part of HTTP/REST API from ES2+
......................................................................
esim.es2p: Split generic part of HTTP/REST API from ES2+
This way we can reuse it for other eSIM RSP HTTP interfaces like
ES9+, ES11, ...
Change-Id: I468041da40a88875e8df15b04d3ad508e06f16f7
---
M pySim/esim/es2p.py
A pySim/esim/http_json_api.py
2 files changed, 277 insertions(+), 231 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/72/36972/2
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/36972?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I468041da40a88875e8df15b04d3ad508e06f16f7
Gerrit-Change-Number: 36972
Gerrit-PatchSet: 2
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newpatchset
Attention is currently required from: laforge.
Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/pysim/+/36973?usp=email
to look at the new patch set (#2).
The following approvals got outdated and were removed:
Verified-1 by Jenkins Builder
Change subject: add pySim.esim.es9p with definitions of the ES9+ HTTP Interface
......................................................................
add pySim.esim.es9p with definitions of the ES9+ HTTP Interface
Let's use the infrastructure of pySim.esim.http_json_api to define
the ES9+ API Functions. This can in turn be used by clients or even
osmo-smdpp can be ported over to using this infratructure rather than
open-coding a lot of the encoding/decoding of API request/response
parameters.
Change-Id: I194ef1d186391f36245c099cc70a4813185ecf9c
---
A pySim/esim/es9p.py
1 file changed, 196 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/73/36973/2
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/36973?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I194ef1d186391f36245c099cc70a4813185ecf9c
Gerrit-Change-Number: 36973
Gerrit-PatchSet: 2
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newpatchset
Attention is currently required from: laforge.
lynxis lazus has posted comments on this change. ( https://gerrit.osmocom.org/c/pysim/+/36960?usp=email )
Change subject: esim.saip: Implement ProfileElement.header_name for more PE types
......................................................................
Patch Set 3: Code-Review+1
(1 comment)
File pySim/esim/saip/__init__.py:
https://gerrit.osmocom.org/c/pysim/+/36960/comment/28722650_d5a1ea02
PS3, Line 176: elif self.type == 'genericFileManagement':
you might use a dict for this.
elif self.type in some_dict:
return some_dict[self.type]
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/36960?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I37951a0441fe53fce7a329066aebd973389cb743
Gerrit-Change-Number: 36960
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Comment-Date: Sun, 02 Jun 2024 15:03:33 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
Attention is currently required from: fixeria.
lynxis lazus has posted comments on this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36968?usp=email )
Change subject: README.md: fix copy-pasted 'osmo-bsc' and a broken link
......................................................................
Patch Set 1: Code-Review+2
--
To view, visit https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36968?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: erlang/osmo-epdg
Gerrit-Branch: master
Gerrit-Change-Id: I760db277ee682298d8c7a4d11cf68c86d94fe368
Gerrit-Change-Number: 36968
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Comment-Date: Sun, 02 Jun 2024 14:57:49 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/36969?usp=email )
Change subject: utils: Introduce BER-TLV parsers that return raw tag or even raw TLV
......................................................................
utils: Introduce BER-TLV parsers that return raw tag or even raw TLV
In the eSIM RSP univers there are some rather ugly layering violatoins
where ASN.1 cannot be parsed but we have to mess with raw TLVs and the
details of DER encoding. Let's add two funtions that make it more
convenient to work with this: They return the raw tag as integer, or
even the entire encoded TLV rather than the value part only.
Change-Id: I1e68a4003b833e86e9282c77325afa86ce144b98
---
M pySim/esim/rsp.py
M pySim/utils.py
2 files changed, 56 insertions(+), 21 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/69/36969/1
diff --git a/pySim/esim/rsp.py b/pySim/esim/rsp.py
index a032031..4230d1f 100644
--- a/pySim/esim/rsp.py
+++ b/pySim/esim/rsp.py
@@ -24,7 +24,7 @@
from cryptography.hazmat.primitives.serialization import Encoding
from cryptography import x509
-from pySim.utils import bertlv_parse_one, bertlv_encode_tag, bertlv_encode_len, b2h
+from pySim.utils import bertlv_parse_one_rawtag, bertlv_return_one_rawtlv, b2h
from pySim.esim import compile_asn1_subdir
asn1 = compile_asn1_subdir('rsp')
@@ -101,37 +101,31 @@
def extract_euiccSigned1(authenticateServerResponse: bytes) -> bytes:
"""Extract the raw, DER-encoded binary euiccSigned1 field from the given AuthenticateServerResponse. This
is needed due to the very peculiar SGP.22 notion of signing sections of DER-encoded ASN.1 objects."""
- tdict, l, v, remainder = bertlv_parse_one(authenticateServerResponse)
- rawtag = bertlv_encode_tag(tdict)
+ rawtag, l, v, remainder = bertlv_parse_one_rawtag(authenticateServerResponse)
if len(remainder):
raise ValueError('Excess data at end of TLV')
- if b2h(rawtag) != 'bf38':
+ if rawtag != 0xbf38:
raise ValueError('Unexpected outer tag: %s' % b2h(rawtag))
- tdict, l, v1, remainder = bertlv_parse_one(v)
- rawtag = bertlv_encode_tag(tdict)
- if b2h(rawtag) != 'a0':
+ rawtag, l, v1, remainder = bertlv_parse_one_rawtag(v)
+ if rawtag != 0xa0:
raise ValueError('Unexpected tag where CHOICE was expected')
- tdict, l, v2, remainder = bertlv_parse_one(v1)
- rawtag = bertlv_encode_tag(tdict)
- if b2h(rawtag) != '30':
+ rawtag, l, tlv2, remainder = bertlv_return_one_rawtlv(v1)
+ if rawtag != 0x30:
raise ValueError('Unexpected tag where SEQUENCE was expected')
- return rawtag + bertlv_encode_len(l) + v2
+ return tlv2
def extract_euiccSigned2(prepareDownloadResponse: bytes) -> bytes:
"""Extract the raw, DER-encoded binary euiccSigned2 field from the given prepareDownloadrResponse. This is
needed due to the very peculiar SGP.22 notion of signing sections of DER-encoded ASN.1 objects."""
- tdict, l, v, remainder = bertlv_parse_one(prepareDownloadResponse)
- rawtag = bertlv_encode_tag(tdict)
+ rawtag, l, v, remainder = bertlv_parse_one_rawtag(prepareDownloadResponse)
if len(remainder):
raise ValueError('Excess data at end of TLV')
- if b2h(rawtag) != 'bf21':
+ if rawtag != 0xbf21:
raise ValueError('Unexpected outer tag: %s' % b2h(rawtag))
- tdict, l, v1, remainder = bertlv_parse_one(v)
- rawtag = bertlv_encode_tag(tdict)
- if b2h(rawtag) != 'a0':
+ rawtag, l, v1, remainder = bertlv_parse_one_rawtag(v)
+ if rawtag != 0xa0:
raise ValueError('Unexpected tag where CHOICE was expected')
- tdict, l, v2, remainder = bertlv_parse_one(v1)
- rawtag = bertlv_encode_tag(tdict)
- if b2h(rawtag) != '30':
+ rawtag, l, tlv2, remainder = bertlv_return_one_rawtlv(v1)
+ if rawtag != 0x30:
raise ValueError('Unexpected tag where SEQUENCE was expected')
- return rawtag + bertlv_encode_len(l) + v2
+ return tlv2
diff --git a/pySim/utils.py b/pySim/utils.py
index afa476b..2362b59 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -359,6 +359,32 @@
remainder = remainder[length:]
return (tagdict, length, value, remainder)
+def bertlv_parse_one_rawtag(binary: bytes) -> Tuple[int, int, bytes, bytes]:
+ """Parse a single TLV IE at the start of the given binary data; return tag as raw integer.
+ Args:
+ binary : binary input data of BER-TLV length field
+ Returns:
+ Tuple of (tag:int, len:int, remainder:bytes)
+ """
+ (tag, remainder) = bertlv_parse_tag_raw(binary)
+ (length, remainder) = bertlv_parse_len(remainder)
+ value = remainder[:length]
+ remainder = remainder[length:]
+ return (tag, length, value, remainder)
+
+def bertlv_return_one_rawtlv(binary: bytes) -> Tuple[int, int, bytes, bytes]:
+ """Return one single [encoded] TLV IE at the start of the given binary data.
+ Args:
+ binary : binary input data of BER-TLV length field
+ Returns:
+ Tuple of (tag:int, len:int, tlv:bytes, remainder:bytes)
+ """
+ (tag, remainder) = bertlv_parse_tag_raw(binary)
+ (length, remainder) = bertlv_parse_len(remainder)
+ tl_length = len(binary) - len(remainder)
+ value = binary[:tl_length] + remainder[:length]
+ remainder = remainder[length:]
+ return (tag, length, value, remainder)
def dgi_parse_tag_raw(binary: bytes) -> Tuple[int, bytes]:
# In absence of any clear spec guidance we assume it's always 16 bit
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/36969?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I1e68a4003b833e86e9282c77325afa86ce144b98
Gerrit-Change-Number: 36969
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange
laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/36971?usp=email )
Change subject: [cosmetic] fix typos in comments
......................................................................
[cosmetic] fix typos in comments
Change-Id: I549ef7002e6ebef3f13af620cad8d03c7f4d891a
---
M osmo-smdpp.py
M pySim/esim/rsp.py
2 files changed, 11 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/71/36971/1
diff --git a/osmo-smdpp.py b/osmo-smdpp.py
index d7fc872..9551396 100755
--- a/osmo-smdpp.py
+++ b/osmo-smdpp.py
@@ -444,7 +444,7 @@
ss.host_id = b'mahlzeit'
- # Generate Session Keys using the CRT, opPK.eUICC.ECKA and otSK.DP.ECKA according to annex G
+ # Generate Session Keys using the CRT, otPK.eUICC.ECKA and otSK.DP.ECKA according to annex G
euicc_public_key = ec.EllipticCurvePublicKey.from_encoded_point(ss.smdp_ot.curve, ss.euicc_otpk)
ss.shared_secret = ss.smdp_ot.exchange(ec.ECDH(), euicc_public_key)
print("shared_secret: %s" % b2h(ss.shared_secret))
diff --git a/pySim/esim/rsp.py b/pySim/esim/rsp.py
index 4230d1f..c2a163b 100644
--- a/pySim/esim/rsp.py
+++ b/pySim/esim/rsp.py
@@ -37,7 +37,7 @@
def __init__(self, transactionId: str, serverChallenge: bytes, ci_cert_id: bytes):
self.transactionId = transactionId
self.serverChallenge = serverChallenge
- # used at a later point between API calsl
+ # used at a later point between API calls
self.ci_cert_id = ci_cert_id
self.euicc_cert: Optional[x509.Certificate] = None
self.eum_cert: Optional[x509.Certificate] = None
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/36971?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I549ef7002e6ebef3f13af620cad8d03c7f4d891a
Gerrit-Change-Number: 36971
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange
laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/36970?usp=email )
Change subject: esim.bsp: Fix a bug in demac_only_one()
......................................................................
esim.bsp: Fix a bug in demac_only_one()
When de-MAC-ing at the recipient side, we must increment the cipher(!)
block number even if no ciphering is done at all.
We did this correctly for MAC (sender) case, but not on the de-MAC
(receiver) case.
Change-Id: I97993f9e8357b36401d435aaa15558d1c7e411eb
---
M pySim/esim/bsp.py
1 file changed, 17 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/70/36970/1
diff --git a/pySim/esim/bsp.py b/pySim/esim/bsp.py
index 2afbd46..81fe092 100644
--- a/pySim/esim/bsp.py
+++ b/pySim/esim/bsp.py
@@ -287,6 +287,8 @@
def demac_only_one(self, ciphertext: bytes) -> bytes:
payload = self.m_algo.verify(ciphertext)
_tdict, _l, val, _remain = bertlv_parse_one(payload)
+ # The data block counter for ICV caluclation is incremented also for each segment with C-MAC only.
+ self.c_algo.block_nr += 1
return val
def demac_only(self, ciphertext_list: List[bytes]) -> bytes:
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/36970?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I97993f9e8357b36401d435aaa15558d1c7e411eb
Gerrit-Change-Number: 36970
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange