17bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong/* 27bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * Copyright (C) 2014 The Android Open Source Project 37bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * 47bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * Licensed under the Apache License, Version 2.0 (the "License"); 57bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * you may not use this file except in compliance with the License. 67bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * You may obtain a copy of the License at 77bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * 87bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * http://www.apache.org/licenses/LICENSE-2.0 97bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * 107bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * Unless required by applicable law or agreed to in writing, software 117bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * distributed under the License is distributed on an "AS IS" BASIS, 127bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * See the License for the specific language governing permissions and 147bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong * limitations under the License. 157bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong */ 167bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include <utils/Log.h> 177bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 187bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include "JsonWebKey.h" 197bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 207bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include "gtest/gtest.h" 217bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include "Utils.h" 227bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 237bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongnamespace clearkeydrm { 247bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongusing android::String8; 257bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongusing android::Vector; 267bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 277bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongclass JsonWebKeyTest : public ::testing::Test { 287bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong protected: 297bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong JsonWebKey* jwk; 307bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 317bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong JsonWebKeyTest() { 327bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong jwk = new JsonWebKey; 337bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong } 347bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 357bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong virtual ~JsonWebKeyTest() { 367bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong if (jwk) 377bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong delete jwk; 387bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong } 397bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong}; 407bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 417bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongvoid stringFromVector(const Vector<uint8_t>& input, 427bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong String8* converted) { 437bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong converted->clear(); 447bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong if (input.isEmpty()) { 457bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong return; 467bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong } 477bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 487bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong for (size_t i = 0; i < input.size(); ++i) { 497bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong converted->appendFormat("%c", input.itemAt(i)); 507bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong } 517bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 527bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 537bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongvoid verifyKeys(const KeyMap& keys, const String8* clearKeys) { 547bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong if (keys.isEmpty()) { 557bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong return; 567bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong } 577bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 587bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong String8 keyString; 597bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong for (size_t i = 0; i < keys.size(); ++i) { 607bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong stringFromVector(keys.valueAt(i), &keyString); 617bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_EQ(keyString, clearKeys[i]); 627bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong } 637bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 647bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 657bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, NoSymmetricKey) { 667bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 677bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 687bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 697bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"rsa\"," 707bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"," 717bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAx\"," 727bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"1-GawgguFyGrWKav7AX4VKUg\"" 737bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 747bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 757bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 767bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 777bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_FALSE(jwk->extractKeysFromJsonWebKeySet(js, &keys)); 787bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.isEmpty()); 797bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 807bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 817bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, NoKeysTag) { 827bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 837bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 847bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 857bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"," 867bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"," 877bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAx\"," 887bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"1-GawgguFyGrWKav7AX4VKUg\"" 897bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}," 907bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 917bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"," 927bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW2\"," 937bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"," 947bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAy\"" 957bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 967bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 977bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 987bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 997bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_FALSE(jwk->extractKeysFromJsonWebKeySet(js, &keys)); 1007bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.isEmpty()); 1017bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 1027bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1037bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, NoKeyId) { 1047bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 1057bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1067bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"keys\":" 1077bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 1087bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1097bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 1107bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"SGVsbG8gRnJpZW5kISE=\"" 1117bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 1127bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1137bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1147bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW2\"" 1157bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"" 1167bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAy\"" 1177bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 1187bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 1197bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1207bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 1217bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(jwk->extractKeysFromJsonWebKeySet(js, &keys)); 1227bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.size() == 1); 1237bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1247bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 clearKeys("Good day!"); 1257bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong verifyKeys(keys, &clearKeys); 1267bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 1277bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1287bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, NoKey) { 1297bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 1307bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1317bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"keys\":" 1327bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 1337bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1347bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 1357bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"`\"" 1367bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 1377bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1387bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1397bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW2\"" 1407bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"" 1417bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAy\"" 1427bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 1437bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 1447bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1457bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 1467bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(jwk->extractKeysFromJsonWebKeySet(js, &keys)); 1477bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.size() == 1); 1487bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1497bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 clearKeys("Good day!"); 1507bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong verifyKeys(keys, &clearKeys); 1517bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 1527bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1537bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, MalformedKey) { 1547bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 1557bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1567bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"keys\":" 1577bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 1587bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1597bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 1607bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"GawgguFyGrWKav7AX4V???\"" 1617bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"67ef0gd8pvfd0=\"" 1627bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 1637bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1647bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1657bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 1667bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"GawgguFyGrWKav7AX4V???\"" 1677bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":" 1687bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 1697bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1707bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1717bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 1727bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong ":\"GawgguFyGrWKav7AX4V???\"" 1737bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"67ef0gd8pvfd0=\"" 1747bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 1757bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 1767bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 1777bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW3\"" 1787bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAz\"" 1797bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"" 1807bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 1817bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 1827bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1837bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 1847bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(jwk->extractKeysFromJsonWebKeySet(js, &keys)); 1857bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.size() == 1); 1867bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1877bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 clearKeys("Good day!"); 1887bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong verifyKeys(keys, &clearKeys); 1897bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 1907bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1917bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, EmptyJsonWebKey) { 1927bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js; 1937bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 1947bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_FALSE(jwk->extractKeysFromJsonWebKeySet(js, &keys)); 1957bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.isEmpty()); 1967bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 1977bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 1987bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, MalformedJsonWebKey) { 1997bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong // Missing begin array '[' 2007bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 2017bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2027bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"keys\":" 2037bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2047bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2057bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 2067bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"GawgguFyGrWKav7AX4VKUg\"" 2077bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"67ef0gd8pvfd0=\"" 2087bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 2097bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "]" 2107bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 2117bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2127bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 2137bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_FALSE(jwk->extractKeysFromJsonWebKeySet(js, &keys)); 2147bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.isEmpty()); 2157bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 2167bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2177bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, SameKeyId) { 2187bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 2197bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2207bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"keys\":" 2217bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 2227bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2237bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 2247bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAx\"" 2257bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"SGVsbG8gRnJpZW5kISE\"" 2267bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 2277bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2287bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2297bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 2307bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"SGVsbG8gRnJpZW5kIQ\"" 2317bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAx\"" 2327bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 2337bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2347bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2357bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW3\"" 2367bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAz\"" 2377bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"" 2387bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 2397bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 2407bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2417bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 2427bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong jwk->extractKeysFromJsonWebKeySet(js, &keys); 2437bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.size() == 2); 2447bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2457bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 clearKeys[] = 2467bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong { String8("Hello Friend!"), String8("Good day!") }; 2477bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong verifyKeys(keys, clearKeys); 2487bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 2497bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2507bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, ExtractWellFormedKeys) { 2517bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 2527bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2537bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"keys\":" 2547bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 2557bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2567bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 2577bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 2587bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2597bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2607bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW2\"" 2617bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"SGVsbG8gRnJpZW5kIQ\"" 2627bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAy\"" 2637bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 2647bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2657bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2667bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW3\"" 2677bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAz\"" 2687bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"" 2697bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 2707bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 2717bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2727bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 2737bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong jwk->extractKeysFromJsonWebKeySet(js, &keys); 2747bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.size() == 2); 2757bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2767bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 clearKeys[] = 2777bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong { String8("Hello Friend!"), String8("Good day!") }; 2787bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong verifyKeys(keys, clearKeys); 2797bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 2807bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 2817bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin WongTEST_F(JsonWebKeyTest, ExtractKeys) { 2827bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 js( 2837bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2847bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"keys\":" 2857bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "[{" 2867bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAx\"" 2877bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"SGVsbG8gRnJpZW5kISE\"" 2887bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2897bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW1\"" 2907bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 2917bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2927bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 2937bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW2\"" 2947bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"SGVsbG8gRnJpZW5kIQ\"" 2957bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAy\"" 2967bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 2977bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 2987bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"rsa\"" 2997bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW-rsa\"" 3007bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"" 3017bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"rsa-67ef0gd8pvfd0=\"" 3027bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}" 3037bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "{" 3047bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"alg\":\"A128KW3\"" 3057bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kid\":\"Y2xlYXJrZXlrZXlpZDAz\"" 3067bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"k\":\"R29vZCBkYXkh\"" 3077bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "\"kty\":\"oct\"" 3087bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}]" 3097bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong "}"); 3107bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 3117bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap keys; 3127bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong jwk->extractKeysFromJsonWebKeySet(js, &keys); 3137bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong EXPECT_TRUE(keys.size() == 3); 3147bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 3157bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong const String8 clearKeys[] = 3167bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong { String8("Hello Friend!!"), String8("Hello Friend!"), 3177bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong String8("Good day!") }; 3187bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong verifyKeys(keys, clearKeys); 3197bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} 3207bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 3217bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} // namespace clearkeydrm 322