OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cdm/json_web_key.h" | 5 #include "media/cdm/json_web_key.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 namespace media { | 10 namespace media { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 } | 64 } |
65 } | 65 } |
66 }; | 66 }; |
67 | 67 |
68 TEST_F(JSONWebKeyTest, GenerateJWKSet) { | 68 TEST_F(JSONWebKeyTest, GenerateJWKSet) { |
69 const uint8 data1[] = { 0x01, 0x02 }; | 69 const uint8 data1[] = { 0x01, 0x02 }; |
70 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 }; | 70 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 }; |
71 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, | 71 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, |
72 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; | 72 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; |
73 | 73 |
74 EXPECT_EQ("{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}", | |
75 GenerateJWKSet(data1, arraysize(data1), data1, arraysize(data1))); | |
76 EXPECT_EQ( | 74 EXPECT_EQ( |
77 "{\"keys\":[{\"k\":\"AQIDBA\",\"kid\":\"AQIDBA\",\"kty\":\"oct\"}]}", | 75 "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":" |
76 "\"oct\"}]}", | |
77 GenerateJWKSet(data1, arraysize(data1), data1, arraysize(data1))); | |
78 EXPECT_EQ( | |
79 "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQIDBA\",\"kid\":\"AQIDBA\"," | |
80 "\"kty\":\"oct\"}]}", | |
78 GenerateJWKSet(data2, arraysize(data2), data2, arraysize(data2))); | 81 GenerateJWKSet(data2, arraysize(data2), data2, arraysize(data2))); |
79 EXPECT_EQ("{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQIDBA\",\"kty\":\"oct\"}]}", | |
80 GenerateJWKSet(data1, arraysize(data1), data2, arraysize(data2))); | |
81 EXPECT_EQ("{\"keys\":[{\"k\":\"AQIDBA\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}", | |
82 GenerateJWKSet(data2, arraysize(data2), data1, arraysize(data1))); | |
83 EXPECT_EQ( | 82 EXPECT_EQ( |
84 "{\"keys\":[{\"k\":\"AQIDBAUGBwgJCgsMDQ4PEA\",\"kid\":" | 83 "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQIDBA\",\"kty\":" |
84 "\"oct\"}]}", | |
85 GenerateJWKSet(data1, arraysize(data1), data2, arraysize(data2))); | |
86 EXPECT_EQ( | |
87 "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQIDBA\",\"kid\":\"AQI\",\"kty\":" | |
88 "\"oct\"}]}", | |
89 GenerateJWKSet(data2, arraysize(data2), data1, arraysize(data1))); | |
90 EXPECT_EQ( | |
91 "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQIDBAUGBwgJCgsMDQ4PEA\",\"kid\":" | |
85 "\"AQIDBAUGBwgJCgsMDQ4PEA\",\"kty\":\"oct\"}]}", | 92 "\"AQIDBAUGBwgJCgsMDQ4PEA\",\"kty\":\"oct\"}]}", |
86 GenerateJWKSet(data3, arraysize(data3), data3, arraysize(data3))); | 93 GenerateJWKSet(data3, arraysize(data3), data3, arraysize(data3))); |
87 } | 94 } |
88 | 95 |
89 TEST_F(JSONWebKeyTest, ExtractJWKKeys) { | 96 TEST_F(JSONWebKeyTest, ExtractValidJWKKeys) { |
90 // Try a simple JWK key (i.e. not in a set) | 97 // Try an empty 'keys' dictionary. |
91 const std::string kJwkSimple = | 98 ExtractJWKKeysAndExpect("{ \"keys\": [] }", true, 0); |
99 | |
100 // Try a key list with one entry. | |
101 const std::string kJwksOneEntry = | |
92 "{" | 102 "{" |
93 " \"kty\": \"oct\"," | 103 " \"keys\": [" |
94 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | 104 " {" |
95 " \"k\": \"FBUWFxgZGhscHR4fICEiIw\"" | 105 " \"kty\": \"oct\"," |
106 " \"alg\": \"A128KW\"," | |
107 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
108 " \"k\": \"FBUWFxgZGhscHR4fICEiIw\"" | |
109 " }" | |
110 " ]" | |
96 "}"; | 111 "}"; |
97 ExtractJWKKeysAndExpect(kJwkSimple, false, 0); | 112 ExtractJWKKeysAndExpect(kJwksOneEntry, true, 1); |
98 | 113 |
99 // Try a key list with multiple entries. | 114 // Try a key list with multiple entries. |
100 const std::string kJwksMultipleEntries = | 115 const std::string kJwksMultipleEntries = |
101 "{" | 116 "{" |
102 " \"keys\": [" | 117 " \"keys\": [" |
103 " {" | 118 " {" |
104 " \"kty\": \"oct\"," | 119 " \"kty\": \"oct\"," |
120 " \"alg\": \"A128KW\"," | |
105 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | 121 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," |
106 " \"k\": \"FBUWFxgZGhscHR4fICEiIw\"" | 122 " \"k\": \"FBUWFxgZGhscHR4fICEiIw\"" |
107 " }," | 123 " }," |
108 " {" | 124 " {" |
109 " \"kty\": \"oct\"," | 125 " \"kty\": \"oct\"," |
126 " \"alg\": \"A128KW\"," | |
110 " \"kid\": \"JCUmJygpKissLS4vMA\"," | 127 " \"kid\": \"JCUmJygpKissLS4vMA\"," |
111 " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\"" | 128 " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\"" |
112 " }" | 129 " }" |
113 " ]" | 130 " ]" |
114 "}"; | 131 "}"; |
115 ExtractJWKKeysAndExpect(kJwksMultipleEntries, true, 2); | 132 ExtractJWKKeysAndExpect(kJwksMultipleEntries, true, 2); |
116 | 133 |
117 // Try a key with no spaces and some \n plus additional fields. | 134 // Try a key with no spaces and some \n plus additional fields. |
118 const std::string kJwksNoSpaces = | 135 const std::string kJwksNoSpaces = |
119 "\n\n{\"something\":1,\"keys\":[{\n\n\"kty\":\"oct\",\"alg\":\"A128KW\"," | 136 "\n\n{\"something\":1,\"keys\":[{\n\n\"kty\":\"oct\",\"alg\":\"A128KW\"," |
120 "\"kid\":\"AAECAwQFBgcICQoLDA0ODxAREhM\",\"k\":\"GawgguFyGrWKav7AX4VKUg" | 137 "\"kid\":\"AAECAwQFBgcICQoLDA0ODxAREhM\",\"k\":\"GawgguFyGrWKav7AX4VKUg" |
121 "\",\"foo\":\"bar\"}]}\n\n"; | 138 "\",\"foo\":\"bar\"}]}\n\n"; |
122 ExtractJWKKeysAndExpect(kJwksNoSpaces, true, 1); | 139 ExtractJWKKeysAndExpect(kJwksNoSpaces, true, 1); |
123 | 140 |
141 // Try a list with multiple keys with the same kid. | |
142 const std::string kJwksDuplicateKids = | |
143 "{" | |
144 " \"keys\": [" | |
145 " {" | |
146 " \"kty\": \"oct\"," | |
147 " \"alg\": \"A128KW\"," | |
148 " \"kid\": \"JCUmJygpKissLS4vMA\"," | |
149 " \"k\": \"FBUWFxgZGhscHR4fICEiIw\"" | |
150 " }," | |
151 " {" | |
152 " \"kty\": \"oct\"," | |
153 " \"alg\": \"A128KW\"," | |
154 " \"kid\": \"JCUmJygpKissLS4vMA\"," | |
155 " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\"" | |
156 " }" | |
157 " ]" | |
158 "}"; | |
159 ExtractJWKKeysAndExpect(kJwksDuplicateKids, true, 2); | |
160 } | |
161 | |
162 TEST_F(JSONWebKeyTest, ExtractInvalidJWKKeys) { | |
163 // Try a simple JWK key (i.e. not in a set) | |
164 const std::string kJwkSimple = | |
165 "{" | |
166 " \"kty\": \"oct\"," | |
167 " \"alg\": \"A128KW\"," | |
168 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
169 " \"k\": \"FBUWFxgZGhscHR4fICEiIw\"" | |
170 "}"; | |
171 ExtractJWKKeysAndExpect(kJwkSimple, false, 0); | |
172 | |
124 // Try some non-ASCII characters. | 173 // Try some non-ASCII characters. |
125 ExtractJWKKeysAndExpect( | 174 ExtractJWKKeysAndExpect( |
126 "This is not ASCII due to \xff\xfe\xfd in it.", false, 0); | 175 "This is not ASCII due to \xff\xfe\xfd in it.", false, 0); |
127 | 176 |
128 // Try some non-ASCII characters in an otherwise valid JWK. | 177 // Try some non-ASCII characters in an otherwise valid JWK. |
129 const std::string kJwksInvalidCharacters = | 178 const std::string kJwksInvalidCharacters = |
130 "\n\n{\"something\":1,\"keys\":[{\n\n\"kty\":\"oct\",\"alg\":\"A128KW\"," | 179 "\n\n{\"something\":1,\"keys\":[{\n\n\"kty\":\"oct\",\"alg\":\"A128KW\"," |
131 "\"kid\":\"AAECAwQFBgcICQoLDA0ODxAREhM\",\"k\":\"\xff\xfe\xfd" | 180 "\"kid\":\"AAECAwQFBgcICQoLDA0ODxAREhM\",\"k\":\"\xff\xfe\xfd" |
132 "\",\"foo\":\"bar\"}]}\n\n"; | 181 "\",\"foo\":\"bar\"}]}\n\n"; |
133 ExtractJWKKeysAndExpect(kJwksInvalidCharacters, false, 0); | 182 ExtractJWKKeysAndExpect(kJwksInvalidCharacters, false, 0); |
134 | 183 |
135 // Try a badly formatted key. Assume that the JSON parser is fully tested, | 184 // Try a badly formatted key. Assume that the JSON parser is fully tested, |
136 // so we won't try a lot of combinations. However, need a test to ensure | 185 // so we won't try a lot of combinations. However, need a test to ensure |
137 // that the code doesn't crash if invalid JSON received. | 186 // that the code doesn't crash if invalid JSON received. |
138 ExtractJWKKeysAndExpect("This is not a JSON key.", false, 0); | 187 ExtractJWKKeysAndExpect("This is not a JSON key.", false, 0); |
139 | 188 |
140 // Try passing some valid JSON that is not a dictionary at the top level. | 189 // Try passing some valid JSON that is not a dictionary at the top level. |
141 ExtractJWKKeysAndExpect("40", false, 0); | 190 ExtractJWKKeysAndExpect("40", false, 0); |
142 | 191 |
143 // Try an empty dictionary. | 192 // Try an empty dictionary. |
144 ExtractJWKKeysAndExpect("{ }", false, 0); | 193 ExtractJWKKeysAndExpect("{ }", false, 0); |
145 | 194 |
146 // Try an empty 'keys' dictionary. | |
147 ExtractJWKKeysAndExpect("{ \"keys\": [] }", true, 0); | |
jrummell
2014/12/23 00:41:20
Why did you remove this test?
xhwang
2014/12/23 00:54:33
It's move to the "valid test" (l.98 in new code).
| |
148 | |
149 // Try with 'keys' not a dictionary. | 195 // Try with 'keys' not a dictionary. |
150 ExtractJWKKeysAndExpect("{ \"keys\":\"1\" }", false, 0); | 196 ExtractJWKKeysAndExpect("{ \"keys\":\"1\" }", false, 0); |
151 | 197 |
152 // Try with 'keys' a list of integers. | 198 // Try with 'keys' a list of integers. |
153 ExtractJWKKeysAndExpect("{ \"keys\": [ 1, 2, 3 ] }", false, 0); | 199 ExtractJWKKeysAndExpect("{ \"keys\": [ 1, 2, 3 ] }", false, 0); |
154 | 200 |
155 // Try padding(=) at end of 'k' base64 string. | 201 // Try padding(=) at end of 'k' base64 string. |
156 const std::string kJwksWithPaddedKey = | 202 const std::string kJwksWithPaddedKey = |
157 "{" | 203 "{" |
158 " \"keys\": [" | 204 " \"keys\": [" |
159 " {" | 205 " {" |
160 " \"kty\": \"oct\"," | 206 " \"kty\": \"oct\"," |
207 " \"alg\": \"A128KW\"," | |
161 " \"kid\": \"AAECAw\"," | 208 " \"kid\": \"AAECAw\"," |
162 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw==\"" | 209 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw==\"" |
163 " }" | 210 " }" |
164 " ]" | 211 " ]" |
165 "}"; | 212 "}"; |
166 ExtractJWKKeysAndExpect(kJwksWithPaddedKey, false, 0); | 213 ExtractJWKKeysAndExpect(kJwksWithPaddedKey, false, 0); |
167 | 214 |
168 // Try padding(=) at end of 'kid' base64 string. | 215 // Try padding(=) at end of 'kid' base64 string. |
169 const std::string kJwksWithPaddedKeyId = | 216 const std::string kJwksWithPaddedKeyId = |
170 "{" | 217 "{" |
171 " \"keys\": [" | 218 " \"keys\": [" |
172 " {" | 219 " {" |
173 " \"kty\": \"oct\"," | 220 " \"kty\": \"oct\"," |
221 " \"alg\": \"A128KW\"," | |
174 " \"kid\": \"AAECAw==\"," | 222 " \"kid\": \"AAECAw==\"," |
175 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | 223 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" |
176 " }" | 224 " }" |
177 " ]" | 225 " ]" |
178 "}"; | 226 "}"; |
179 ExtractJWKKeysAndExpect(kJwksWithPaddedKeyId, false, 0); | 227 ExtractJWKKeysAndExpect(kJwksWithPaddedKeyId, false, 0); |
180 | 228 |
181 // Try a key with invalid base64 encoding. | 229 // Try a key with invalid base64 encoding. |
182 const std::string kJwksWithInvalidBase64 = | 230 const std::string kJwksWithInvalidBase64 = |
183 "{" | 231 "{" |
184 " \"keys\": [" | 232 " \"keys\": [" |
185 " {" | 233 " {" |
186 " \"kty\": \"oct\"," | 234 " \"kty\": \"oct\"," |
235 " \"alg\": \"A128KW\"," | |
187 " \"kid\": \"!@#$%^&*()\"," | 236 " \"kid\": \"!@#$%^&*()\"," |
188 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | 237 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" |
189 " }" | 238 " }" |
190 " ]" | 239 " ]" |
191 "}"; | 240 "}"; |
192 ExtractJWKKeysAndExpect(kJwksWithInvalidBase64, false, 0); | 241 ExtractJWKKeysAndExpect(kJwksWithInvalidBase64, false, 0); |
193 | 242 |
194 // Empty key id. | 243 // Empty key id. |
195 const std::string kJwksWithEmptyKeyId = | 244 const std::string kJwksWithEmptyKeyId = |
196 "{" | 245 "{" |
197 " \"keys\": [" | 246 " \"keys\": [" |
198 " {" | 247 " {" |
199 " \"kty\": \"oct\"," | 248 " \"kty\": \"oct\"," |
249 " \"alg\": \"A128KW\"," | |
200 " \"kid\": \"\"," | 250 " \"kid\": \"\"," |
201 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | 251 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" |
202 " }" | 252 " }" |
203 " ]" | 253 " ]" |
204 "}"; | 254 "}"; |
205 ExtractJWKKeysAndExpect(kJwksWithEmptyKeyId, false, 0); | 255 ExtractJWKKeysAndExpect(kJwksWithEmptyKeyId, false, 0); |
256 } | |
206 | 257 |
207 // Try a list with multiple keys with the same kid. | 258 TEST_F(JSONWebKeyTest, KeyType) { |
208 const std::string kJwksDuplicateKids = | 259 // Valid key type. |
260 const std::string kJwksWithValidKeyType = | |
209 "{" | 261 "{" |
210 " \"keys\": [" | 262 " \"keys\": [" |
211 " {" | 263 " {" |
212 " \"kty\": \"oct\"," | 264 " \"kty\": \"oct\"," |
213 " \"kid\": \"JCUmJygpKissLS4vMA\"," | 265 " \"alg\": \"A128KW\"," |
214 " \"k\": \"FBUWFxgZGhscHR4fICEiIw\"" | 266 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," |
215 " }," | 267 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" |
216 " {" | |
217 " \"kty\": \"oct\"," | |
218 " \"kid\": \"JCUmJygpKissLS4vMA\"," | |
219 " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\"" | |
220 " }" | 268 " }" |
221 " ]" | 269 " ]" |
222 "}"; | 270 "}"; |
223 ExtractJWKKeysAndExpect(kJwksDuplicateKids, true, 2); | 271 ExtractJWKKeysAndExpect(kJwksWithValidKeyType, true, 1); |
272 | |
273 // Empty key type. | |
274 const std::string kJwksWithEmptyKeyType = | |
275 "{" | |
276 " \"keys\": [" | |
277 " {" | |
278 " \"kty\": \"\"," | |
279 " \"alg\": \"A128KW\"," | |
280 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
281 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | |
282 " }" | |
283 " ]" | |
284 "}"; | |
285 ExtractJWKKeysAndExpect(kJwksWithEmptyKeyType, false, 0); | |
286 | |
287 // Key type is case sensitive. | |
288 const std::string kJwksWithUppercaseKeyType = | |
289 "{" | |
290 " \"keys\": [" | |
291 " {" | |
292 " \"kty\": \"OCT\"," | |
293 " \"alg\": \"A128KW\"," | |
294 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
295 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | |
296 " }" | |
297 " ]" | |
298 "}"; | |
299 ExtractJWKKeysAndExpect(kJwksWithUppercaseKeyType, false, 0); | |
300 | |
301 // Wrong key type. | |
302 const std::string kJwksWithWrongKeyType = | |
303 "{" | |
304 " \"keys\": [" | |
305 " {" | |
306 " \"kty\": \"RSA\"," | |
307 " \"alg\": \"A128KW\"," | |
308 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
309 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | |
310 " }" | |
311 " ]" | |
312 "}"; | |
313 ExtractJWKKeysAndExpect(kJwksWithWrongKeyType, false, 0); | |
314 } | |
315 | |
316 TEST_F(JSONWebKeyTest, Alg) { | |
317 // Valid alg. | |
318 const std::string kJwksWithValidAlg = | |
319 "{" | |
320 " \"keys\": [" | |
321 " {" | |
322 " \"kty\": \"oct\"," | |
323 " \"alg\": \"A128KW\"," | |
324 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
325 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | |
326 " }" | |
327 " ]" | |
328 "}"; | |
329 ExtractJWKKeysAndExpect(kJwksWithValidAlg, true, 1); | |
330 | |
331 // Empty alg. | |
332 const std::string kJwksWithEmptyAlg = | |
333 "{" | |
334 " \"keys\": [" | |
335 " {" | |
336 " \"kty\": \"oct\"," | |
337 " \"alg\": \"\"," | |
338 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
339 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | |
340 " }" | |
341 " ]" | |
342 "}"; | |
343 ExtractJWKKeysAndExpect(kJwksWithEmptyAlg, false, 0); | |
344 | |
345 // Alg is case sensitive. | |
346 const std::string kJwksWithLowercaseAlg = | |
347 "{" | |
348 " \"keys\": [" | |
349 " {" | |
350 " \"kty\": \"oct\"," | |
351 " \"alg\": \"a128kw\"," | |
352 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
353 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | |
354 " }" | |
355 " ]" | |
356 "}"; | |
357 ExtractJWKKeysAndExpect(kJwksWithLowercaseAlg, false, 0); | |
358 | |
359 // Wrong alg. | |
360 const std::string kJwksWithWrongAlg = | |
361 "{" | |
362 " \"keys\": [" | |
363 " {" | |
364 " \"kty\": \"oct\"," | |
365 " \"alg\": \"RS256\"," | |
366 " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\"," | |
367 " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\"" | |
368 " }" | |
369 " ]" | |
370 "}"; | |
371 ExtractJWKKeysAndExpect(kJwksWithWrongAlg, false, 0); | |
224 } | 372 } |
225 | 373 |
226 TEST_F(JSONWebKeyTest, SessionType) { | 374 TEST_F(JSONWebKeyTest, SessionType) { |
227 ExtractSessionTypeAndExpect( | 375 ExtractSessionTypeAndExpect( |
228 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}", | 376 "{\"keys\":[{\"alg\": " |
229 true, | 377 "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}", |
230 MediaKeys::TEMPORARY_SESSION); | 378 true, MediaKeys::TEMPORARY_SESSION); |
231 ExtractSessionTypeAndExpect( | 379 ExtractSessionTypeAndExpect( |
232 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":" | 380 "{\"keys\":[{\"alg\": " |
381 "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":" | |
233 "\"temporary\"}", | 382 "\"temporary\"}", |
234 true, | 383 true, MediaKeys::TEMPORARY_SESSION); |
235 MediaKeys::TEMPORARY_SESSION); | |
236 ExtractSessionTypeAndExpect( | 384 ExtractSessionTypeAndExpect( |
237 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":" | 385 "{\"keys\":[{\"alg\": " |
386 "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":" | |
238 "\"persistent\"}", | 387 "\"persistent\"}", |
239 true, | 388 true, MediaKeys::PERSISTENT_SESSION); |
240 MediaKeys::PERSISTENT_SESSION); | |
241 ExtractSessionTypeAndExpect( | 389 ExtractSessionTypeAndExpect( |
242 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":" | 390 "{\"keys\":[{\"alg\": " |
391 "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":" | |
243 "\"unknown\"}", | 392 "\"unknown\"}", |
244 false, | 393 false, MediaKeys::TEMPORARY_SESSION); |
245 MediaKeys::TEMPORARY_SESSION); | |
246 ExtractSessionTypeAndExpect( | 394 ExtractSessionTypeAndExpect( |
247 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":3}", | 395 "{\"keys\":[{\"alg\": " |
248 false, | 396 "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":3}", |
249 MediaKeys::TEMPORARY_SESSION); | 397 false, MediaKeys::TEMPORARY_SESSION); |
250 } | 398 } |
251 | 399 |
252 TEST_F(JSONWebKeyTest, CreateLicense) { | 400 TEST_F(JSONWebKeyTest, CreateLicense) { |
253 const uint8 data1[] = { 0x01, 0x02 }; | 401 const uint8 data1[] = { 0x01, 0x02 }; |
254 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 }; | 402 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 }; |
255 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, | 403 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, |
256 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; | 404 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; |
257 | 405 |
258 CreateLicenseAndExpect(data1, | 406 CreateLicenseAndExpect(data1, |
259 arraysize(data1), | 407 arraysize(data1), |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
312 | 460 |
313 // Correct tag, but list doesn't contain a string. | 461 // Correct tag, but list doesn't contain a string. |
314 ExtractKeyFromLicenseAndExpect("{\"kids\":[[\"AQI\"]]}", false, NULL, 0); | 462 ExtractKeyFromLicenseAndExpect("{\"kids\":[[\"AQI\"]]}", false, NULL, 0); |
315 | 463 |
316 // Correct tag, but invalid base64 encoding. | 464 // Correct tag, but invalid base64 encoding. |
317 ExtractKeyFromLicenseAndExpect("{\"kids\":[\"!@#$%^&*()\"]}", false, NULL, 0); | 465 ExtractKeyFromLicenseAndExpect("{\"kids\":[\"!@#$%^&*()\"]}", false, NULL, 0); |
318 } | 466 } |
319 | 467 |
320 } // namespace media | 468 } // namespace media |
321 | 469 |
OLD | NEW |