diff --git a/libwvdrmengine/docs/WidevineModularDRMSecurityIntegrationGuideforCENC.pdf b/libwvdrmengine/docs/WidevineModularDRMSecurityIntegrationGuideforCENC.pdf index 7d9a0584..5028ad1e 100644 Binary files a/libwvdrmengine/docs/WidevineModularDRMSecurityIntegrationGuideforCENC.pdf and b/libwvdrmengine/docs/WidevineModularDRMSecurityIntegrationGuideforCENC.pdf differ diff --git a/libwvdrmengine/level3/arm/libwvlevel3.a b/libwvdrmengine/level3/arm/libwvlevel3.a index 26bfcc4a..2d0505d4 100644 Binary files a/libwvdrmengine/level3/arm/libwvlevel3.a and b/libwvdrmengine/level3/arm/libwvlevel3.a differ diff --git a/libwvdrmengine/level3/x86/libwvlevel3.a b/libwvdrmengine/level3/x86/libwvlevel3.a index 971b5274..819be199 100644 Binary files a/libwvdrmengine/level3/x86/libwvlevel3.a and b/libwvdrmengine/level3/x86/libwvlevel3.a differ diff --git a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h index 6f75481f..3d4ed3e5 100644 --- a/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h +++ b/libwvdrmengine/oemcrypto/include/OEMCryptoCENC.h @@ -208,12 +208,13 @@ typedef enum OEMCrypto_Usage_Entry_Status { */ typedef struct { uint8_t signature[20]; // -- HMAC SHA1 of the rest of the report. - int64_t seconds_since_license_received; // now - time_of_license_received - int64_t seconds_since_first_decrypt; // now - time_of_first_decrypt - int64_t seconds_since_last_decrypt; // now - time_of_last_decrypt uint8_t status; // current status of entry. (OEMCrypto_Usage_Entry_Status) uint8_t clock_security_level; uint8_t pst_length; + uint8_t padding; // make int64's word aligned. + int64_t seconds_since_license_received; // now - time_of_license_received + int64_t seconds_since_first_decrypt; // now - time_of_first_decrypt + int64_t seconds_since_last_decrypt; // now - time_of_last_decrypt uint8_t pst[]; } __attribute__((packed)) OEMCrypto_PST_Report; diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index afed83a4..c9dc0aa1 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -4447,6 +4447,29 @@ TEST_F(OEMCryptoClientTest, SupportsUsageTable) { } } +TEST_F(OEMCryptoClientTest, PSTReportSizes) { + if (OEMCrypto_SupportsUsageTable()) { + OEMCrypto_PST_Report report; + uint8_t* location = reinterpret_cast(&report); + EXPECT_EQ(48, sizeof(report)); + uint8_t *field; + field = reinterpret_cast(&report.status); + EXPECT_EQ(20, field - location); + field = reinterpret_cast(&report.clock_security_level); + EXPECT_EQ(21, field - location); + field = reinterpret_cast(&report.pst_length); + EXPECT_EQ(22, field - location); + field = reinterpret_cast(&report.seconds_since_license_received); + EXPECT_EQ(24, field - location); + field = reinterpret_cast(&report.seconds_since_first_decrypt); + EXPECT_EQ(32, field - location); + field = reinterpret_cast(&report.seconds_since_last_decrypt); + EXPECT_EQ(40, field - location); + field = reinterpret_cast(&report.pst); + EXPECT_EQ(48, field - location); + } +} + class DISABLED_UsageTableTest : public DISABLED_GenericDRMTest, public WithParamInterface { public: