diff --git a/libwvdrmengine/cdm/core/src/license.cpp b/libwvdrmengine/cdm/core/src/license.cpp index c02e6095..753f9b6b 100644 --- a/libwvdrmengine/cdm/core/src/license.cpp +++ b/libwvdrmengine/cdm/core/src/license.cpp @@ -45,26 +45,33 @@ static std::vector ExtractContentKeys(const License& license) { // Extract content key(s) for (int i = 0; i < license.key_size(); ++i) { - // TODO(fredgc): Figure out what key.type is for Generic Keys. - // If the generic signing key is CONTENT, then the extra size log below is good. - // If it is SIGNING, then we are ignoring it. -- we should fix that by adding - // an else clause to this if statement. - if (license.key(i).type() == License_KeyContainer::CONTENT) { - CryptoKey key; - key.set_key_id(license.key(i).id()); - // Strip off PKCS#5 padding - since we know the key is 16 or 32 bytes, the - // padding will always be 16 bytes. - size_t length = license.key(i).key().size() - 16; - key.set_key_data( license.key(i).key().substr(0, length)); - key.set_key_data_iv(license.key(i).iv()); - if (license.key(i).has_key_control()) { - key.set_key_control( - license.key(i).key_control().key_control_block()); - key.set_key_control_iv( - license.key(i).key_control().iv()); - } - - key_array.push_back(key); + CryptoKey key; + size_t length; + switch (license.key(i).type()) { + case License_KeyContainer::CONTENT: + case License_KeyContainer::OPERATOR_SESSION: + key.set_key_id(license.key(i).id()); + // Strip off PKCS#5 padding - since we know the key is 16 or 32 bytes, + // the padding will always be 16 bytes. + length = license.key(i).key().size() - 16; + key.set_key_data(license.key(i).key().substr(0, length)); + key.set_key_data_iv(license.key(i).iv()); + if (license.key(i).has_key_control()) { + key.set_key_control(license.key(i).key_control().key_control_block()); + key.set_key_control_iv(license.key(i).key_control().iv()); + } + key_array.push_back(key); + break; + case License_KeyContainer::KEY_CONTROL: + if (license.key(i).has_key_control()) { + key.set_key_control(license.key(i).key_control().key_control_block()); + key.set_key_control_iv(license.key(i).key_control().iv()); + key_array.push_back(key); + } + break; + default: + // Ignore SIGNING key types as they are not content related + break; } }