diff --git a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h index d97c8ff3..ca7621d5 100644 --- a/libwvdrmengine/oemcrypto/odk/include/odk_structs.h +++ b/libwvdrmengine/oemcrypto/odk/include/odk_structs.h @@ -15,11 +15,11 @@ extern "C" { #include "odk_target.h" /* The version of this library. */ -#define ODK_MAJOR_VERSION 18 -#define ODK_MINOR_VERSION 4 +#define ODK_MAJOR_VERSION 19 +#define ODK_MINOR_VERSION 0 /* ODK Version string. Date changed automatically on each release. */ -#define ODK_RELEASE_DATE "ODK v18.4 2023-08-03" +#define ODK_RELEASE_DATE "ODK v19.0 2023-07-28" /* The lowest version number for an ODK message. */ #define ODK_FIRST_VERSION 16 diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp index 30e68c4e..1f7b65aa 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_deserialize.cpp @@ -167,11 +167,12 @@ bool CoreProvisioningRequestFromMessage( ODK_NonceValues nonce; if (!GetNonceFromMessage(oemcrypto_core_message, &nonce)) return false; - if (nonce.api_major_version == 18) { + if (nonce.api_major_version >= 18) { // Use special case unpacker for v18.0 - const auto unpacker = nonce.api_minor_version == 0 - ? Unpack_ODK_PreparedProvisioningRequestV180 - : Unpack_ODK_PreparedProvisioningRequest; + const auto unpacker = + nonce.api_minor_version == 0 && nonce.api_major_version == 18 + ? Unpack_ODK_PreparedProvisioningRequestV180 + : Unpack_ODK_PreparedProvisioningRequest; ODK_PreparedProvisioningRequest prepared_provision = {}; if (!ParseRequest(ODK_Provisioning_Request_Type, oemcrypto_core_message, diff --git a/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp b/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp index c8a9c3b0..210c2944 100644 --- a/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp +++ b/libwvdrmengine/oemcrypto/odk/src/core_message_features.cpp @@ -32,6 +32,9 @@ CoreMessageFeatures CoreMessageFeatures::DefaultFeatures( case 18: features.maximum_minor_version = 4; // 18.4 break; + case 19: + features.maximum_minor_version = 0; // 19.0 + break; default: features.maximum_minor_version = 0; } diff --git a/libwvdrmengine/oemcrypto/odk/src/odk.c b/libwvdrmengine/oemcrypto/odk/src/odk.c index 3ade4a76..854cf613 100644 --- a/libwvdrmengine/oemcrypto/odk/src/odk.c +++ b/libwvdrmengine/oemcrypto/odk/src/odk.c @@ -423,7 +423,7 @@ OEMCryptoResult ODK_ParseLicense( *timer_limits = parsed_license->timer_limits; /* And update the clock values state. */ clock_values->timer_status = ODK_CLOCK_TIMER_STATUS_LICENSE_LOADED; - if (nonce_values->api_major_version == 18 && license_load) { + if (nonce_values->api_major_version >= 18 && license_load) { err = ODK_AttemptFirstPlayback(system_time_seconds, timer_limits, clock_values, timer_value); return err; diff --git a/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp b/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp index 0c3f92a3..a4b3f958 100644 --- a/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp +++ b/libwvdrmengine/oemcrypto/odk/test/odk_test.cpp @@ -1217,6 +1217,7 @@ std::vector TestCases() { {16, ODK_MAJOR_VERSION, ODK_MINOR_VERSION, 16, 5}, {17, ODK_MAJOR_VERSION, ODK_MINOR_VERSION, 17, 2}, {18, ODK_MAJOR_VERSION, ODK_MINOR_VERSION, 18, 4}, + {19, ODK_MAJOR_VERSION, ODK_MINOR_VERSION, 19, 0}, // Here are some known good versions. Make extra sure they work. {ODK_MAJOR_VERSION, 16, 3, 16, 3}, {ODK_MAJOR_VERSION, 16, 4, 16, 4}, @@ -1227,6 +1228,7 @@ std::vector TestCases() { {ODK_MAJOR_VERSION, 18, 2, 18, 2}, {ODK_MAJOR_VERSION, 18, 3, 18, 3}, {ODK_MAJOR_VERSION, 18, 4, 18, 4}, + {ODK_MAJOR_VERSION, 19, 0, 19, 0}, {0, 16, 3, 16, 3}, {0, 16, 4, 16, 4}, {0, 16, 5, 16, 5},