From ee8513720b291480e104577b35ceb009f375b013 Mon Sep 17 00:00:00 2001 From: Paul Higgs Date: Tue, 28 Jul 2026 08:20:45 +0100 Subject: [PATCH 1/4] [A177r8] when the @integrity attribute is provided with an image resource, validate the image against it. Currently only supports sha1 and sha256 --- backend/images/IRT_logo.jpg | Bin 0 -> 6451 bytes backend/images/dashif-logo-283x100_new.jpg | Bin 0 -> 22206 bytes backend/images/dvb-logo.png | Bin 0 -> 4123 bytes backend/servicelists/example.xml | 48 +++++++++++++++++- .../android/images/invalid-digest-image.jpeg | Bin 0 -> 4681 bytes frontend/android/player.html | 4 ++ frontend/dvbi-common.js | 43 ++++++++++++++-- frontend/network.js | 17 +++++++ 8 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 backend/images/IRT_logo.jpg create mode 100644 backend/images/dashif-logo-283x100_new.jpg create mode 100644 backend/images/dvb-logo.png create mode 100644 frontend/android/images/invalid-digest-image.jpeg diff --git a/backend/images/IRT_logo.jpg b/backend/images/IRT_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e0c9b0ba7987d215d49b3fb88c8686ebead83c7 GIT binary patch literal 6451 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 DfbWWA literal 0 HcmV?d00001 diff --git a/backend/images/dashif-logo-283x100_new.jpg b/backend/images/dashif-logo-283x100_new.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dec46180b553cfc79a0065155f845e50b769994 GIT binary patch literal 22206 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 MUlUT^I`@0_Kh2uer~m)} literal 0 HcmV?d00001 diff --git a/backend/images/dvb-logo.png b/backend/images/dvb-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..78551cb39860da783177180bb01f1685549772b8 GIT binary patch literal 4123 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 Z;s4E$<^^Gv#&7@t002ovPDHLkV1n#f + + @@ -73,6 +75,12 @@ IRT test channel IRT测试通道 IRT + + + + INSTALL~~LOCATION/backend/images/IRT_logo.jpg + + cgsid_3 @@ -190,6 +198,7 @@ DVB cgsid_4 + tag:dvb-i-referenceapp,2023:Parental-1 @@ -201,9 +210,40 @@ Parental rating service 2 DVB + + + + INSTALL~~LOCATION/backend/images/dvb-logo.png + + - + + tag:dvb-i-referenceapp,2026:Digest-1 + + + + https://refapp.hbbtv.org/livesim/02_llamanofragv1/manifest.mpd + + + + Digest Svc Logo + DVB + + + + + + + + INSTALL~~LOCATION/backend/images/dvb-logo.png + + + + + + tag:dvb.org,2020:DASHIF-LL @@ -239,6 +279,12 @@ DASH-IF livesim LL DASH Industry Forum + + + + INSTALL~~LOCATION/backend/images/dashif-logo-283x100_new.jpg + + diff --git a/frontend/android/images/invalid-digest-image.jpeg b/frontend/android/images/invalid-digest-image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..46ca2686f6e49b3910784ca3163872536991b5d5 GIT binary patch literal 4681 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 literal 0 HcmV?d00001 diff --git a/frontend/android/player.html b/frontend/android/player.html index 5a425d3..86f8631 100755 --- a/frontend/android/player.html +++ b/frontend/android/player.html @@ -24,6 +24,10 @@ + + + + diff --git a/frontend/dvbi-common.js b/frontend/dvbi-common.js index 9314f2c..734f450 100755 --- a/frontend/dvbi-common.js +++ b/frontend/dvbi-common.js @@ -7,6 +7,9 @@ var PROVIDER_LIST = INSTALL_LOCATION + "/backend/servicelist_registry.php"; /* const */ var LCN_services_only = false; /* const */ var First_undeclared_channel = 7000; +// this is an inline representation of frontend/android/images/invalid-digest-image.jpeg [[made with https://ezgif.com/image-to-datauri]] +var INVALID_DIGEST_IMAGE = "data:image/jpeg;base64,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"; + function parseContentGuideSource(src) { var newCS = { id: "", @@ -604,9 +607,10 @@ function parseServiceList(data, dvbChannels, supportedDrmSystems) { if (howRelated == DVBi_Service_Logo) { chan.image = getMedia(relatedMaterial[j]); } - if (howRelated == DVBi_Out_Of_Service_Logo) { + else if (howRelated == DVBi_Out_Of_Service_Logo) { chan.out_of_service_image = getMedia(relatedMaterial[j]); - } else if (howRelated == DVBi_App_In_Parallel) { + } + else if (howRelated == DVBi_App_In_Parallel) { var app = {}; var mediaUri = relatedMaterial[j] .getElementsByTagNameNS(TVA_ns, "MediaLocator")[0] @@ -616,7 +620,8 @@ function parseServiceList(data, dvbChannels, supportedDrmSystems) { app.contentType = mediaUri.getAttribute("contentType"); chan.parallelApps.push(app); } - } else if (howRelated == DVBi_App_Controlling_Media) { + } + else if (howRelated == DVBi_App_Controlling_Media) { var app2 = {}; var mediaUri2 = relatedMaterial[j] .getElementsByTagNameNS(TVA_ns, "MediaLocator")[0] @@ -1221,9 +1226,41 @@ function getMedia(element) { } var tvaNS = "*"; var mediaUri = element.getElementsByTagNameNS(tvaNS, "MediaUri"); + + var content_digest = mediaUri[0].getAttribute("integrity"); + if (content_digest) { + var digests = content_digest.split(" "); + var img_url = mediaUri[0].childNodes[0].nodeValue; + var img = NetworkRequestS(img_url, {}); + var is_valid = false; + + var re = new RegExp("([a-z0-9]+)=:([a-zA-Z0-9]+):"); + digests.forEach(function (dig) { + var parse = dig.match(re); + var algorithm = parse[1], digest = parse[2]; + + if (algorithm == "sha1") { + var sha1obj = new jsSHA("SHA-1", "TEXT"); + sha1obj.update(img); + if (sha1obj.getHash("HEX") == digest) { + is_valid = true; + } + } + else if (algorithm = "sha256") { + var sha256obj = new jsSHA("SHA-256","TEXT"); + sha256obj.update(img); + if (sha256obj.getHash("HEX") == digest) { + is_valid = true; + } + } + }); + return {mediaUri: is_valid ? img_url : INVALID_DIGEST_IMAGE}; + } + else if (mediaUri.length > 0) { return { mediaUri: mediaUri[0].childNodes[0].nodeValue }; } + return null; } function getImageSrc(image, defaultImage = "./images/empty.png") { diff --git a/frontend/network.js b/frontend/network.js index a7f2c57..ecf18f7 100644 --- a/frontend/network.js +++ b/frontend/network.js @@ -10,3 +10,20 @@ function NetworkRequest(url, settings) { settings.url = url; return $.ajax(settings); } + + + +function NetworkRequestS(url, settings) { + // settings.accepts= { mycustomtype: "application/vnd.dvb.dvbi.r8" }, + + settings.beforeSend = function (req) { + // Chrome:: Refused to set unsafe header "User-Agent" + // req.setRequestHeader("User-Agent", "DVB-I/A177r8"); + req.setRequestHeader("Accept", "text/plain, */*, application/vnd.dvb.dvbi.r8"); + }; + + settings.url = url; + settings.async = false; + var request = $.ajax(settings); + return request.responseText; +} From 8225be6f4f240b09dd0e7c88fee0e2d70cce55c1 Mon Sep 17 00:00:00 2001 From: Paul Higgs Date: Tue, 28 Jul 2026 14:18:43 +0100 Subject: [PATCH 2/4] use the inline image payload with any provided checksums --- backend/servicelists/example.xml | 29 +++++++++++++++++++++++++++-- frontend/dvbi-common.js | 13 ++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/backend/servicelists/example.xml b/backend/servicelists/example.xml index 8565e4e..2f76171 100755 --- a/backend/servicelists/example.xml +++ b/backend/servicelists/example.xml @@ -15,6 +15,7 @@ + @@ -218,7 +219,7 @@ - + tag:dvb-i-referenceapp,2026:Digest-1 @@ -227,7 +228,7 @@ - Digest Svc Logo + Digest Svc Logo #1 DVB @@ -243,6 +244,30 @@ + + tag:dvb-i-referenceapp,2026:Digest-2 + + + + https://refapp.hbbtv.org/livesim/02_llamanofragv1/manifest.mpd + + + + Digest Svc Logo #2 + DVB + + + + + + + + data:image/png;base64,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 + + + + tag:dvb.org,2020:DASHIF-LL diff --git a/frontend/dvbi-common.js b/frontend/dvbi-common.js index 734f450..e039f2a 100755 --- a/frontend/dvbi-common.js +++ b/frontend/dvbi-common.js @@ -1220,6 +1220,15 @@ function parseServiceListProviders(data) { return { registryInfo: registryInfo, providerList: providerslist }; } +/** + * extract the image payload from the provided @inline_image. + * + * @param {string} inline_image + */ +function parseImageData(inline_image) { + return inline_image.substring(inline_image.indexOf(",")); +} + function getMedia(element) { if (!element) { return null; @@ -1231,7 +1240,7 @@ function getMedia(element) { if (content_digest) { var digests = content_digest.split(" "); var img_url = mediaUri[0].childNodes[0].nodeValue; - var img = NetworkRequestS(img_url, {}); + var img = img_url.startsWith("http") ? NetworkRequestS(img_url, {}) : parseImageData(img_url); var is_valid = false; var re = new RegExp("([a-z0-9]+)=:([a-zA-Z0-9]+):"); @@ -1242,6 +1251,7 @@ function getMedia(element) { if (algorithm == "sha1") { var sha1obj = new jsSHA("SHA-1", "TEXT"); sha1obj.update(img); + console.log(`sha1=${sha1obj.getHash("HEX")}`) if (sha1obj.getHash("HEX") == digest) { is_valid = true; } @@ -1249,6 +1259,7 @@ function getMedia(element) { else if (algorithm = "sha256") { var sha256obj = new jsSHA("SHA-256","TEXT"); sha256obj.update(img); + console.log(`sha256=${sha256obj.getHash("HEX")}`) if (sha256obj.getHash("HEX") == digest) { is_valid = true; } From 3e1c9290cf052c2d9fa78955ff60d641d6d54096 Mon Sep 17 00:00:00 2001 From: Paul Higgs Date: Tue, 28 Jul 2026 14:33:26 +0100 Subject: [PATCH 3/4] use the inline image payload with any provided checksums --- frontend/dvbi-common.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/frontend/dvbi-common.js b/frontend/dvbi-common.js index e039f2a..f02937e 100755 --- a/frontend/dvbi-common.js +++ b/frontend/dvbi-common.js @@ -1251,7 +1251,6 @@ function getMedia(element) { if (algorithm == "sha1") { var sha1obj = new jsSHA("SHA-1", "TEXT"); sha1obj.update(img); - console.log(`sha1=${sha1obj.getHash("HEX")}`) if (sha1obj.getHash("HEX") == digest) { is_valid = true; } @@ -1259,7 +1258,6 @@ function getMedia(element) { else if (algorithm = "sha256") { var sha256obj = new jsSHA("SHA-256","TEXT"); sha256obj.update(img); - console.log(`sha256=${sha256obj.getHash("HEX")}`) if (sha256obj.getHash("HEX") == digest) { is_valid = true; } From b431e4db97e4d6b36440fc8719729e04ad51acfc Mon Sep 17 00:00:00 2001 From: Paul Higgs Date: Tue, 28 Jul 2026 15:45:50 +0100 Subject: [PATCH 4/4] add checking of @integrity values in Promotional Still Image in Program Info response - provides invalid checksums for 'The Pride of the Eastern Cape' program --- backend/schedule_templates/cgsid_1.xml | 2 +- backend/schedule_templates/cgsid_12.xml | 2 +- backend/schedule_templates/cgsid_13.xml | 2 +- backend/schedule_templates/cgsid_4.xml | 2 +- backend/schedule_templates/cgsid_5.xml | 2 +- backend/schedule_templates/cgsid_8.xml | 2 +- backend/schedule_templates/cgsid_9.xml | 2 +- frontend/channel-common.js | 11 +++++++---- 8 files changed, 14 insertions(+), 11 deletions(-) diff --git a/backend/schedule_templates/cgsid_1.xml b/backend/schedule_templates/cgsid_1.xml index 758080c..85c43e4 100755 --- a/backend/schedule_templates/cgsid_1.xml +++ b/backend/schedule_templates/cgsid_1.xml @@ -194,7 +194,7 @@ - http://tmsimg.com/assets/p10117343_i_h13_ab.jpg + http://tmsimg.com/assets/p10117343_i_h13_ab.jpg diff --git a/backend/schedule_templates/cgsid_12.xml b/backend/schedule_templates/cgsid_12.xml index fae6adc..719794d 100755 --- a/backend/schedule_templates/cgsid_12.xml +++ b/backend/schedule_templates/cgsid_12.xml @@ -132,7 +132,7 @@ - http://tmsimg.com/assets/p10117343_i_h13_ab.jpg + http://tmsimg.com/assets/p10117343_i_h13_ab.jpg diff --git a/backend/schedule_templates/cgsid_13.xml b/backend/schedule_templates/cgsid_13.xml index c010be4..5676c54 100755 --- a/backend/schedule_templates/cgsid_13.xml +++ b/backend/schedule_templates/cgsid_13.xml @@ -194,7 +194,7 @@ - http://tmsimg.com/assets/p10117343_i_h13_ab.jpg + http://tmsimg.com/assets/p10117343_i_h13_ab.jpg diff --git a/backend/schedule_templates/cgsid_4.xml b/backend/schedule_templates/cgsid_4.xml index e9dff99..af92f7e 100755 --- a/backend/schedule_templates/cgsid_4.xml +++ b/backend/schedule_templates/cgsid_4.xml @@ -159,7 +159,7 @@ - http://tmsimg.com/assets/p10117343_i_h13_ab.jpg + http://tmsimg.com/assets/p10117343_i_h13_ab.jpg diff --git a/backend/schedule_templates/cgsid_5.xml b/backend/schedule_templates/cgsid_5.xml index 35542bd..7ccf4c3 100755 --- a/backend/schedule_templates/cgsid_5.xml +++ b/backend/schedule_templates/cgsid_5.xml @@ -193,7 +193,7 @@ - http://tmsimg.com/assets/p10117343_i_h13_ab.jpg + http://tmsimg.com/assets/p10117343_i_h13_ab.jpg diff --git a/backend/schedule_templates/cgsid_8.xml b/backend/schedule_templates/cgsid_8.xml index b37077b..2401536 100755 --- a/backend/schedule_templates/cgsid_8.xml +++ b/backend/schedule_templates/cgsid_8.xml @@ -132,7 +132,7 @@ - http://tmsimg.com/assets/p10117343_i_h13_ab.jpg + http://tmsimg.com/assets/p10117343_i_h13_ab.jpg diff --git a/backend/schedule_templates/cgsid_9.xml b/backend/schedule_templates/cgsid_9.xml index 60dcd24..626c7cd 100755 --- a/backend/schedule_templates/cgsid_9.xml +++ b/backend/schedule_templates/cgsid_9.xml @@ -193,7 +193,7 @@ - http://tmsimg.com/assets/p10117343_i_h13_ab.jpg + http://tmsimg.com/assets/p10117343_i_h13_ab.jpg diff --git a/frontend/channel-common.js b/frontend/channel-common.js index 191c71b..018e2bc 100755 --- a/frontend/channel-common.js +++ b/frontend/channel-common.js @@ -135,10 +135,13 @@ Channel.prototype.parseSchedule = function (data) { var howRelated = relatedMaterial[k1].getElementsByTagNameNS(TVA_ns, "HowRelated")[0].getAttribute("href"); if (howRelated == TVA_Promotional_Still_Image) { //Program still image - program.mediaimage = relatedMaterial[k1].getElementsByTagNameNS( - TVA_ns, - "MediaUri" - )[0].childNodes[0].nodeValue; + // program.mediaimage = relatedMaterial[k1].getElementsByTagNameNS( + // TVA_ns, + // "MediaUri" + // )[0].childNodes[0].nodeValue; + var mediaLocators = relatedMaterial[k1].getElementsByTagNameNS(TVA_ns, "MediaLocator"); + var image_uri = getMedia(relatedMaterial[k1], {}); + program.mediaimage = image_uri ? image_uri.mediaUri : null; break; } }