Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: media/cdm/json_web_key_unittest.cc

Issue 798583003: Encrypted Media: Check "alg":"A128KW" in AesDecryptor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cdm/json_web_key.cc ('k') | media/test/data/eme_player_js/utils.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cdm/json_web_key_unittest.cc
diff --git a/media/cdm/json_web_key_unittest.cc b/media/cdm/json_web_key_unittest.cc
index 49ea32bd4568a47f9a216e5fe95515c74d3e5579..2c558b2784a8e4716a5f336aa792602671b8827b 100644
--- a/media/cdm/json_web_key_unittest.cc
+++ b/media/cdm/json_web_key_unittest.cc
@@ -71,30 +71,45 @@ TEST_F(JSONWebKeyTest, GenerateJWKSet) {
const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 };
- EXPECT_EQ("{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}",
- GenerateJWKSet(data1, arraysize(data1), data1, arraysize(data1)));
EXPECT_EQ(
- "{\"keys\":[{\"k\":\"AQIDBA\",\"kid\":\"AQIDBA\",\"kty\":\"oct\"}]}",
+ "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":"
+ "\"oct\"}]}",
+ GenerateJWKSet(data1, arraysize(data1), data1, arraysize(data1)));
+ EXPECT_EQ(
+ "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQIDBA\",\"kid\":\"AQIDBA\","
+ "\"kty\":\"oct\"}]}",
GenerateJWKSet(data2, arraysize(data2), data2, arraysize(data2)));
- EXPECT_EQ("{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQIDBA\",\"kty\":\"oct\"}]}",
- GenerateJWKSet(data1, arraysize(data1), data2, arraysize(data2)));
- EXPECT_EQ("{\"keys\":[{\"k\":\"AQIDBA\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}",
- GenerateJWKSet(data2, arraysize(data2), data1, arraysize(data1)));
EXPECT_EQ(
- "{\"keys\":[{\"k\":\"AQIDBAUGBwgJCgsMDQ4PEA\",\"kid\":"
+ "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQIDBA\",\"kty\":"
+ "\"oct\"}]}",
+ GenerateJWKSet(data1, arraysize(data1), data2, arraysize(data2)));
+ EXPECT_EQ(
+ "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQIDBA\",\"kid\":\"AQI\",\"kty\":"
+ "\"oct\"}]}",
+ GenerateJWKSet(data2, arraysize(data2), data1, arraysize(data1)));
+ EXPECT_EQ(
+ "{\"keys\":[{\"alg\":\"A128KW\",\"k\":\"AQIDBAUGBwgJCgsMDQ4PEA\",\"kid\":"
"\"AQIDBAUGBwgJCgsMDQ4PEA\",\"kty\":\"oct\"}]}",
GenerateJWKSet(data3, arraysize(data3), data3, arraysize(data3)));
}
-TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
- // Try a simple JWK key (i.e. not in a set)
- const std::string kJwkSimple =
+TEST_F(JSONWebKeyTest, ExtractValidJWKKeys) {
+ // Try an empty 'keys' dictionary.
+ ExtractJWKKeysAndExpect("{ \"keys\": [] }", true, 0);
+
+ // Try a key list with one entry.
+ const std::string kJwksOneEntry =
"{"
- " \"kty\": \"oct\","
- " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
- " \"k\": \"FBUWFxgZGhscHR4fICEiIw\""
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"FBUWFxgZGhscHR4fICEiIw\""
+ " }"
+ " ]"
"}";
- ExtractJWKKeysAndExpect(kJwkSimple, false, 0);
+ ExtractJWKKeysAndExpect(kJwksOneEntry, true, 1);
// Try a key list with multiple entries.
const std::string kJwksMultipleEntries =
@@ -102,11 +117,13 @@ TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
" \"keys\": ["
" {"
" \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
" \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
" \"k\": \"FBUWFxgZGhscHR4fICEiIw\""
" },"
" {"
" \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
" \"kid\": \"JCUmJygpKissLS4vMA\","
" \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\""
" }"
@@ -121,6 +138,38 @@ TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
"\",\"foo\":\"bar\"}]}\n\n";
ExtractJWKKeysAndExpect(kJwksNoSpaces, true, 1);
+ // Try a list with multiple keys with the same kid.
+ const std::string kJwksDuplicateKids =
+ "{"
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"JCUmJygpKissLS4vMA\","
+ " \"k\": \"FBUWFxgZGhscHR4fICEiIw\""
+ " },"
+ " {"
+ " \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"JCUmJygpKissLS4vMA\","
+ " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksDuplicateKids, true, 2);
+}
+
+TEST_F(JSONWebKeyTest, ExtractInvalidJWKKeys) {
+ // Try a simple JWK key (i.e. not in a set)
+ const std::string kJwkSimple =
+ "{"
+ " \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"FBUWFxgZGhscHR4fICEiIw\""
+ "}";
+ ExtractJWKKeysAndExpect(kJwkSimple, false, 0);
+
// Try some non-ASCII characters.
ExtractJWKKeysAndExpect(
"This is not ASCII due to \xff\xfe\xfd in it.", false, 0);
@@ -143,9 +192,6 @@ TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
// Try an empty dictionary.
ExtractJWKKeysAndExpect("{ }", false, 0);
- // Try an empty 'keys' dictionary.
- 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).
-
// Try with 'keys' not a dictionary.
ExtractJWKKeysAndExpect("{ \"keys\":\"1\" }", false, 0);
@@ -158,6 +204,7 @@ TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
" \"keys\": ["
" {"
" \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
" \"kid\": \"AAECAw\","
" \"k\": \"BAUGBwgJCgsMDQ4PEBESEw==\""
" }"
@@ -171,6 +218,7 @@ TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
" \"keys\": ["
" {"
" \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
" \"kid\": \"AAECAw==\","
" \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
" }"
@@ -184,6 +232,7 @@ TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
" \"keys\": ["
" {"
" \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
" \"kid\": \"!@#$%^&*()\","
" \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
" }"
@@ -197,56 +246,155 @@ TEST_F(JSONWebKeyTest, ExtractJWKKeys) {
" \"keys\": ["
" {"
" \"kty\": \"oct\","
+ " \"alg\": \"A128KW\","
" \"kid\": \"\","
" \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
" }"
" ]"
"}";
ExtractJWKKeysAndExpect(kJwksWithEmptyKeyId, false, 0);
+}
- // Try a list with multiple keys with the same kid.
- const std::string kJwksDuplicateKids =
+TEST_F(JSONWebKeyTest, KeyType) {
+ // Valid key type.
+ const std::string kJwksWithValidKeyType =
"{"
" \"keys\": ["
" {"
" \"kty\": \"oct\","
- " \"kid\": \"JCUmJygpKissLS4vMA\","
- " \"k\": \"FBUWFxgZGhscHR4fICEiIw\""
- " },"
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksWithValidKeyType, true, 1);
+
+ // Empty key type.
+ const std::string kJwksWithEmptyKeyType =
+ "{"
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"\","
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksWithEmptyKeyType, false, 0);
+
+ // Key type is case sensitive.
+ const std::string kJwksWithUppercaseKeyType =
+ "{"
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"OCT\","
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksWithUppercaseKeyType, false, 0);
+
+ // Wrong key type.
+ const std::string kJwksWithWrongKeyType =
+ "{"
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"RSA\","
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksWithWrongKeyType, false, 0);
+}
+
+TEST_F(JSONWebKeyTest, Alg) {
+ // Valid alg.
+ const std::string kJwksWithValidAlg =
+ "{"
+ " \"keys\": ["
" {"
" \"kty\": \"oct\","
- " \"kid\": \"JCUmJygpKissLS4vMA\","
- " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\""
+ " \"alg\": \"A128KW\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
" }"
" ]"
"}";
- ExtractJWKKeysAndExpect(kJwksDuplicateKids, true, 2);
+ ExtractJWKKeysAndExpect(kJwksWithValidAlg, true, 1);
+
+ // Empty alg.
+ const std::string kJwksWithEmptyAlg =
+ "{"
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"oct\","
+ " \"alg\": \"\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksWithEmptyAlg, false, 0);
+
+ // Alg is case sensitive.
+ const std::string kJwksWithLowercaseAlg =
+ "{"
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"oct\","
+ " \"alg\": \"a128kw\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksWithLowercaseAlg, false, 0);
+
+ // Wrong alg.
+ const std::string kJwksWithWrongAlg =
+ "{"
+ " \"keys\": ["
+ " {"
+ " \"kty\": \"oct\","
+ " \"alg\": \"RS256\","
+ " \"kid\": \"AAECAwQFBgcICQoLDA0ODxAREhM\","
+ " \"k\": \"BAUGBwgJCgsMDQ4PEBESEw\""
+ " }"
+ " ]"
+ "}";
+ ExtractJWKKeysAndExpect(kJwksWithWrongAlg, false, 0);
}
TEST_F(JSONWebKeyTest, SessionType) {
ExtractSessionTypeAndExpect(
- "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}",
- true,
- MediaKeys::TEMPORARY_SESSION);
+ "{\"keys\":[{\"alg\": "
+ "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}",
+ true, MediaKeys::TEMPORARY_SESSION);
ExtractSessionTypeAndExpect(
- "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
+ "{\"keys\":[{\"alg\": "
+ "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
"\"temporary\"}",
- true,
- MediaKeys::TEMPORARY_SESSION);
+ true, MediaKeys::TEMPORARY_SESSION);
ExtractSessionTypeAndExpect(
- "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
+ "{\"keys\":[{\"alg\": "
+ "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
"\"persistent\"}",
- true,
- MediaKeys::PERSISTENT_SESSION);
+ true, MediaKeys::PERSISTENT_SESSION);
ExtractSessionTypeAndExpect(
- "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
+ "{\"keys\":[{\"alg\": "
+ "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
"\"unknown\"}",
- false,
- MediaKeys::TEMPORARY_SESSION);
+ false, MediaKeys::TEMPORARY_SESSION);
ExtractSessionTypeAndExpect(
- "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":3}",
- false,
- MediaKeys::TEMPORARY_SESSION);
+ "{\"keys\":[{\"alg\": "
+ "\"A128KW\",\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":3}",
+ false, MediaKeys::TEMPORARY_SESSION);
}
TEST_F(JSONWebKeyTest, CreateLicense) {
« no previous file with comments | « media/cdm/json_web_key.cc ('k') | media/test/data/eme_player_js/utils.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698