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#ifndef CLEARKEY_JSON_WEB_KEY_H_ 177bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#define CLEARKEY_JSON_WEB_KEY_H_ 187bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 197bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include <media/stagefright/foundation/ABase.h> 207bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include <utils/KeyedVector.h> 217bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include <utils/String8.h> 227bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include <utils/StrongPointer.h> 237bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 247bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include "jsmn.h" 257bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include "Utils.h" 267bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#include "ClearKeyTypes.h" 277bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 287bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongnamespace clearkeydrm { 297bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 307bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongusing android::KeyedVector; 317bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongusing android::sp; 327bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongusing android::String8; 337bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongusing android::Vector; 347bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 357bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wongclass JsonWebKey { 367bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong public: 377bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong JsonWebKey(); 387bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong virtual ~JsonWebKey(); 397bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 407bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong bool extractKeysFromJsonWebKeySet(const String8& jsonWebKeySet, 417bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong KeyMap* keys); 427bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 437bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong private: 447bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong Vector<jsmntok_t> mJsmnTokens; 457bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong Vector<String8> mJsonObjects; 467bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong Vector<String8> mTokens; 477bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 487bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong bool decodeBase64String(const String8& encodedText, 497bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong Vector<uint8_t>* decodedText); 507bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong bool findKey(const String8& jsonObject, String8* keyId, 517bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong String8* encodedKey); 527bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong void findValue(const String8 &key, String8* value); 537bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong bool isJsonWebKeySet(const String8& jsonObject) const; 547bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong bool parseJsonObject(const String8& jsonObject, Vector<String8>* tokens); 557bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong bool parseJsonWebKeySet(const String8& jsonWebKeySet, Vector<String8>* jsonObjects); 567bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 577bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong DISALLOW_EVIL_CONSTRUCTORS(JsonWebKey); 587bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong}; 597bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 607bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong} // namespace clearkeydrm 617bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong 627bdf28d2b83e527f474e96b0984d6a3f5eb457f7Edwin Wong#endif // CLEARKEY_JSON_WEB_KEY_H_ 63