// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. #pragma allow_unsafe_buffers #endif #include "media/cdm/cenc_utils.h" #include <memory> #include "media/base/media_util.h" #include "media/formats/mp4/box_definitions.h" #include "media/formats/mp4/box_reader.h" namespace media { // The initialization data for encrypted media files using the ISO Common // Encryption ('cenc') protection scheme may contain one or more protection // system specific header ('pssh') boxes. // ref: https://w3c.github.io/encrypted-media/cenc-format.html // CENC SystemID for the Common System. // https://w3c.github.io/encrypted-media/cenc-format.html#common-system const uint8_t kCencCommonSystemId[] = …; // Returns true if |input| contains only 1 or more valid 'pssh' boxes, false // otherwise. |pssh_boxes| is updated as the set of parsed 'pssh' boxes. // Note: All boxes in |input| must be 'pssh' boxes. However, if they can't be // properly parsed (e.g. unsupported version), then they will be skipped. static bool ReadAllPsshBoxes( const std::vector<uint8_t>& input, std::vector<mp4::FullProtectionSystemSpecificHeader>* pssh_boxes) { … } bool ValidatePsshInput(const std::vector<uint8_t>& input) { … } bool GetKeyIdsForCommonSystemId(const std::vector<uint8_t>& pssh_boxes, KeyIdList* key_ids) { … } bool GetPsshData(const std::vector<uint8_t>& input, const std::vector<uint8_t>& system_id, std::vector<uint8_t>* pssh_data) { … } } // namespace media