laforge has submitted this change. ( 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(-)
Approvals:
osmith: Looks good to me, but someone else must approve
Jenkins Builder: Verified
laforge: Looks good to me, approved
diff --git a/pySim/esim/rsp.py b/pySim/esim/rsp.py
index 85dacee..c2a163b 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: 2
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-MessageType: merged
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/pysim/+/36969?usp=email )
Change subject: utils: Introduce BER-TLV parsers that return raw tag or even raw TLV
......................................................................
Patch Set 1: Code-Review+2
--
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-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Comment-Date: Mon, 03 Jun 2024 16:07:41 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
Attention is currently required from: laforge.
falconia has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-abis/+/36975?usp=email )
Change subject: build config: add --disable-ortp option
......................................................................
Patch Set 1:
(1 comment)
Patchset:
PS1:
> I actually consider it a bug that only osmo-bts is using libortp; all other RTP endpoints [in my pla […]
In order to make ortp optional in OsmoBTS, we will need to provide an alternative implementation of the required jitter buffer facility. I have plans to implement one (please see OS#6474), but in terms of work schedule, I am probably still many months away from it.
However, allowing ortp to be disabled in libosmo-abis prior to those distant-plans OsmoBTS changes will significantly lower the pain for Slackware network servers builds. OsmoBTS does not run on MSC/BSC/etc servers, it runs on the sysmoBTS embedded box, while a more conventional x86 server machine (or many such machines in larger networks) runs everything from OsmoBSC up to OsmoHLR. This ortp dependency is a major pain point for non-Debian minimalist distros, and when I realized that it is not actually needed, the situation becomes a bug in need of a fix.
--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/36975?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: I554260483b94d812ac3a957c969a902870f53883
Gerrit-Change-Number: 36975
Gerrit-PatchSet: 1
Gerrit-Owner: falconia <falcon(a)freecalypso.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Comment-Date: Mon, 03 Jun 2024 15:23:19 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: comment
Attention is currently required from: falconia.
laforge has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-abis/+/36975?usp=email )
Change subject: build config: add --disable-ortp option
......................................................................
Patch Set 1:
(1 comment)
Patchset:
PS1:
I actually consider it a bug that only osmo-bts is using libortp; all other RTP endpoints [in my plans so far] should also use it.
I may of course be convinced otherwise.
In any case, I'm not sure if it's wise to allow disabling ortp while we still have osmo-bts requiring it. I'm not fundamentally opposed, but it sounds a bit premature to me?
--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/36975?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: I554260483b94d812ac3a957c969a902870f53883
Gerrit-Change-Number: 36975
Gerrit-PatchSet: 1
Gerrit-Owner: falconia <falcon(a)freecalypso.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-Attention: falconia <falcon(a)freecalypso.org>
Gerrit-Comment-Date: Mon, 03 Jun 2024 14:36:27 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
laforge has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36984?usp=email )
Change subject: contrib/jenkins_manuals: new file
......................................................................
contrib/jenkins_manuals: new file
Add a separate jenkins script to build and publish the manuals. This
will use the debian-bookworm-build container, which has all dependencies
for the manuals. The other script contrib/jenkins.sh uses the
debian-bookworm-erlang container.
Related: OS#6332
Change-Id: I10f8490e37fd0e332e670b6d461997024588a00c
---
A contrib/jenkins_manuals.sh
1 file changed, 23 insertions(+), 0 deletions(-)
Approvals:
Jenkins Builder: Verified
lynxis lazus: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
diff --git a/contrib/jenkins_manuals.sh b/contrib/jenkins_manuals.sh
new file mode 100755
index 0000000..3dd3d0b
--- /dev/null
+++ b/contrib/jenkins_manuals.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -ex
+
+cd docs/manuals
+make
+
+if [ "$PUBLISH" = "1" ]; then
+ make publish
+fi
--
To view, visit https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36984?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: I10f8490e37fd0e332e670b6d461997024588a00c
Gerrit-Change-Number: 36984
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: neels <nhofmeyr(a)sysmocom.de>
Gerrit-MessageType: merged