-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathwidevine_test.go
121 lines (116 loc) · 2.55 KB
/
widevine_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package widevine
import (
"bytes"
"encoding/base64"
"io"
"net/http"
"os"
"testing"
)
func TestCdm0(t *testing.T) {
key, err := base64.StdEncoding.DecodeString(ctv_ca.key)
if err != nil {
t.Fatal(err)
}
home, err := os.UserHomeDir()
if err != nil {
t.Fatal(err)
}
private_key, err := os.ReadFile(home + "/widevine/private_key.pem")
if err != nil {
t.Fatal(err)
}
client_id, err := os.ReadFile(home + "/widevine/client_id.bin")
if err != nil {
t.Fatal(err)
}
key_id, err := base64.StdEncoding.DecodeString(ctv_ca.key_id)
if err != nil {
t.Fatal(err)
}
var pssh1 Pssh
pssh1.KeyIds = [][]byte{key_id}
pssh1.ContentId, err = base64.StdEncoding.DecodeString(ctv_ca.content_id)
if err != nil {
t.Fatal(err)
}
var cdm1 Cdm
err = cdm1.New(private_key, client_id, pssh1.Marshal())
if err != nil {
t.Fatal(err)
}
data, err := cdm1.RequestBody()
if err != nil {
t.Fatal(err)
}
resp, err := ctv_service(data)
if err != nil {
t.Fatal(err)
}
defer resp.Body.Close()
data, err = io.ReadAll(resp.Body)
if err != nil {
t.Fatal(err)
}
if resp.StatusCode != http.StatusOK {
t.Fatal(resp.Status)
}
var body ResponseBody
err = body.Unmarshal(data)
if err != nil {
t.Fatal(err)
}
block, err := cdm1.Block(body)
if err != nil {
t.Fatal(err)
}
next := body.Container()
for {
container, ok := next()
if !ok {
break
}
if bytes.Equal(container.Id(), key_id) {
if bytes.Equal(container.Key(block), key) {
return
}
}
}
t.Fatal("key not found")
}
func ctv_service(data []byte) (*http.Response, error) {
return http.Post(
"https://license.9c9media.ca/widevine", "application/x-protobuf",
bytes.NewReader(data),
)
}
func TestCdm1(t *testing.T) {
home, err := os.UserHomeDir()
if err != nil {
t.Fatal(err)
}
private_key, err := os.ReadFile(home + "/widevine/private_key.pem")
if err != nil {
t.Fatal(err)
}
var cdm1 Cdm
err = cdm1.New(private_key, nil, nil)
if err != nil {
t.Fatal(err)
}
_, err = cdm1.Block(ResponseBody{})
if err == nil {
t.Fatal("Cdm.Block")
}
}
var ctv_ca = struct {
content_id string
key string
key_id string
url string
}{
content_id: "ZmYtOGYyNjEzYWUtNTIxNTAx",
key: "xQ87t+z5cLOVgxDdSgHyoA==",
key_id: "A98dtspZsb9/z++3IHp0Dw==",
url: "ctv.ca/movies/fools-rush-in-57470",
}