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); | |
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 |