Skip to content

Commit 4bbe42c

Browse files
committed
Port to new publishing worflow
1 parent 762fa21 commit 4bbe42c

File tree

13 files changed

+175
-43
lines changed

13 files changed

+175
-43
lines changed

.github/workflows/build-pr.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Build Pull Request
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- master
7+
8+
jobs:
9+
build:
10+
runs-on: ubuntu-latest
11+
container:
12+
image: ghcr.io/dash-industry-forum/dashif-specs:latest
13+
credentials:
14+
username: ${{ github.actor }}
15+
password: ${{ secrets.github_token }}
16+
17+
steps:
18+
- uses: actions/checkout@v4
19+
- name: Build
20+
env:
21+
# Reset OPTS to empty to make sure we are not using
22+
# interactive mode in CI
23+
OPTS:
24+
run: make -f /tools/Makefile spec SRC=Guidelines-Security.bs.md NAME=Guidelines-Security
25+
26+
- name: Archive
27+
uses: actions/upload-artifact@v4
28+
with:
29+
name: dist
30+
path: dist/

.github/workflows/publish.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Publish
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
8+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
9+
permissions:
10+
contents: read
11+
packages: read
12+
pages: write
13+
id-token: write
14+
15+
jobs:
16+
build:
17+
runs-on: ubuntu-latest
18+
container:
19+
image: ghcr.io/dash-industry-forum/dashif-specs:latest
20+
credentials:
21+
username: ${{ github.actor }}
22+
password: ${{ secrets.github_token }}
23+
24+
steps:
25+
- uses: actions/checkout@v4
26+
- name: Build
27+
env:
28+
# Reset OPTS to empty to make sure we are not using
29+
# interactive mode in CI
30+
OPTS:
31+
run: make -f /tools/Makefile spec SRC=Guidelines-Security.bs.md NAME=Guidelines-Security
32+
33+
- name: Archive
34+
uses: actions/upload-artifact@v4
35+
with:
36+
name: dist
37+
path: dist/
38+
39+
package:
40+
runs-on: ubuntu-latest
41+
needs: build
42+
steps:
43+
- uses: actions/download-artifact@v4
44+
with:
45+
name: dist
46+
path: dist
47+
- uses: actions/upload-pages-artifact@v3
48+
with:
49+
path: dist
50+
51+
publish:
52+
runs-on: ubuntu-latest
53+
needs: package
54+
steps:
55+
- name: Deploy to GitHub Pages
56+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
Output
1+
Output
2+
dist/

10-General.inc.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
DASH-IF provides guidelines for using multiple [=DRM systems=] to access a DASH presentation by adding encryption signaling and [=DRM system configuration=] to DASH content encrypted in conformance to Common Encryption [[!CENC]]. In addition to content authoring guidelines, DASH-IF specifies interoperable workflows for DASH client interactions with [=DRM systems=], platform APIs and external services involved in content protection interactions.
44

55
<figure>
6-
<img src="Diagrams/DrmBigPicture.png" />
6+
<img src="Diagrams/DrmBigPicture.png" >
77
<figcaption>A [=DRM system=] cooperates with the device's [=media platform=] to enable playback of encrypted content while protecting the decrypted samples and [=content keys=] against potential attacks. The DASH-IF implementation guidelines focus on the signaling in the DASH presentation and the interactions of the DASH client with other components.</figcaption>
88
</figure>
99

@@ -28,7 +28,7 @@ A <dfn>license</dfn> is a data structure in a [=DRM system=] specific format tha
2828
Different software architectural components are involved in playback of encrypted content. The exact nature depends on the specific implementation. A high-level reference architecture is described here.
2929

3030
<figure>
31-
<img src="Diagrams/SoftwareComponents.png" />
31+
<img src="Diagrams/SoftwareComponents.png" >
3232
<figcaption>Reference architecture for encrypted content playback.</figcaption>
3333
</figure>
3434

@@ -220,7 +220,7 @@ Note: This optimization might require support from platform APIs and/or [=DRM sy
220220
While it is common that `default_KID` identifies the actual [=content key=] used for encryption, a [=DRM system=] MAY make use of other keys in addition to the one signalled by the `default_KID` value but this SHALL be transparent to the client with only the `default_KID` being used in interactions between the DASH client and the [=DRM system=]. See [[#CPS-KeyHierarchy]].
221221

222222
<figure>
223-
<img src="Diagrams/KeyHierarchyAndDefaultKid.png" />
223+
<img src="Diagrams/KeyHierarchyAndDefaultKid.png" >
224224
<figcaption>In a [[#CPS-KeyHierarchy|hierarchical key scenario]], `default_KID` references the [=root key=] and only the sample group descriptions reference the [=leaf keys=].</figcaption>
225225
</figure>
226226

40-LicenseRequestModel.inc.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ The above data sets are serialized and digitally signed to arrive at the final f
5353
[=Authorization tokens=] are issued by an authorization service, which is part of a solution's business logic. The authorization service has access to the project-specific context that it needs to make its decisions (e.g. the active session, user identification and database of purchases/entitlements). A single authorization service can be used to issue [=authorization tokens=] for multiple license servers, simplifying architecture in solutions where multiple license server vendors are used.
5454

5555
<figure>
56-
<img src="Diagrams/LicenseRequestModel-BaselineArchitecture.png" />
56+
<img src="Diagrams/LicenseRequestModel-BaselineArchitecture.png" >
5757
<figcaption>Role of the authorization service in DRM workflow related communication.</figcaption>
5858
</figure>
5959

@@ -68,7 +68,7 @@ To obtain an [=authorization token=], a DASH client needs to know the URL of the
6868
If no authorization service URL is provided by the MPD nor made available at runtime, a DASH client SHALL NOT attach an [=authorization token=] to a license request. Absence of this URL implies that authorization operations are performed in a manner transparent to the DASH client (see [[#CPS-lr-model-deployment]]).
6969

7070
<figure>
71-
<img src="Images/AuthzTokenSharingAndSelection.png" />
71+
<img src="Images/AuthzTokenSharingAndSelection.png" >
7272
<figcaption>[=Authorization tokens=] are requested from all authorization services referenced by the selected adaptation sets.</figcaption>
7373
</figure>
7474

@@ -197,7 +197,7 @@ Authorization services and license servers SHOULD indicate an inability to satis
197197

198198
1. Signals a suitable status code (4xx or 5xx).
199199
1. Has a `Content-Type` of `application/problem+json`.
200-
1. Contains a HTTP response body conforming to [[!rfc7807]].
200+
1. Contains a HTTP response body conforming to [[!rfc7807 obsolete]].
201201

202202
<div class="example">
203203
HTTP response from an authorization service, indicating a rejected [=authorization token=] request because the requested content is not a part of the user's subscriptions.
@@ -265,7 +265,7 @@ The interoperable license request model is designed to allow for the use of diff
265265
The baseline architecture assumes that a separate authorization service exists, implementing the logic required to determine which users have the rights to access which content.
266266

267267
<figure>
268-
<img src="Diagrams/LicenseRequestModel-BaselineArchitecture.png" />
268+
<img src="Diagrams/LicenseRequestModel-BaselineArchitecture.png" >
269269
<figcaption>The baseline architecture with an authorization service directly exposed to the DASH client.</figcaption>
270270
</figure>
271271

@@ -274,7 +274,7 @@ While the baseline architecture offers several advantages, in some cases it may
274274
A common implementation for transparent authorization is to use a "license proxy", which acts as a license server but instead forwards the license request after authorization checks have passed. Alternatively, the license server itself may perform the authorization checks.
275275

276276
<figure>
277-
<img src="Diagrams/LicenseRequestModel-TransparentArchitecture.png" />
277+
<img src="Diagrams/LicenseRequestModel-TransparentArchitecture.png" >
278278
<figcaption>A transparent authorization architecture performs the authorization checks at the license server, which is often hidden behind a proxy (indistinguishable from a license server to the DASH client).</figcaption>
279279
</figure>
280280

60-ClientWorkflows.inc.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ A typical [=DRM system=] might offer the following set of capabilities:
2929
A typical [=media platform=] API such as EME [[!encrypted-media]] will require the DASH client to query the platform by supplying a desired capability set. The [=media platform=] will inspect the desired capabilities, possibly displaying a permissions prompt to the user (if sensitive capabilities such as unique user identification are requested), after which it will return a supported capability set that indicates which of the desired capabilities are available.
3030

3131
<figure>
32-
<img src="Images/CapabilityNegotiation.png" />
32+
<img src="Images/CapabilityNegotiation.png" >
3333
<figcaption>The DASH client presents a set of desired capabilities for each [=DRM system=] and receives a response with the supported subset.</figcaption>
3434
</figure>
3535

@@ -128,7 +128,7 @@ When encrypted adaptation sets are initially selected for playback or when the s
128128
* This enables business logic to include DRM systems not signaled in the MPD.
129129

130130
1. Let <var>default_kids</var> be the set of all distinct `default_KID` values in <var>adaptation_sets</var>.
131-
1. Let <var>system_configurations</var> be an empty map of `system ID -> map(default_kid -> configuration)`, representing the [=DRM system configuration=] of each `default_KID` for each [=DRM system=].<br><img src="Images/SelectionAlgorithm-SystemConfigurations.png" />
131+
1. Let <var>system_configurations</var> be an empty map of `system ID -> map(default_kid -> configuration)`, representing the [=DRM system configuration=] of each `default_KID` for each [=DRM system=].<br><img src="Images/SelectionAlgorithm-SystemConfigurations.png" >
132132
1. For each <var>system_id</var> in <var>candidate_system_ids</var>:
133133
1. Let <var>configurations</var> be a map of `default_kid -> configuration` where the keys are <var>default_kids</var> and the values are the [=DRM system configurations=] initialized with data from `ContentProtection` descriptors in the MPD (matching on `default_KID` and <var>system_id</var>).
134134
* If there is no matching `ContentProtection` descriptors in the MPD, the map still contains a partially initialized [=DRM system configuration=] for the `default_KID`.
@@ -211,7 +211,7 @@ It is possible that not all of the encrypted adaptation sets selected for playba
211211
A DASH client can request a [=DRM system=] to enable decryption using any set of [=content keys=] (if it has the necessary [=DRM system configuration=]). However, this is only a request and playback can be countermanded at multiple stages of processing by different involved entities.
212212

213213
<figure>
214-
<img src="Diagrams/ReductionOfKeys.png" />
214+
<img src="Diagrams/ReductionOfKeys.png" >
215215
<figcaption>The set of [=content keys=] made available for use can be far smaller than the set requested by a DASH client. Example workflow indicating potential instances of [=content keys=] being removed from scope.</figcaption>
216216
</figure>
217217

@@ -262,7 +262,7 @@ DASH clients performing license requests SHOULD follow the [[#CPS-lr-model|DASH-
262262
[=DRM systems=] generally do not perform license requests on their own. Rather, when they determine that a [=license=] is required, they generate a document that serves as the license request body and expect the DASH client to deliver it to a license server for processing. The latter returns a suitable response that, if a [=license=] is granted, encapsulates the [=content keys=] in an encrypted form only readable to the DRM system.
263263

264264
<figure>
265-
<img src="Diagrams/LicenseRequestConcept.png" />
265+
<img src="Diagrams/LicenseRequestConcept.png" >
266266
<figcaption>Simplified conceptual model of license request processing. Many details omitted.</figcaption>
267267
</figure>
268268

@@ -276,7 +276,7 @@ The license request workflow defined here exists to enable the following goals t
276276

277277
The proof of authorization is optional and the need to attach it to a license request is indicated by the presence of at least one `dashif:authzurl` in the [=DRM system configuration=]. The proof of authorization is a [[!jwt|JSON Web Token]] in compact encoding (the `aaa.bbb.ccc` form) returned as the HTTP response body when the DASH client performs a GET request to this URL. The token is attached to a license request in the HTTP `Authorization` header with the `Bearer` type. For details, see [[#CPS-lr-model]].
278278

279-
Error responses from both the authorization service and the license server SHOULD be returned as [[rfc7807]] compatible responses with a 4xx or 5xx status code and `Content-Type: application/problem+json`.
279+
Error responses from both the authorization service and the license server SHOULD be returned as [[rfc7807 obsolete]] compatible responses with a 4xx or 5xx status code and `Content-Type: application/problem+json`.
280280

281281
DASH clients SHOULD implement retry behavior to recover from transient failures and expiration of [=authorization tokens=].
282282

80-Misc.inc.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Note: Changing the [=content keys=] does not increase the cryptographic security
1616
Using a key hierarchy allows a single [=content key=] to selectively unlock only a subset of a DASH presentation and apply license policy updates without the need to perform license requests at every program boundary. This mechanism is a specialization of periodic re-authorization for scenarios where license requests at program boundaries are not always desirable or possible.
1717

1818
<figure>
19-
<img src="Diagrams/KeyHierarchy.png" />
19+
<img src="Diagrams/KeyHierarchy.png" >
2020
<figcaption>A key hierarchy establishes a [=DRM system=] specific relationship between a [=root key=] and a set of [=leaf keys=].</figcaption>
2121
</figure>
2222

@@ -43,7 +43,7 @@ The mechanism by which a set of [=leaf keys=] is made available based on a reque
4343
When using a key hierarchy, the [=leaf keys=] are typically delivered in-band in the media segments, using `moof/pssh` boxes, together with additional/updated license policy constraints. The exact implementation is [=DRM system=] specific and transparent to a DASH client.
4444

4545
<figure>
46-
<img src="Images/KeyHierarchy-NightlyUpdates.png" />
46+
<img src="Images/KeyHierarchy-NightlyUpdates.png" >
4747
<figcaption>Different rows indicate [=root key=] changes. Color alternations indicate [=leaf key=] changes. A key hierarchy enables per-program access control even in scenarios where a license request is only performed once per day. The single license request makes available all the [=leaf keys=] that the user is authorized to use during the next epoch.</figcaption>
4848
</figure>
4949

Guidelines-Security.bs.md

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,27 @@
1-
#include "01-Intro.inc.md"
2-
3-
#include "10-General.inc.md"
4-
#include "40-LicenseRequestModel.inc.md"
5-
#include "60-ClientWorkflows.inc.md"
6-
#include "80-Misc.inc.md"
7-
8-
<!-- Document metadata follows. The below sections are used by the document compiler and are not directly visible. -->
9-
101
<pre class="metadata">
112
Revision: 5.0
123

134
Title: DASH-IF implementation guidelines: content protection and security
145
Status: LS-COMMIT
156
Shortname: dash-security
16-
URL: https://dashif-documents.azurewebsites.net/Guidelines-Security/master/Guidelines-Security.html
7+
URL: https://dashif.org/Guidelines-Security/
8+
Group: dashif
179
Issue Tracking: GitHub https://github.com/Dash-Industry-Forum/Guidelines-Security/issues
18-
Repository: https://github.com/Dash-Industry-Forum/Guidelines-Security GitHub
19-
Editor: DASH Industry Forum
2010

21-
Default Highlight: text
22-
<!-- Enabling line numbers breaks code blocks in PDF! (2018-10-02) -->
23-
Line Numbers: off
24-
Markup Shorthands: markdown yes
25-
Boilerplate: copyright off, abstract off
26-
Abstract: None
2711
</pre>
2812

29-
<!-- Custom bibliography entries go in References.json. Prefer adding your document to SpecRef over maintaining a custom definition. -->
30-
<pre class="biblio">
31-
#include "References.json"
13+
<pre class=include>
14+
path: 01-Intro.inc.md
3215
</pre>
33-
34-
<pre boilerplate="conformance">
35-
<!-- This disables the RFC2119 conformance section, as we use custom DASH-IF specific text for this. -->
16+
<pre class=include>
17+
path: 10-General.inc.md
3618
</pre>
37-
38-
<pre boilerplate="logo">
39-
<a href="https://dashif.org/"><img src="Images/DASH-IF.png" /></a>
19+
<pre class=include>
20+
path: 40-LicenseRequestModel.inc.md
21+
</pre>
22+
<pre class=include>
23+
path: 60-ClientWorkflows.inc.md
24+
</pre>
25+
<pre class=include>
26+
path: 80-Misc.inc.md
4027
</pre>
File renamed without changes.

build.bat

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
@echo off
2+
set IMG=dashif/specs-builder:latest
3+
4+
rem Check if OPTS is defined, if not, set default value
5+
if "%OPTS%"=="" (
6+
set OPTS=-ti
7+
)
8+
9+
rem Collect command-line arguments
10+
set TARGETS=%*
11+
12+
rem If no arguments are provided, use "spec"
13+
if "%TARGETS%"=="" (
14+
set TARGETS=spec
15+
)
16+
17+
rem Add parameters to TARGETS
18+
set TARGETS=%TARGETS% SRC=Guidelines-Security.bs.md NAME=Guidelines-Security
19+
20+
echo Running with targets: '%TARGETS%'
21+
docker run --rm %OPTS% -v "%cd%:/data" -p 8000:8000 %IMG% %TARGETS%
22+

0 commit comments

Comments
 (0)