From 4de11d11e878e0e4f8e1e8713c9c2caedc17a469 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Fri, 4 Oct 2019 14:10:55 -0700 Subject: [PATCH] Initial v16 ODK Library This commit has the initial ODK library. Partners may use this code to begin integrating the ODK library into their platform. The functionality is not complete, but this should help partners get an early start playing with build files. --- docs/License_Duration_and_Renewal.pdf | Bin 0 -> 313726 bytes docs/Widevine_Core_Message_Serialization.pdf | Bin 0 -> 313377 bytes docs/Widevine_Level_3_OEMCrypto_Guide.pdf | Bin 0 -> 125400 bytes .../Widevine_Modular_DRM_Version_16_Delta.pdf | Bin 0 -> 443634 bytes oemcrypto/include/OEMCryptoCENC.h | 232 ++- oemcrypto/odk/include/odk.h | 310 ++++ oemcrypto/odk/include/odk_assert.h | 27 + oemcrypto/odk/include/odk_overflow.h | 33 + oemcrypto/odk/include/odk_structs.h | 76 + oemcrypto/odk/include/odk_timer.h | 59 + oemcrypto/odk/src/odk.c | 258 +++ oemcrypto/odk/src/odk.gyp | 24 + oemcrypto/odk/src/odk.gypi | 14 + oemcrypto/odk/src/odk_overflow.c | 38 + oemcrypto/odk/src/odk_serialize.c | 115 ++ oemcrypto/odk/src/odk_serialize.h | 44 + oemcrypto/odk/src/odk_structs_priv.h | 48 + oemcrypto/odk/src/odk_timer.c | 39 + oemcrypto/odk/src/serialization_base.c | 199 +++ oemcrypto/odk/src/serialization_base.h | 90 ++ oemcrypto/odk/test/odk_test.cpp | 635 ++++++++ oemcrypto/odk/test/odk_test.gypi | 11 + oemcrypto/odk/test/odk_test.h | 63 + oemcrypto/odk/test/odk_timer_test.cpp | 21 + oemcrypto/oemcrypto_unittests.gyp | 56 + oemcrypto/ref/oec_ref.gypi | 9 +- ...crypto_engine_device_properties_prov30.cpp | 4 +- oemcrypto/ref/src/oemcrypto_engine_ref.cpp | 16 +- oemcrypto/ref/src/oemcrypto_engine_ref.h | 10 +- oemcrypto/ref/src/oemcrypto_key_ref.cpp | 3 +- oemcrypto/ref/src/oemcrypto_nonce_table.cpp | 76 - oemcrypto/ref/src/oemcrypto_nonce_table.h | 42 - .../ref/src/oemcrypto_old_usage_table_ref.cpp | 239 --- .../ref/src/oemcrypto_old_usage_table_ref.h | 101 -- oemcrypto/ref/src/oemcrypto_ref.cpp | 369 +++-- .../ref/src/oemcrypto_rsa_key_shared.cpp | 28 +- oemcrypto/ref/src/oemcrypto_rsa_key_shared.h | 2 +- oemcrypto/ref/src/oemcrypto_session.cpp | 131 +- oemcrypto/ref/src/oemcrypto_session.h | 48 +- .../ref/src/oemcrypto_session_key_table.cpp | 8 +- .../ref/src/oemcrypto_usage_table_ref.cpp | 78 +- oemcrypto/ref/src/oemcrypto_usage_table_ref.h | 16 +- oemcrypto/test/oec_device_features.cpp | 56 +- oemcrypto/test/oec_key_deriver.cpp | 169 ++ oemcrypto/test/oec_key_deriver.h | 90 ++ oemcrypto/test/oec_session_util.cpp | 362 ++--- oemcrypto/test/oec_session_util.h | 70 +- oemcrypto/test/oec_test_data.h | 35 - .../test/oemcrypto_session_tests_helper.cpp | 25 +- oemcrypto/test/oemcrypto_test.cpp | 1413 ++++++++--------- oemcrypto/test/oemcrypto_test_android.cpp | 41 +- oemcrypto/test/oemcrypto_test_main.cpp | 15 +- oemcrypto/test/oemcrypto_unittests.gyp | 38 - oemcrypto/test/oemcrypto_unittests.gypi | 2 + util/include/arraysize.h | 20 + util/include/cdm_random.h | 109 ++ util/include/disallow_copy_and_assign.h | 1 - util/include/log.h | 25 +- util/include/platform.h | 24 +- util/include/string_conversions.h | 3 + util/include/util_common.h | 20 +- util/src/cdm_random.cpp | 107 ++ util/src/dllmain.cpp | 3 +- util/src/string_conversions.cpp | 28 +- util/test/cdm_random_unittest.cpp | 147 ++ 65 files changed, 4371 insertions(+), 2004 deletions(-) create mode 100644 docs/License_Duration_and_Renewal.pdf create mode 100644 docs/Widevine_Core_Message_Serialization.pdf create mode 100644 docs/Widevine_Level_3_OEMCrypto_Guide.pdf create mode 100644 docs/Widevine_Modular_DRM_Version_16_Delta.pdf create mode 100644 oemcrypto/odk/include/odk.h create mode 100644 oemcrypto/odk/include/odk_assert.h create mode 100644 oemcrypto/odk/include/odk_overflow.h create mode 100644 oemcrypto/odk/include/odk_structs.h create mode 100644 oemcrypto/odk/include/odk_timer.h create mode 100644 oemcrypto/odk/src/odk.c create mode 100644 oemcrypto/odk/src/odk.gyp create mode 100644 oemcrypto/odk/src/odk.gypi create mode 100644 oemcrypto/odk/src/odk_overflow.c create mode 100644 oemcrypto/odk/src/odk_serialize.c create mode 100644 oemcrypto/odk/src/odk_serialize.h create mode 100644 oemcrypto/odk/src/odk_structs_priv.h create mode 100644 oemcrypto/odk/src/odk_timer.c create mode 100644 oemcrypto/odk/src/serialization_base.c create mode 100644 oemcrypto/odk/src/serialization_base.h create mode 100644 oemcrypto/odk/test/odk_test.cpp create mode 100644 oemcrypto/odk/test/odk_test.gypi create mode 100644 oemcrypto/odk/test/odk_test.h create mode 100644 oemcrypto/odk/test/odk_timer_test.cpp create mode 100644 oemcrypto/oemcrypto_unittests.gyp delete mode 100644 oemcrypto/ref/src/oemcrypto_nonce_table.cpp delete mode 100644 oemcrypto/ref/src/oemcrypto_nonce_table.h delete mode 100644 oemcrypto/ref/src/oemcrypto_old_usage_table_ref.cpp delete mode 100644 oemcrypto/ref/src/oemcrypto_old_usage_table_ref.h create mode 100644 oemcrypto/test/oec_key_deriver.cpp create mode 100644 oemcrypto/test/oec_key_deriver.h delete mode 100644 oemcrypto/test/oemcrypto_unittests.gyp create mode 100644 util/include/arraysize.h create mode 100644 util/include/cdm_random.h create mode 100644 util/src/cdm_random.cpp create mode 100644 util/test/cdm_random_unittest.cpp diff --git a/docs/License_Duration_and_Renewal.pdf b/docs/License_Duration_and_Renewal.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1800d989d78544c65646c6249e4f9f615966a0f5 GIT binary patch literal 313726 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 z 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 r1s9;GSwPC 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 z zME@plAfzK%gfSGJyFd;jS^knZTpK`+)kgpWy9i6izr=;)a#=Q02nzKtih`YqWeXRD zXBdi63=QXUWV}Ez1t~&FSdO4^R_&62u@aUe2?CxaD1~4+tb+y^><5h_H0&>z%eI9} zaADst1nfP~`!Iyd>NgCOJ-ZGlkaaj86wdAiiekk8r4iT`(1J9)zhU5LfWR>T2&-N& zF2b@8>}0Gs;}i|&2nTZmo>w53UhQpqOGf3Ig-3zW}4*eghh~Bvfl4M_{A*XRS;c z0gjPUbvrv7Uc5-c0V59_CV8%$#dcUkgfKD^5fTC+LPX*bLNGeP8HD6UQCx}?a_#L1 zU>rk4q7>k)jUq6TGWZ}pu5u6-X$Reb& UFXu)aYy}LaK6|#CpS${h0o)xW0{{R3 literal 0 HcmV?d00001 diff --git a/docs/Widevine_Core_Message_Serialization.pdf b/docs/Widevine_Core_Message_Serialization.pdf new file mode 100644 index 0000000000000000000000000000000000000000..082d167bb02f13aa973b220a350d0db971edf017 GIT binary patch literal 313377 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 z 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�cq#CXEDrn<>XKBe1+qMxXwe}~<+a{ET?mVlcR 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%0AE#OC!4m{$jvLs? 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 LLS22gt(nB%ZZM|? literal 0 HcmV?d00001 diff --git a/docs/Widevine_Level_3_OEMCrypto_Guide.pdf b/docs/Widevine_Level_3_OEMCrypto_Guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..50142d6ace46805737da827d2ac84d3e1dec57fd GIT binary patch literal 125400 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 z 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 ijmczMmp28GP&~e# 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 W`r;n@qR^}$MOD_DH(@6Ftp5Q}AG~w` literal 0 HcmV?d00001 diff --git a/docs/Widevine_Modular_DRM_Version_16_Delta.pdf b/docs/Widevine_Modular_DRM_Version_16_Delta.pdf new file mode 100644 index 0000000000000000000000000000000000000000..48036896072d67b182a46529acca3fd9b4354112 GIT binary patch literal 443634 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 vt(@H#>+R7;#b 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%0A>Bs|MhfYsMUT-y8ng*H5CVs;9>53Xo*MJ+O?{kE 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 +#include "OEMCryptoCENC.h" +#include "odk_structs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * ODK_PrepareCoreLicenseRequest + * + * Description + * OEMCrypto will use ODK_PrepareCoreLicenseRequest to prepare the core + * license request message. + * + * If ODK_PrepareCoreLicenseRequest returns OEMCrypto_SUCCESS, then + * OEMCrypto shall sign the concatenation of the core message and a non-core + * CDM protobuf message using the DRM certificate's private key. If it + * returns an error, the error should be returned by OEMCrypto to the CDM + * layer. + * + * We use nonce to prevent replay attacks. + * + * We use session_id and nonce in license request/response to prevent + * birthday attacks that attemp to trigger nonce collision. + * + * Parameters: + * [in/out] message: + * Pointer to memory for the entire message. + * Modified by the ODK library. + * [in] message_length: length of the entire message buffer. + * [in/out] core_message_length: + * length of the core message at the beginning of the message. + * (in) size of buffer reserved for the core message, in bytes. + * (out) actual length of the core message, in bytes. + * [in] api_version: should be the same as OEMCrypto_APIVersion + * [in] nonce: the nonce generated by OEMCrypto_GenerateNonce + * [in] session_id: the current session id. + * + * Returns: + * OEMCrypto_SUCCESS success + * OEMCrypto_ERROR_SHORT_BUFFER if buffer is too short + */ +OEMCryptoResult ODK_PrepareCoreLicenseRequest( + uint8_t* message, size_t message_length, size_t* core_message_length, + uint32_t api_version, uint32_t nonce, uint32_t session_id); + +/* + * ODK_PrepareCoreRenewalRequest + * + * Description: + * OEMCrypto will use ODK_PrepareCoreRenewalRequest to prepare the core + * license renewal message. + * + * If ODK_PrepareCoreRenewalRequest returns OEMCrypto_SUCCESS, then OEMCrypto + * signs the concatenation of the core message and a non-core CDM + * protobuf message using the session's client renewal mac key. If it returns + * an error, the error should be returned by OEMCrypto to the CDM layer. This + * renewal mac key will have been delivered in the license via LoadLicense. + * + * The proper value of timers and clocks are discussed in the document "Timer + * and License Renewal Updates". It is important to notice that the nonce + * passed into the renewal message is from the original message loaded via + * LoadLicense. A new nonce is not used for each renewal. + * + * Parameters: + * [in/out] message: + * Pointer to memory for the entire message. + * Modified by the ODK library. + * [in] message_length: length of the entire message buffer. + * [in/out] core_message_length: + * length of the core message at the beginning of the message. + * (in) size of buffer reserved for the core message, in bytes. + * (out) actual length of the core message, in bytes. + * [in] api_version:should be the same as OEMCrypto_APIVersion + * [in] license_nonce: the nonce from the original license. + * [in] session_id: the current session id. + * [in] clock_values: the sessions clock values. + * [in] system_time_seconds: the current time on OEMCrypto's clock. + * + * Returns: + * OEMCrypto_SUCCESS success + * OEMCrypto_ERROR_SHORT_BUFFER if buffer is too short + */ +OEMCryptoResult ODK_PrepareCoreRenewalRequest( + uint8_t* message, size_t message_length, size_t* core_message_length, + uint32_t api_version, uint32_t license_nonce, uint32_t session_id, + const ODK_ClockValues* clock_values, uint64_t system_time_seconds); + +/* + * ODK_PrepareCoreProvisioningRequest + * + * Description: + * OEMCrypto will use ODK_PrepareCoreProvisioningRequest to prepare the core + * provisioning message. + * + * If ODK_PrepareCoreProvisioningRequest returns OEMCrypto_SUCCESS, then + * OEMCrypto shall sign the concatenation of the core message and a non-core + * CDM protobuf message. If it returns an error, the error should be returned + * by OEMCrypto to the CDM layer. + * + * For a device that has a keybox, i.e. Provisioning 2.0, OEMCrypto will sign + * the response with the session’s derived client mac key. + * + * For a device that has an OEM Certificate, i.e. Provisioning 3.0, OEMCrypto + * will sign the response with the private key associated with the OEM + * Certificate. + * + * Parameters: + * [in/out] message: + * Pointer to memory for the entire message. + * Modified by the ODK library. + * [in] message_length: length of the entire message buffer. + * [in/out] core_message_length: + * length of the core message at the beginning of the message. + * (in) size of buffer reserved for the core message, in bytes. + * (out) actual length of the core message, in bytes. + * [in] api_version: should be the same as OEMCrypto_APIVersion + * [in] nonce: the nonce generated by OEMCrypto_GenerateNonce + * [in] session_id: the current session id. + * [in] device_id: + * For devices with a keybox, this is the device id from the keybox. + * For devices with an OEM Certificate, this is a device unique id string. + * [in] device_id_length: length of device_id, at most 64 bytes. + * + * Returns: + * OEMCrypto_SUCCESS success + * OEMCrypto_ERROR_SHORT_BUFFER if buffer is too short + */ +OEMCryptoResult ODK_PrepareCoreProvisioningRequest( + uint8_t* message, size_t message_length, size_t* core_message_length, + uint32_t api_version, uint32_t nonce, uint32_t session_id, + const uint8_t* const device_id, uint32_t device_id_length); + +/* + * ODK_ParseLicense + * + * Description: + * OEMCrypto will use ODK_ParseLicense to parse and verify the license + * response. + * + * ODK_ParseLicense will parse the license response and verify: + * 1. Either the nonce matches the one passed in or + * the license does not require a nonce. + * 2. The API version of the license response matches. + * 3. The session id of the license response matches. + * + * ODK_ParseLicense will parse the message and set each OEMCrypto_Substring + * output field to a location in the license response. If the license + * response does not parse correctly, ODK_ParseLicense will return an error + * that OEMCrypto should return to the CDM. + * + * Parameters: + * [in] message: pointer to license response message + * [in] message_length: length of the license response + * [in] api_version: should be the same as OEMCrypto_APIVersion + * [in] nonce: the last nonce generated by OEMCrypto_GenerateNonce + * [in] session_id: the current session id. + * [in] initial_license_load: + * true when called for OEMCrypto_LoadLicense + * false when called for OEMCrypto_ReloadLicense + * [in] usage_entry_present: + * whether the session has a new usage entry associated with it created via + * OEMCrypto_CreateNewUsageEntry + * [in] max_num_keys: + * the maximum size of the array key_array. + * For many implementations, this is a compile time constant + * [out] parsed_license: destination struct for parsed output + * + * Returns: + * OEMCrypto_SUCCESS success + * ODK_ERROR_CORE_MESSAGE + * if the license response did not parse correctly, + * or there were other incorrect values. + */ +OEMCryptoResult ODK_ParseLicense(const uint8_t* message, size_t message_length, + uint32_t api_version, uint32_t nonce, + uint32_t session_id, bool initial_license_load, + bool usage_entry_present, size_t max_num_keys, + ODK_ParsedLicense* parsed_license); + +/* + * ODK_ParseRenewal + * + * Description: + * OEMCrypto will use ODK_ParseRenewal to parse and verify the renewal + * response. + * + * If ODK_ParseRenewal returns success, then the session's timers and clocks + * will be updated as described in the document "Timer and License Renewal + * Updates" and in "Widevine Modular DRM Version 16 Delta". If + * ODK_ParseRenewal returns an error, OEMCrypto returns the error to the CDM + * layer. + * + * Parameters: + * [in] message: pointer to renewal response message + * [in] message_length: length of the renewal response + * [in] api_version: should be the same as OEMCrypto_APIVersion + * [in] license_nonce: the nonce from the original license. + * [in] session_id: the current session id. + * [in] system_time: the current time on OEMCrypto's clock. + * [in] timer_limits: timer limits specified in the license. + * [in/out] clock_values: the sessions clock values. + * [out] timer_value: + * set to the new timer value. + * Only used if the return value is ODK_SET_TIMER. + * + * Returns: + * ODK_ERROR_CORE_MESSAGE + * if the renewal response did not parse correctly, + * or there were other incorrect values. + * ODK_SET_TIMER Success, reset timer to the specified timer value. + * ODK_DISABLE_TIMER Success, but disable timer. Allow Unlimited playback. + * ODK_TIMER_EXPIRED Disable timer. Playback is not allowed. + */ +OEMCryptoResult ODK_ParseRenewal(const uint8_t* message, size_t message_length, + uint32_t api_version, uint32_t license_nonce, + uint32_t session_id, uint64_t system_time, + const ODK_TimerLimits* timer_limits, + ODK_ClockValues* clock_values, + uint64_t* timer_value); + +/* + * ODK_ParseProvisioning + * + * Description: + * OEMCrypto will use ODK_ParseProvisioning to parse and verify the + * provisioning response. + * + * After the provisioning response has been parsed, OEMCrypto does the same + * verification and data flow as the v15 functions + * OEMCrypto_RewrapDeviceRSAKey or OEMCrypto_RewrapDeviceRSAKey30 depending + * on if the device has a keybox (Provisioning 2.0) or has an OEM Certificate + * (Provisioning 3.0). + * + * Parameters: + * [in] message: pointer to renewal response message + * [in] message_length: length of the renewal response + * [in] api_version: should be the same as OEMCrypto_APIVersion + * [in] nonce: the last nonce generated by OEMCrypto_GenerateNonce + * [in] session_id: the current session id. + * [in] device_id: + * For devices with a keybox, this is the device id from the keybox. + * For devices with an OEM Certificate, this is a device unique id string. + * [in] device_id_length: length of device_id, at most 64 bytes. + * [out] parsed_response: destination struct for parsed output + * + * Returns: + * OEMCrypto_SUCCESS success + * ODK_ERROR_CORE_MESSAGE + * if the provisioning response did not parse correctly, + * or there were other incorrect values. + */ +OEMCryptoResult ODK_ParseProvisioning( + const uint8_t* message, size_t message_length, uint32_t api_version, + uint32_t nonce, uint32_t session_id, const uint8_t* device_id, + size_t device_id_length, ODK_ParsedProvisioning* parsed_response); + +#ifdef __cplusplus +} +#endif + +#endif // ODK_H_ diff --git a/oemcrypto/odk/include/odk_assert.h b/oemcrypto/odk/include/odk_assert.h new file mode 100644 index 0000000..e1a21fd --- /dev/null +++ b/oemcrypto/odk/include/odk_assert.h @@ -0,0 +1,27 @@ + +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef ODK_ASSERT_H_ +#define ODK_ASSERT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#if (__STDC_VERSION__ >= 201112L) +# include +# define odk_static_assert static_assert +#else +# define odk_static_assert(msg, e) \ + enum { odk_static_assert = 1 / (!!((msg) && (e))) }; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ODK_ASSERT_H_ */ diff --git a/oemcrypto/odk/include/odk_overflow.h b/oemcrypto/odk/include/odk_overflow.h new file mode 100644 index 0000000..32aebe7 --- /dev/null +++ b/oemcrypto/odk/include/odk_overflow.h @@ -0,0 +1,33 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef ODK_OVERFLOW_H_ +#define ODK_OVERFLOW_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __has_builtin +# define __has_builtin(x) 0 +#endif + +#if (defined(__GNUC__) && __GNUC__ >= 5) || \ + __has_builtin(__builtin_add_overflow) +# define odk_sub_overflow_u64 __builtin_sub_overflow +# define odk_add_overflow_u64 __builtin_add_overflow +# define odk_add_overflow_ux __builtin_add_overflow +#else +int odk_sub_overflow_u64(uint64_t a, uint64_t b, uint64_t* c); +int odk_add_overflow_u64(uint64_t a, uint64_t b, uint64_t* c); +int odk_add_overflow_ux(size_t a, size_t b, size_t* c); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ODK_OVERFLOW_H_ */ diff --git a/oemcrypto/odk/include/odk_structs.h b/oemcrypto/odk/include/odk_structs.h new file mode 100644 index 0000000..80753ee --- /dev/null +++ b/oemcrypto/odk/include/odk_structs.h @@ -0,0 +1,76 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef ODK_STRUCTS_H_ +#define ODK_STRUCTS_H_ + +#include +#include "OEMCryptoCENC.h" + +#define ODK_MAX_NUM_KEYS 32 + +/* + * ODK_TimerLimits is filled out by the function ODK_ParseLicense. + * + * The fields in this structure are defined in the core license response + * message. This structure should be kept as part of the session and used + * when calling the ODK timer functions described in the document "License + * Duration and Renewal" distributed as part of the OEMCrypto v16 design. + */ +typedef struct { + uint32_t /*boolean*/ soft_expiry; + uint64_t earliest_playback_start_seconds; + uint64_t latest_playback_start_seconds; + uint64_t initial_playback_duration_seconds; + uint64_t renewal_playback_duration_seconds; + uint64_t license_duration_seconds; +} ODK_TimerLimits; + +/* + * ODK_ParsedLicense holds fields from the core license response. + */ +typedef struct { + OEMCrypto_Substring enc_mac_keys_iv; + OEMCrypto_Substring enc_mac_keys; + OEMCrypto_Substring pst; + OEMCrypto_Substring srm_restriction_data; + uint32_t license_type; + uint32_t nonce_required; + ODK_TimerLimits timer_limits; + uint32_t key_array_length; /* num_keys */ + OEMCrypto_KeyObject key_array[ODK_MAX_NUM_KEYS]; +} ODK_ParsedLicense; + +/* + * ODK_ParsedProvisioning holds fields from the core provisioning response. + */ +typedef struct { + uint32_t key_type; + OEMCrypto_Substring enc_private_key; + OEMCrypto_Substring enc_private_key_iv; + OEMCrypto_Substring encrypted_message_key; /* Used for Prov 3.0 */ +} ODK_ParsedProvisioning; + +/* + * ODK_ClockValues keeps information about a session's current clock values + * and timers. + * + * Most of the fields in this structure are saved in the usage entry for each + * session. This structure should be initialized when a usage entry is + * created or loaded, and should be used to save a usage entry. It is + * updated using ODK functions listed in the document "License Duration and + * Renewal". The time values are based on OEMCrypto’s system clock. + */ +typedef struct { + uint64_t time_of_license_signed; + uint64_t time_of_first_decrypt; + uint64_t time_of_last_decrypt; + uint64_t time_when_timer_expires; + uint32_t timer_status; + enum OEMCrypto_Usage_Entry_Status status; +} ODK_ClockValues; + +#endif // ODK_STRUCTS_H_ diff --git a/oemcrypto/odk/include/odk_timer.h b/oemcrypto/odk/include/odk_timer.h new file mode 100644 index 0000000..aa237d7 --- /dev/null +++ b/oemcrypto/odk/include/odk_timer.h @@ -0,0 +1,59 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +/********************************************************************* + * odk_timer.h + * + * OEMCrypto v16 Timer and Renewal Functions + * + *********************************************************************/ + +#ifndef ODK_TIMER_H_ +#define ODK_TIMER_H_ + +#include +#include "OEMCryptoCENC.h" +#include "odk_structs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + Documentation to be added later. Hopefully automaically from doc. + */ +void ODK_InitializeClockValues(ODK_ClockValues* clock_values, + uint64_t system_time_seconds); + +/* + Documentation to be added later. Hopefully automaically from doc. + */ +void ODK_ReloadClockValues(ODK_ClockValues* clock_values, + uint64_t time_of_license_signed, + uint64_t time_of_first_decrypt, + uint64_t time_of_last_decrypt, + enum OEMCrypto_Usage_Entry_Status status, + uint64_t system_time_seconds); + +/* + Documentation to be added later. Hopefully automaically from doc. + */ +uint32_t ODK_AttemptFirstPlayback(uint64_t system_time_seconds, + const ODK_TimerLimits* timer_limits, + ODK_ClockValues* clock_values, + uint64_t* timer_value); +/* + Documentation to be added later. Hopefully automaically from doc. + */ +OEMCryptoResult ODK_UpdateLastPlaybackTime(const ODK_TimerLimits* timer_limits, + uint64_t system_time_seconds, + ODK_ClockValues* clock_values); + +#ifdef __cplusplus +} +#endif + +#endif /* ODK_TIMER_H_ */ diff --git a/oemcrypto/odk/src/odk.c b/oemcrypto/odk/src/odk.c new file mode 100644 index 0000000..d91b260 --- /dev/null +++ b/oemcrypto/odk/src/odk.c @@ -0,0 +1,258 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#include +#include +#include + +#include "odk.h" +#include "odk_overflow.h" +#include "odk_serialize.h" +#include "odk_structs.h" +#include "odk_structs_priv.h" +#include "serialization_base.h" + +typedef enum { + ODK_License_Request_Type = 1, + ODK_License_Response_Type = 2, + ODK_Renewal_Request_Type = 3, + ODK_Renewal_Response_Type = 4, + ODK_Provisioning_Request_Type = 5, + ODK_Provisioning_Response_Type = 6, +} ODK_MessageType; + +#define ODK_LICENSE_REQUEST_SIZE 20 +#define ODK_RENEWAL_REQUEST_SIZE 28 +#define ODK_PROVISIONING_REQUEST_SIZE 88 + +/* @ private odk functions */ + +OEMCryptoResult ODK_PrepareRequest(uint8_t* buffer, size_t buffer_length, + size_t* core_message_length, + uint32_t message_type, uint32_t api_version, + uint32_t nonce, uint32_t session_id, + ODK_CoreMessage* core_message) { + if (!core_message_length || !core_message || + *core_message_length > buffer_length) { + return ODK_ERROR_CORE_MESSAGE; + } + + Message* msg = NULL; + AllocateMessage(&msg, message_block); + InitMessage(msg, buffer, *core_message_length); + *core_message = (ODK_CoreMessage){ + message_type, 0, api_version, nonce, session_id, + }; + + switch (message_type) { + case ODK_License_Request_Type: { + core_message->message_length = ODK_LICENSE_REQUEST_SIZE; + Pack_ODK_PreparedLicense(msg, (ODK_PreparedLicense*)core_message); + break; + } + case ODK_Renewal_Request_Type: { + core_message->message_length = ODK_RENEWAL_REQUEST_SIZE; + Pack_ODK_RenewalMessage(msg, (ODK_RenewalMessage*)core_message); + break; + } + case ODK_Provisioning_Request_Type: { + core_message->message_length = ODK_PROVISIONING_REQUEST_SIZE; + Pack_ODK_ProvisioningMessage(msg, (ODK_ProvisioningMessage*)core_message); + break; + } + default: { + return ODK_ERROR_CORE_MESSAGE; + } + } + + *core_message_length = core_message->message_length; + if (GetStatus(msg) != MESSAGE_STATUS_OK || + GetSize(msg) != *core_message_length) { + return OEMCrypto_ERROR_SHORT_BUFFER; + } + return OEMCrypto_SUCCESS; +} + +OEMCryptoResult ODK_ParseResponse(const uint8_t* buf, size_t message_length, + uint32_t message_type, uint32_t api_version, + uint32_t nonce, uint32_t session_id, + ODK_CoreMessage* const core_message) { + Message* msg = NULL; + AllocateMessage(&msg, message_block); + InitMessage(msg, (uint8_t*)buf, message_length); + SetSize(msg, message_length); + + switch (message_type) { + case ODK_License_Response_Type: { + Unpack_ODK_LicenseResponse(msg, (ODK_LicenseResponse*)core_message); + break; + } + case ODK_Renewal_Response_Type: { + Unpack_ODK_RenewalMessage(msg, (ODK_RenewalMessage*)core_message); + break; + } + case ODK_Provisioning_Response_Type: { + Unpack_ODK_ProvisioningResponse(msg, + (ODK_ProvisioningResponse*)core_message); + break; + } + default: { + return ODK_ERROR_CORE_MESSAGE; + } + } + + if (GetStatus(msg) != MESSAGE_STATUS_OK || + message_type != core_message->message_type || + GetOffset(msg) != core_message->message_length || + api_version != core_message->api_version || + nonce != core_message->nonce || session_id != core_message->session_id) { + return ODK_ERROR_CORE_MESSAGE; + } + + return OEMCrypto_SUCCESS; +} + +/* @ public odk functions */ + +/* @@ prepare request functions */ + +OEMCryptoResult ODK_PrepareCoreLicenseRequest( + uint8_t* message, size_t message_length, size_t* core_message_length, + uint32_t api_version, uint32_t nonce, uint32_t session_id) { + ODK_PreparedLicense license_request = {0}; + return ODK_PrepareRequest(message, message_length, core_message_length, + ODK_License_Request_Type, api_version, nonce, + session_id, &license_request.core_message); +} + +OEMCryptoResult ODK_PrepareCoreRenewalRequest( + uint8_t* message, size_t message_length, size_t* core_message_length, + uint32_t api_version, uint32_t license_nonce, uint32_t session_id, + const ODK_ClockValues* clock_values, uint64_t system_time_seconds) { + ODK_RenewalMessage renewal_request = {0}; + if (odk_sub_overflow_u64(system_time_seconds, + clock_values->time_of_first_decrypt, + &renewal_request.playback_time)) { + return ODK_ERROR_CORE_MESSAGE; + } + return ODK_PrepareRequest( + message, message_length, core_message_length, ODK_Renewal_Request_Type, + api_version, license_nonce, session_id, &renewal_request.core_message); +} + +OEMCryptoResult ODK_PrepareCoreProvisioningRequest( + uint8_t* message, size_t message_length, size_t* core_message_length, + uint32_t api_version, uint32_t nonce, uint32_t session_id, + const uint8_t* device_id, uint32_t device_id_length) { + ODK_ProvisioningMessage provisioning_request = {0}; + if (device_id_length > sizeof(provisioning_request.device_id)) { + return ODK_ERROR_CORE_MESSAGE; + } + provisioning_request.device_id_length = device_id_length; + if (device_id) { + memcpy(provisioning_request.device_id, device_id, device_id_length); + } + return ODK_PrepareRequest(message, message_length, core_message_length, + ODK_Provisioning_Request_Type, api_version, nonce, + session_id, &provisioning_request.core_message); +} + +/* @@ parse request functions */ + +OEMCryptoResult ODK_ParseLicense(const uint8_t* message, size_t message_length, + uint32_t api_version, uint32_t nonce, + uint32_t session_id, bool initial_license_load, + bool usage_entry_present, size_t max_num_keys, + ODK_ParsedLicense* parsed_license) { + /* todo: check initial_license_load, usage_entry_present, and nonce_reqiured + */ + + if (!parsed_license) { + return ODK_ERROR_CORE_MESSAGE; + } + + ODK_LicenseResponse license_response = {{0}, parsed_license, max_num_keys}; + OEMCryptoResult err = ODK_ParseResponse( + message, message_length, ODK_License_Response_Type, api_version, nonce, + session_id, &license_response.core_message); + + return err; +} + +OEMCryptoResult ODK_ParseRenewal(const uint8_t* message, size_t message_length, + uint32_t api_version, uint32_t license_nonce, + uint32_t session_id, uint64_t system_time, + const ODK_TimerLimits* timer_limits, + ODK_ClockValues* clock_values, + uint64_t* timer_value) { + if (!timer_limits || !clock_values || !timer_value) { + return ODK_ERROR_CORE_MESSAGE; + } + + ODK_RenewalMessage renewal_response = {0}; + OEMCryptoResult err = ODK_ParseResponse( + message, message_length, ODK_Renewal_Response_Type, api_version, + license_nonce, session_id, &renewal_response.core_message); + + if (err) { + return err; + } + + /* Reference: + * Doc: License Duration and Renewal (Changes for OEMCrypto v16) + * Section: Renewal Message + */ + + uint64_t playback_timer = 0; + if (odk_sub_overflow_u64(clock_values->time_when_timer_expires, system_time, + &playback_timer)) { + return ODK_TIMER_EXPIRED; + } + + uint64_t time_since_playback_began = 0; + uint64_t time_since_reset = 0; + uint64_t time_since_message_signed = 0; + /* ... or use clock_values->time_of_license_signed ? */ + if (odk_sub_overflow_u64(system_time, clock_values->time_of_first_decrypt, + &time_since_playback_began) || + odk_sub_overflow_u64(timer_limits->renewal_playback_duration_seconds, + playback_timer, &time_since_reset) || + odk_sub_overflow_u64(time_since_playback_began, + renewal_response.playback_time, + &time_since_message_signed) || + time_since_message_signed >= time_since_reset || + odk_add_overflow_u64(system_time, + timer_limits->renewal_playback_duration_seconds, + &clock_values->time_when_timer_expires)) { + return ODK_ERROR_CORE_MESSAGE; + } + + /* todo: when to return ODK_DISABLE_TIMER */ + *timer_value = timer_limits->renewal_playback_duration_seconds; + return ODK_SET_TIMER; +} + +OEMCryptoResult ODK_ParseProvisioning( + const uint8_t* message, size_t message_length, uint32_t api_version, + uint32_t nonce, uint32_t session_id, const uint8_t* device_id, + size_t device_id_length, ODK_ParsedProvisioning* parsed_response) { + if (!device_id || !parsed_response) { + return ODK_ERROR_CORE_MESSAGE; + } + + ODK_ProvisioningResponse provisioning_response = {{0}, parsed_response}; + OEMCryptoResult err = ODK_ParseResponse( + message, message_length, ODK_Provisioning_Response_Type, api_version, + nonce, session_id, &provisioning_response.core_provisioning.core_message); + + if (err || + memcmp(device_id, provisioning_response.core_provisioning.device_id, + device_id_length)) { + return err; + } + + return OEMCrypto_SUCCESS; +} diff --git a/oemcrypto/odk/src/odk.gyp b/oemcrypto/odk/src/odk.gyp new file mode 100644 index 0000000..0b68fdc --- /dev/null +++ b/oemcrypto/odk/src/odk.gyp @@ -0,0 +1,24 @@ +# Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +# source code may only be used and distributed under the Widevine Master License +# Agreement. + +{ + 'targets': [ + { + 'target_name': 'odk', + 'type': 'static_library', + 'include_dirs': [ + '../include', + '../../include', + ], + 'includes' : [ + 'odk.gypi', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '../include', + ], + } + }, + ], +} diff --git a/oemcrypto/odk/src/odk.gypi b/oemcrypto/odk/src/odk.gypi new file mode 100644 index 0000000..f8b5fb3 --- /dev/null +++ b/oemcrypto/odk/src/odk.gypi @@ -0,0 +1,14 @@ +# Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +# source code may only be used and distributed under the Widevine Master License +# Agreement. + +{ + 'sources': [ + 'odk.c', + 'odk_overflow.c', + 'odk_serialize.c', + 'odk_timer.c', + 'serialization_base.c', + ], +} + diff --git a/oemcrypto/odk/src/odk_overflow.c b/oemcrypto/odk/src/odk_overflow.c new file mode 100644 index 0000000..3a05f22 --- /dev/null +++ b/oemcrypto/odk/src/odk_overflow.c @@ -0,0 +1,38 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#include +#include + +int odk_sub_overflow_u64(uint64_t a, uint64_t b, uint64_t* c) { + if (a >= b) { + if (c) { + *c = a - b; + } + return 0; + } + return 1; +} + +int odk_add_overflow_u64(uint64_t a, uint64_t b, uint64_t* c) { + if (UINT64_MAX - a >= b) { + if (c) { + *c = a + b; + } + return 0; + } + return 1; +} + +int odk_add_overflow_ux(size_t a, size_t b, size_t* c) { + if (SIZE_MAX - a >= b) { + if (c) { + *c = a + b; + } + return 0; + } + return 1; +} diff --git a/oemcrypto/odk/src/odk_serialize.c b/oemcrypto/odk/src/odk_serialize.c new file mode 100644 index 0000000..da220da --- /dev/null +++ b/oemcrypto/odk/src/odk_serialize.c @@ -0,0 +1,115 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +/* + * This code is auto-generated, do not edit + */ + +#include "odk_structs_priv.h" +#include "serialization_base.h" + +void Pack_ODK_CoreMessage(Message* msg, ODK_CoreMessage const* obj) { + Pack_uint32_t(msg, (const uint32_t*)&obj->message_type); + Pack_uint32_t(msg, (const uint32_t*)&obj->message_length); + Pack_uint32_t(msg, (const uint32_t*)&obj->api_version); + Pack_uint32_t(msg, (const uint32_t*)&obj->nonce); + Pack_uint32_t(msg, (const uint32_t*)&obj->session_id); +} + +void Pack_ODK_PreparedLicense(Message* msg, ODK_PreparedLicense const* obj) { + Pack_ODK_CoreMessage(msg, (const ODK_CoreMessage*)&obj->core_message); +} + +void Pack_ODK_RenewalMessage(Message* msg, ODK_RenewalMessage const* obj) { + Pack_ODK_CoreMessage(msg, (const ODK_CoreMessage*)&obj->core_message); + Pack_uint64_t(msg, (const uint64_t*)&obj->playback_time); +} + +void Pack_ODK_ProvisioningMessage(Message* msg, + ODK_ProvisioningMessage const* obj) { + Pack_ODK_CoreMessage(msg, (const ODK_CoreMessage*)&obj->core_message); + Pack_uint32_t(msg, (const uint32_t*)&obj->device_id_length); + PackArray(msg, (const uint8_t*)&obj->device_id[0], 64); +} + +void Unpack_ODK_CoreMessage(Message* msg, ODK_CoreMessage* obj) { + Unpack_uint32_t(msg, (uint32_t*)&obj->message_type); + Unpack_uint32_t(msg, (uint32_t*)&obj->message_length); + Unpack_uint32_t(msg, (uint32_t*)&obj->api_version); + Unpack_uint32_t(msg, (uint32_t*)&obj->nonce); + Unpack_uint32_t(msg, (uint32_t*)&obj->session_id); + if (!ValidMessage(msg)) return; +} + +void Unpack_ODK_RenewalMessage(Message* msg, ODK_RenewalMessage* obj) { + Unpack_ODK_CoreMessage(msg, (ODK_CoreMessage*)&obj->core_message); + Unpack_uint64_t(msg, (uint64_t*)&obj->playback_time); +} + +void Unpack_ODK_ProvisioningMessage(Message* msg, + ODK_ProvisioningMessage* obj) { + Unpack_ODK_CoreMessage(msg, (ODK_CoreMessage*)&obj->core_message); + Unpack_uint32_t(msg, (uint32_t*)&obj->device_id_length); + UnpackArray(msg, (uint8_t*)&obj->device_id[0], 64); +} + +void Unpack_OEMCrypto_KeyObject(Message* msg, OEMCrypto_KeyObject* obj) { + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->key_id); + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->key_data_iv); + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->key_data); + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->key_control_iv); + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->key_control); +} + +void Unpack_ODK_TimerLimits(Message* msg, ODK_TimerLimits* obj) { + Unpack_uint32_t(msg, (uint32_t*)&obj->soft_expiry); + Unpack_uint64_t(msg, (uint64_t*)&obj->earliest_playback_start_seconds); + Unpack_uint64_t(msg, (uint64_t*)&obj->latest_playback_start_seconds); + Unpack_uint64_t(msg, (uint64_t*)&obj->initial_playback_duration_seconds); + Unpack_uint64_t(msg, (uint64_t*)&obj->renewal_playback_duration_seconds); + Unpack_uint64_t(msg, (uint64_t*)&obj->license_duration_seconds); +} + +void Unpack_ODK_ParsedLicense(Message* msg, ODK_ParsedLicense* obj) { + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->enc_mac_keys_iv); + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->enc_mac_keys); + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->pst); + Unpack_OEMCrypto_Substring(msg, + (OEMCrypto_Substring*)&obj->srm_restriction_data); + Unpack_uint32_t(msg, (uint32_t*)&obj->license_type); + Unpack_uint32_t(msg, (uint32_t*)&obj->nonce_required); + Unpack_ODK_TimerLimits(msg, (ODK_TimerLimits*)&obj->timer_limits); + Unpack_uint32_t(msg, (uint32_t*)&obj->key_array_length); + if (obj->key_array_length > ODK_MAX_NUM_KEYS) { + SetStatus(msg, MESSAGE_STATUS_OVERFLOW_ERROR); + return; + } + for (size_t i = 0; i < (size_t)obj->key_array_length; i++) { + Unpack_OEMCrypto_KeyObject(msg, &obj->key_array[i]); + } +} + +void Unpack_ODK_ParsedProvisioning(Message* msg, ODK_ParsedProvisioning* obj) { + Unpack_uint32_t(msg, (uint32_t*)&obj->key_type); + Unpack_OEMCrypto_Substring(msg, (OEMCrypto_Substring*)&obj->enc_private_key); + Unpack_OEMCrypto_Substring(msg, + (OEMCrypto_Substring*)&obj->enc_private_key_iv); + Unpack_OEMCrypto_Substring(msg, + (OEMCrypto_Substring*)&obj->encrypted_message_key); +} + +void Unpack_ODK_LicenseResponse(Message* msg, ODK_LicenseResponse* obj) { + Unpack_ODK_CoreMessage(msg, (ODK_CoreMessage*)&obj->core_message); + Unpack_ODK_ParsedLicense(msg, (ODK_ParsedLicense*)obj->parsed_license); +} + +void Unpack_ODK_ProvisioningResponse(Message* msg, + ODK_ProvisioningResponse* obj) { + Unpack_ODK_ProvisioningMessage( + msg, (ODK_ProvisioningMessage*)&obj->core_provisioning); + Unpack_ODK_ParsedProvisioning( + msg, (ODK_ParsedProvisioning*)obj->parsed_provisioning); +} diff --git a/oemcrypto/odk/src/odk_serialize.h b/oemcrypto/odk/src/odk_serialize.h new file mode 100644 index 0000000..28a10e8 --- /dev/null +++ b/oemcrypto/odk/src/odk_serialize.h @@ -0,0 +1,44 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +/* + * This code is auto-generated, do not edit + */ +#ifndef ODKITEE_SERIALIZER_H_ +#define ODKITEE_SERIALIZER_H_ + +#include "odk_structs_priv.h" +#include "serialization_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void Pack_ODK_CoreMessage(Message* msg, ODK_CoreMessage const* obj); + +void Pack_ODK_PreparedLicense(Message* msg, ODK_PreparedLicense const* obj); + +void Pack_ODK_RenewalMessage(Message* msg, ODK_RenewalMessage const* obj); + +void Pack_ODK_ProvisioningMessage(Message* msg, + ODK_ProvisioningMessage const* obj); + +void Unpack_ODK_CoreMessage(Message* msg, ODK_CoreMessage* obj); +void Unpack_ODK_RenewalMessage(Message* msg, ODK_RenewalMessage* obj); +void Unpack_ODK_ProvisioningMessage(Message* msg, ODK_ProvisioningMessage* obj); +void Unpack_OEMCrypto_Substring(Message* msg, OEMCrypto_Substring* obj); +void Unpack_OEMCrypto_KeyObject(Message* msg, OEMCrypto_KeyObject* obj); +void Unpack_ODK_TimerLimits(Message* msg, ODK_TimerLimits* obj); +void Unpack_ODK_ParsedLicense(Message* msg, ODK_ParsedLicense* obj); +void Unpack_ODK_ParsedProvisioning(Message* msg, ODK_ParsedProvisioning* obj); +void Unpack_ODK_LicenseResponse(Message* msg, ODK_LicenseResponse* obj); +void Unpack_ODK_ProvisioningResponse(Message* msg, + ODK_ProvisioningResponse* obj); + +#ifdef __cplusplus +} // extern "C" +#endif +#endif /* ODKITEE_SERIALIZER_H_ */ diff --git a/oemcrypto/odk/src/odk_structs_priv.h b/oemcrypto/odk/src/odk_structs_priv.h new file mode 100644 index 0000000..c8d5b9c --- /dev/null +++ b/oemcrypto/odk/src/odk_structs_priv.h @@ -0,0 +1,48 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef ODK_STRUCTS_PRIV_H_ +#define ODK_STRUCTS_PRIV_H_ + +#include +#include "OEMCryptoCENC.h" +#include "odk_structs.h" + +typedef struct { + uint32_t message_type; + uint32_t message_length; + uint32_t api_version; + uint32_t nonce; + uint32_t session_id; +} ODK_CoreMessage; + +typedef struct { + ODK_CoreMessage core_message; +} ODK_PreparedLicense; + +typedef struct { + ODK_CoreMessage core_message; + uint64_t playback_time; +} ODK_RenewalMessage; + +typedef struct { + ODK_CoreMessage core_message; + uint32_t device_id_length; + uint8_t device_id[64]; +} ODK_ProvisioningMessage; + +typedef struct { + ODK_CoreMessage core_message; + ODK_ParsedLicense* parsed_license; + size_t max_num_keys; +} ODK_LicenseResponse; + +typedef struct { + ODK_ProvisioningMessage core_provisioning; + ODK_ParsedProvisioning* parsed_provisioning; +} ODK_ProvisioningResponse; + +#endif // ODK_STRUCTS_PRIV_H_ diff --git a/oemcrypto/odk/src/odk_timer.c b/oemcrypto/odk/src/odk_timer.c new file mode 100644 index 0000000..014ef19 --- /dev/null +++ b/oemcrypto/odk/src/odk_timer.c @@ -0,0 +1,39 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#include +#include + +#include "odk.h" +#include "odk_timer.h" + +void ODK_InitializeClockValues(ODK_ClockValues* clock_values, + uint64_t system_time_seconds) { + if (clock_values == NULL) return; + clock_values->time_of_license_signed = system_time_seconds; + clock_values->time_of_first_decrypt = 0; + clock_values->time_of_last_decrypt = 0; + clock_values->time_when_timer_expires = 0; + clock_values->timer_status = 0; + clock_values->status = kUnused; +} + +/* Stub functions. */ +void ODK_ReloadClockValues(ODK_ClockValues* clock_values, + uint64_t time_of_license_signed, + uint64_t time_of_first_decrypt, + uint64_t time_of_last_decrypt, + enum OEMCrypto_Usage_Entry_Status status, + uint64_t system_time_seconds) {} + +uint32_t ODK_AttemptFirstPlayback(uint64_t system_time_seconds, + const ODK_TimerLimits* timer_limits, + ODK_ClockValues* clock_values, + uint64_t* timer_value) {} + +OEMCryptoResult ODK_UpdateLastPlaybackTime(const ODK_TimerLimits* timer_limits, + uint64_t system_time_seconds, + ODK_ClockValues* clock_values) {} diff --git a/oemcrypto/odk/src/serialization_base.c b/oemcrypto/odk/src/serialization_base.c new file mode 100644 index 0000000..c83e553 --- /dev/null +++ b/oemcrypto/odk/src/serialization_base.c @@ -0,0 +1,199 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#include "serialization_base.h" + +#include +#include +#include + +#include "OEMCryptoCENC.h" +#include "odk_assert.h" +#include "odk_overflow.h" + +struct _Message { + uint8_t* base; + size_t capacity; + size_t size; /* bytes written */ + size_t read_offset; /* bytes read */ + MessageStatus status; +}; + +odk_static_assert(SIZE_OF_MESSAGE_STRUCT >= sizeof(Message), + "SIZE_OF_MESSAGE_STRUCT too small"); + +bool ValidMessage(Message* message) { + if (message == NULL) { + return false; + } + if (message->status != MESSAGE_STATUS_OK) { + return false; + } + if (message->base == NULL) { + message->status = MESSAGE_STATUS_NULL_POINTER_ERROR; + return false; + } + if (message->size > message->capacity || + message->read_offset > message->size) { + message->status = MESSAGE_STATUS_OVERFLOW_ERROR; + return false; + } + return true; +} + +static void PackBytes(Message* message, const uint8_t* ptr, size_t count) { + if (count <= message->capacity - message->size) { + memcpy((void*)(message->base + message->size), (void*)ptr, count); + message->size += count; + } else { + message->status = MESSAGE_STATUS_OVERFLOW_ERROR; + } +} + +void Pack_uint32_t(Message* message, const uint32_t* value) { + if (!ValidMessage(message)) return; + uint8_t data[4] = {0}; + data[0] = *value >> 24; + data[1] = *value >> 16; + data[2] = *value >> 8; + data[3] = *value >> 0; + PackBytes(message, data, sizeof(data)); +} + +void Pack_uint64_t(Message* message, const uint64_t* value) { + if (!ValidMessage(message)) return; + uint32_t hi = *value >> 32; + uint32_t lo = *value; + Pack_uint32_t(message, &hi); + Pack_uint32_t(message, &lo); +} + +void PackArray(Message* message, const uint8_t* base, size_t size) { + if (!ValidMessage(message)) return; + PackBytes(message, base, size); +} + +static void UnpackBytes(Message* message, uint8_t* ptr, size_t count) { + if (count <= message->size - message->read_offset) { + memcpy((void*)ptr, (void*)(message->base + message->read_offset), count); + message->read_offset += count; + } else { + message->status = MESSAGE_STATUS_UNDERFLOW_ERROR; + } +} + +void Unpack_uint32_t(Message* message, uint32_t* value) { + if (!ValidMessage(message)) return; + uint8_t data[4] = {0}; + UnpackBytes(message, data, sizeof(data)); + *value = data[0]; + *value = *value << 8 | data[1]; + *value = *value << 8 | data[2]; + *value = *value << 8 | data[3]; +} + +void Unpack_uint64_t(Message* message, uint64_t* value) { + if (!ValidMessage(message)) return; + uint32_t hi = 0; + uint32_t lo = 0; + Unpack_uint32_t(message, &hi); + Unpack_uint32_t(message, &lo); + *value = hi; + *value = *value << 32 | lo; +} + +void Unpack_OEMCrypto_Substring(Message* msg, OEMCrypto_Substring* obj) { + uint32_t offset = 0, length = 0; + Unpack_uint32_t(msg, &offset); + Unpack_uint32_t(msg, &length); + if (!ValidMessage(msg)) return; + size_t end = 0; + if (obj->offset > msg->capacity || + odk_add_overflow_ux(obj->offset, obj->length, &end) || + end > msg->capacity) { + msg->status = MESSAGE_STATUS_OVERFLOW_ERROR; + return; + } + obj->offset = offset; + obj->length = length; +} + +/* copy out */ +void UnpackArray(Message* message, uint8_t* address, size_t size) { + if (!ValidMessage(message)) return; + UnpackBytes(message, address, size); +} + +/* + * The message structure, which is separate from the buffer, + * is initialized to reference the buffer + */ +void InitMessage(Message* message, uint8_t* buffer, size_t capacity) { + if (message == NULL) return; + memset(message, 0, sizeof(Message)); + message->base = buffer; + message->capacity = capacity; + message->size = 0; + message->read_offset = 0; + message->status = MESSAGE_STATUS_OK; +} + +/* + * The message structure is in the first sizeof(Memory) bytes + * of the buffer + */ +Message* CreateMessage(uint8_t* buffer, size_t buffer_size) { + if (buffer == NULL || buffer_size < sizeof(Message)) return NULL; + Message* message = (Message*)buffer; + message->base = buffer + sizeof(Message); + message->capacity = buffer_size - sizeof(Message); + message->size = 0; + message->read_offset = 0; + message->status = MESSAGE_STATUS_OK; + return message; +} + +/* + * Set the message to an empty state + */ +void ResetMessage(Message* message) { + message->size = 0; + message->read_offset = 0; + message->status = MESSAGE_STATUS_OK; +} + +uint8_t* GetBase(Message* message) { + if (message == NULL) return NULL; + return message->base; +} + +size_t GetCapacity(Message* message) { + if (message == NULL) return 0; + return message->capacity; +} + +size_t GetSize(Message* message) { + if (message == NULL) return 0; + return message->size; +} + +void SetSize(Message* message, size_t size) { + if (message == NULL) return; + message->size = size; +} + +MessageStatus GetStatus(Message* message) { return message->status; } + +void SetStatus(Message* message, MessageStatus status) { + message->status = status; +} + +size_t GetOffset(Message* message) { + if (message == NULL) return 0; + return message->read_offset; +} + +size_t SizeOfMessageStruct() { return sizeof(Message); } diff --git a/oemcrypto/odk/src/serialization_base.h b/oemcrypto/odk/src/serialization_base.h new file mode 100644 index 0000000..3883615 --- /dev/null +++ b/oemcrypto/odk/src/serialization_base.h @@ -0,0 +1,90 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef ODKITEE_SERIALIZATION_BASE_H_ +#define ODKITEE_SERIALIZATION_BASE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "OEMCryptoCENC.h" + +#define SIZE_OF_MESSAGE_STRUCT 64 + +/* + * Description: + * Point |msg| to stack-array |blk|. + * |blk| is guaranteed large enough to hold a |Message| struct. + * |blk| cannot be used in the same scope as a variable name. + * |msg| points to valid memory in the same scope |AllocateMessage| is used. + * Parameters: + * msg: pointer to pointer to |Message| struct + * blk: variable name for stack-array + */ +#define AllocateMessage(msg, blk) \ + uint8_t blk[SIZE_OF_MESSAGE_STRUCT]; \ + *(msg) = (Message*)(message_block); + +typedef struct _Message Message; + +bool ValidMessage(Message* message); + +void Pack_uint32_t(Message* message, const uint32_t* value); +void Pack_uint64_t(Message* message, const uint64_t* value); +void PackArray(Message* message, const uint8_t* base, size_t size); + +void Unpack_uint32_t(Message* message, uint32_t* value); +void Unpack_uint64_t(Message* message, uint64_t* value); +void UnpackArray(Message* message, uint8_t* base, size_t size); /* copy out */ +void Unpack_OEMCrypto_Substring(Message* msg, OEMCrypto_Substring* obj); + +typedef enum { + MESSAGE_STATUS_OK, + MESSAGE_STATUS_UNKNOWN_ERROR, + MESSAGE_STATUS_OVERFLOW_ERROR, + MESSAGE_STATUS_UNDERFLOW_ERROR, + MESSAGE_STATUS_PARSE_ERROR, + MESSAGE_STATUS_NULL_POINTER_ERROR, + MESSAGE_STATUS_API_VALUE_ERROR +} MessageStatus; + +/* + * Create a message from a buffer. The message structure consumes the first + * sizeof(Message) bytes of the buffer. The caller is responsible for ensuring + * that the buffer remains allocated for the lifetime of the message. + */ +Message* CreateMessage(uint8_t* buffer, size_t buffer_size); + +/* + * Initialize a message structure to reference a separate buffer. The caller + * is responsible for ensuring that the buffer remains allocated for the + * lifetime of the message. + */ +void InitMessage(Message* message, uint8_t* buffer, size_t capacity); + +/* + * Reset an existing the message to an empty state + */ +void ResetMessage(Message* message); +uint8_t* GetBase(Message* message); +size_t GetCapacity(Message* message); +size_t GetSize(Message* message); +void SetSize(Message* message, size_t size); +MessageStatus GetStatus(Message* message); +void SetStatus(Message* message, MessageStatus status); +size_t GetOffset(Message* message); + +size_t SizeOfMessageStruct(); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // ODKITEE_SERIALIZATION_BASE_H_ diff --git a/oemcrypto/odk/test/odk_test.cpp b/oemcrypto/odk/test/odk_test.cpp new file mode 100644 index 0000000..b78a056 --- /dev/null +++ b/oemcrypto/odk/test/odk_test.cpp @@ -0,0 +1,635 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "odk.h" +#include "odk_test.h" + +size_t ODK_FieldLength(ODK_FieldType type) { + switch (type) { + case ODK_UINT32: + return sizeof(uint32_t); + case ODK_UINT64: + return sizeof(uint64_t); + case ODK_SUBSTRING: + return sizeof(uint32_t) + sizeof(uint32_t); + case ODK_DEVICEID: + return DEVICE_ID_MAX; + default: + return SIZE_MAX; + } +} + +size_t ODK_AllocSize(ODK_FieldType type) { + if (type == ODK_SUBSTRING) { + return sizeof(OEMCrypto_Substring); + } + return ODK_FieldLength(type); +} + +OEMCryptoResult ODK_WriteSingleField(uint8_t* const buf, + const ODK_Field* const field) { + if (!field || !field->value) { + return ODK_ERROR_CORE_MESSAGE; + } + switch (field->type) { + case ODK_UINT32: { + uint32_t u32 = htobe32(*static_cast(field->value)); + memcpy(buf, &u32, sizeof(u32)); + break; + } + case ODK_UINT64: { + uint64_t u64 = htobe64(*static_cast(field->value)); + memcpy(buf, &u64, sizeof(u64)); + break; + } + case ODK_SUBSTRING: { + OEMCrypto_Substring* s = static_cast(field->value); + uint32_t off = htobe32(s->offset); + uint32_t len = htobe32(s->length); + memcpy(buf, &off, sizeof(off)); + memcpy(buf + sizeof(off), &len, sizeof(len)); + break; + } + case ODK_DEVICEID: { + const uint8_t* const id = static_cast(field->value); + memcpy(buf, id, DEVICE_ID_MAX); + break; + } + default: + return ODK_ERROR_CORE_MESSAGE; + } + return OEMCrypto_SUCCESS; +} + +OEMCryptoResult ODK_ReadSingleField(const uint8_t* const buf, + const ODK_Field* const field) { + if (!field || !field->value) { + return ODK_ERROR_CORE_MESSAGE; + } + switch (field->type) { + case ODK_UINT32: { + memcpy(field->value, buf, sizeof(uint32_t)); + uint32_t* u32p = static_cast(field->value); + *u32p = be32toh(*u32p); + break; + } + case ODK_UINT64: { + memcpy(field->value, buf, sizeof(uint64_t)); + uint64_t* u64p = static_cast(field->value); + *u64p = be64toh(*u64p); + break; + } + case ODK_SUBSTRING: { + OEMCrypto_Substring* s = static_cast(field->value); + uint32_t off = 0; + uint32_t len = 0; + memcpy(&off, buf, sizeof(off)); + memcpy(&len, buf + sizeof(off), sizeof(len)); + s->offset = be32toh(off); + s->length = be32toh(len); + break; + } + case ODK_DEVICEID: { + uint8_t* const id = static_cast(field->value); + memcpy(id, buf, DEVICE_ID_MAX); + break; + } + default: + return ODK_ERROR_CORE_MESSAGE; + } + return OEMCrypto_SUCCESS; +} + +/* + * Parameters: + * [in] size_in: buffer size + * [out] size_out: bytes processed + */ +OEMCryptoResult ODK_IterFields(ODK_FieldMode mode, uint8_t* const buf, + const size_t size_in, size_t* size_out, + std::vector& fields) { + if (!buf || !size_out) { + return ODK_ERROR_CORE_MESSAGE; + } + size_t off = 0, off2 = 0; + for (size_t i = 0; i < fields.size(); i++) { + if (__builtin_add_overflow(off, ODK_FieldLength(fields[i].type), &off2) || + off2 > size_in) { + return ODK_ERROR_CORE_MESSAGE; + } + uintptr_t base = reinterpret_cast(buf); + if (__builtin_add_overflow(base, off, &base)) { + return ODK_ERROR_CORE_MESSAGE; + } + uint8_t* const buf_off = buf + off; + if (mode == ODK_WRITE) { + ODK_WriteSingleField(buf_off, &fields[i]); + } else if (mode == ODK_READ) { + ODK_ReadSingleField(buf_off, &fields[i]); + } else { + return ODK_ERROR_CORE_MESSAGE; + } + off = off2; + } + *size_out = off; + if (*size_out > size_in) { + return ODK_ERROR_CORE_MESSAGE; + } + return OEMCrypto_SUCCESS; +} + +OEMCryptoResult ODK_ReadFields(const uint8_t* const buf, const size_t size_in, + size_t* size_out, + std::vector& fields) { + return ODK_IterFields(ODK_READ, const_cast(buf), size_in, size_out, + fields); +} + +OEMCryptoResult ODK_WriteFields(uint8_t* const buf, const size_t size_in, + size_t* size_out, + std::vector& fields) { + return ODK_IterFields(ODK_WRITE, buf, size_in, size_out, fields); +} + +OEMCryptoResult ODK_ValidateSubstrings(const size_t size, const size_t n, + const ODK_Field* const fields) { + if (!fields) { + return ODK_ERROR_CORE_MESSAGE; + } + size_t off = 0; + for (size_t i = 0; i < n; i++) { + if (fields[i].type != ODK_SUBSTRING) { + continue; + } + if (!fields[i].value) { + return ODK_ERROR_CORE_MESSAGE; + } + size_t end = 0; + OEMCrypto_Substring* s = static_cast(fields[i].value); + if (s->offset > size || + __builtin_add_overflow(s->offset, s->length, &end) || end > size) { + return ODK_ERROR_CORE_MESSAGE; + } + } + return OEMCrypto_SUCCESS; +} + +void expect_eq_buf(const void* s1, const void* s2, size_t n) { + if (memcmp(s1, s2, n)) { + const void* buffers[] = {s1, s2}; + for (int i = 0; i < 2; i++) { + char _tmp[] = "/tmp/fileXXXXXX"; + mkstemp(_tmp); + std::string tmp(_tmp); + std::fstream out(tmp, std::ios::out | std::ios::binary); + out.write((char*)buffers[i], n); + out.close(); + std: + std::cerr << "buffer " << i << " dumped to " << tmp << std::endl; + } + FAIL(); + } +} + +template +void ValidateRequest(uint32_t message_type, + std::vector& extra_fields, + const F& odk_prepare_func) { + uint32_t message_size = 0; + uint32_t api_version = 16; + uint32_t nonce = 0xdeadbeef; + uint32_t session_id = 0xcafebabe; + std::vector total_fields = { + {ODK_UINT32, &message_type}, {ODK_UINT32, &message_size}, + {ODK_UINT32, &api_version}, {ODK_UINT32, &nonce}, + {ODK_UINT32, &session_id}, + }; + + total_fields.insert(total_fields.end(), extra_fields.begin(), + extra_fields.end()); + for (auto& field : total_fields) { + message_size += ODK_FieldLength(field.type); + } + + uint8_t* buf = new uint8_t[message_size](); + uint8_t* buf2 = new uint8_t[message_size](); + size_t bytes_written = message_size; + + EXPECT_EQ( + OEMCrypto_SUCCESS, + odk_prepare_func(buf, &bytes_written, api_version, nonce, session_id)); + EXPECT_EQ(bytes_written, message_size); + + EXPECT_EQ(OEMCrypto_SUCCESS, ODK_IterFields(ODK_WRITE, buf2, SIZE_MAX, + &bytes_written, total_fields)); + EXPECT_EQ(bytes_written, message_size); + + expect_eq_buf(buf, buf2, message_size); + delete[] buf; + delete[] buf2; +} + +template +void ValidateResponse(uint32_t message_type, + std::vector& extra_fields, + const F& odk_parse_func) { + uint32_t message_size = 0; + uint32_t api_version = 16; + uint32_t nonce = 0xdeadbeef; + uint32_t session_id = 0xcafebabe; + std::vector total_fields = { + {ODK_UINT32, &message_type}, {ODK_UINT32, &message_size}, + {ODK_UINT32, &api_version}, {ODK_UINT32, &nonce}, + {ODK_UINT32, &session_id}, + }; + + uint32_t header_size = 0; + for (auto& field : total_fields) { + header_size += ODK_FieldLength(field.type); + } + + total_fields.insert(total_fields.end(), extra_fields.begin(), + extra_fields.end()); + for (auto& field : total_fields) { + message_size += ODK_FieldLength(field.type); + } + + uint8_t* buf = new uint8_t[message_size](); + uint8_t* buf2 = new uint8_t[message_size](); + uint8_t* zero = new uint8_t[message_size](); + size_t bytes_read = 0, bytes_written = 0; + + // serialize input to buf + EXPECT_EQ(OEMCrypto_SUCCESS, ODK_IterFields(ODK_WRITE, buf, SIZE_MAX, + &bytes_written, total_fields)); + EXPECT_EQ(bytes_written, message_size); + + // zero-out input + EXPECT_EQ(OEMCrypto_SUCCESS, ODK_IterFields(ODK_READ, zero, bytes_written, + &bytes_read, extra_fields)); + EXPECT_TRUE(bytes_written > bytes_read && + bytes_written - bytes_read == header_size); + + // parse buf with odk + EXPECT_EQ(OEMCrypto_SUCCESS, + odk_parse_func(buf, bytes_written, api_version, nonce, session_id)); + + // serialize odk output to buf2 + EXPECT_EQ(OEMCrypto_SUCCESS, ODK_IterFields(ODK_WRITE, buf2, SIZE_MAX, + &bytes_written, total_fields)); + EXPECT_EQ(bytes_written, message_size); + + expect_eq_buf(buf, buf2, message_size); + delete[] buf; + delete[] buf2; + delete[] zero; +} + +TEST(OdkTest, SerializeFields) { + uint32_t x[] = {0, 1, 2}; + uint64_t y[] = {3ll << 32, 4ll << 32, 5ll << 32}; + OEMCrypto_Substring s = {.offset = 6, .length = 7}; + std::vector fields = { + {ODK_UINT32, &x[0]}, {ODK_UINT32, &x[1]}, {ODK_UINT32, &x[2]}, + {ODK_UINT64, &y[0]}, {ODK_UINT64, &y[1]}, {ODK_UINT64, &y[2]}, + {ODK_SUBSTRING, &s}, + }; + uint8_t buf[1024] = {0}; + uint8_t buf2[1024] = {0}; + size_t bytes_read = 0, bytes_written = 0; + ODK_IterFields(ODK_WRITE, buf, SIZE_MAX, &bytes_read, fields); + ODK_IterFields(ODK_READ, buf, bytes_read, &bytes_written, fields); + ODK_IterFields(ODK_WRITE, buf2, SIZE_MAX, &bytes_read, fields); + + expect_eq_buf(buf, buf2, bytes_read); +} + +TEST(OdkTest, SerializeFieldsStress) { + const int n = 1024; + std::vector fields(n); + std::srand(0); + size_t total_size = 0; + for (int i = 0; i < n; i++) { + fields[i].type = static_cast(std::rand() % + static_cast(ODK_NUMTYPES)); + size_t field_size = ODK_AllocSize(fields[i].type); + fields[i].value = malloc(ODK_AllocSize(fields[i].type)); + total_size += ODK_FieldLength(fields[i].type); + } + + uint8_t* buf = new uint8_t[total_size]; + for (int i = 0; i < total_size; i++) { + buf[i] = std::rand() & 0xff; + } + + size_t bytes_read = 0, bytes_written = 0; + uint8_t* buf2 = new uint8_t[total_size]; + ODK_IterFields(ODK_READ, buf, total_size, &bytes_read, fields); + EXPECT_EQ(bytes_read, total_size); + ODK_IterFields(ODK_WRITE, buf2, total_size, &bytes_written, fields); + EXPECT_EQ(bytes_written, total_size); + + expect_eq_buf(buf, buf2, total_size); + + // cleanup + for (int i = 0; i < n; i++) { + free(fields[i].value); + } + delete[] buf; + delete[] buf2; +} + +TEST(OdkTest, LicenseRequest) { + std::vector empty; + auto odk_prepare_func = [&](uint8_t* const buf, size_t* size, + uint32_t api_version, uint32_t nonce, + uint32_t session_id) { + return ODK_PrepareCoreLicenseRequest(buf, SIZE_MAX, size, api_version, + nonce, session_id); + }; + ValidateRequest(ODK_License_Request_Type, empty, odk_prepare_func); +} + +TEST(OdkTest, RenewalRequest) { + uint64_t system_time_seconds = 0xBADDCAFE000FF1CE; + std::vector extra_fields = { + {ODK_UINT64, &system_time_seconds}, + }; + ODK_ClockValues clock_values = {0}; + auto odk_prepare_func = [&](uint8_t* const buf, size_t* size, + uint32_t api_version, uint32_t nonce, + uint32_t session_id) { + return ODK_PrepareCoreRenewalRequest(buf, SIZE_MAX, size, api_version, + nonce, session_id, &clock_values, + system_time_seconds); + }; + ValidateRequest(ODK_Renewal_Request_Type, extra_fields, odk_prepare_func); +} + +TEST(OdkTest, ProvisionRequest) { + uint32_t device_id_length = DEVICE_ID_MAX / 2; + uint8_t device_id[DEVICE_ID_MAX] = {0}; + memset(device_id, 0xff, device_id_length); + std::vector extra_fields = { + {ODK_UINT32, &device_id_length}, + {ODK_DEVICEID, device_id}, + }; + auto odk_prepare_func = [&](uint8_t* const buf, size_t* size, + uint32_t api_version, uint32_t nonce, + uint32_t session_id) { + return ODK_PrepareCoreProvisioningRequest(buf, SIZE_MAX, size, api_version, + nonce, session_id, device_id, + device_id_length); + }; + ValidateRequest(ODK_Provisioning_Request_Type, extra_fields, + odk_prepare_func); +} + +TEST(OdkTest, LicenseResponse) { + ODK_ParsedLicense parsed_license = { + .enc_mac_keys_iv = {.offset = 0, .length = 1}, + .enc_mac_keys = {.offset = 2, .length = 3}, + .pst = {.offset = 4, .length = 5}, + .srm_restriction_data = {.offset = 6, .length = 7}, + .license_type = 8, + .nonce_required = 0xDEADC0DE, + .timer_limits = + { + .soft_expiry = 9, + .earliest_playback_start_seconds = 10, + .latest_playback_start_seconds = 11, + .initial_playback_duration_seconds = 12, + .renewal_playback_duration_seconds = 13, + .license_duration_seconds = 14, + }, + .key_array_length = 3, + .key_array = + { + { + .key_id = {.offset = 15, .length = 16}, + .key_data_iv = {.offset = 17, .length = 18}, + .key_data = {.offset = 19, .length = 20}, + .key_control_iv = {.offset = 21, .length = 22}, + .key_control = {.offset = 23, .length = 24}, + }, + { + .key_id = {.offset = 25, .length = 26}, + .key_data_iv = {.offset = 27, .length = 28}, + .key_data = {.offset = 29, .length = 30}, + .key_control_iv = {.offset = 31, .length = 32}, + .key_control = {.offset = 33, .length = 34}, + }, + { + .key_id = {.offset = 35, .length = 36}, + .key_data_iv = {.offset = 37, .length = 38}, + .key_data = {.offset = 39, .length = 40}, + .key_control_iv = {.offset = 41, .length = 42}, + .key_control = {.offset = 43, .length = 44}, + }, + }, + }; + + uint32_t message_type = ODK_License_Response_Type; + std::vector extra_fields = { + {ODK_SUBSTRING, &parsed_license.enc_mac_keys_iv}, + {ODK_SUBSTRING, &parsed_license.enc_mac_keys}, + {ODK_SUBSTRING, &parsed_license.pst}, + {ODK_SUBSTRING, &parsed_license.srm_restriction_data}, + {ODK_UINT32, &parsed_license.license_type}, + {ODK_UINT32, &parsed_license.nonce_required}, + {ODK_UINT32, &parsed_license.timer_limits.soft_expiry}, + {ODK_UINT64, + &parsed_license.timer_limits.earliest_playback_start_seconds}, + {ODK_UINT64, &parsed_license.timer_limits.latest_playback_start_seconds}, + {ODK_UINT64, + &parsed_license.timer_limits.initial_playback_duration_seconds}, + {ODK_UINT64, + &parsed_license.timer_limits.renewal_playback_duration_seconds}, + {ODK_UINT64, &parsed_license.timer_limits.license_duration_seconds}, + {ODK_UINT32, &parsed_license.key_array_length}, + {ODK_SUBSTRING, &parsed_license.key_array[0].key_id}, + {ODK_SUBSTRING, &parsed_license.key_array[0].key_data_iv}, + {ODK_SUBSTRING, &parsed_license.key_array[0].key_data}, + {ODK_SUBSTRING, &parsed_license.key_array[0].key_control_iv}, + {ODK_SUBSTRING, &parsed_license.key_array[0].key_control}, + {ODK_SUBSTRING, &parsed_license.key_array[1].key_id}, + {ODK_SUBSTRING, &parsed_license.key_array[1].key_data_iv}, + {ODK_SUBSTRING, &parsed_license.key_array[1].key_data}, + {ODK_SUBSTRING, &parsed_license.key_array[1].key_control_iv}, + {ODK_SUBSTRING, &parsed_license.key_array[1].key_control}, + {ODK_SUBSTRING, &parsed_license.key_array[2].key_id}, + {ODK_SUBSTRING, &parsed_license.key_array[2].key_data_iv}, + {ODK_SUBSTRING, &parsed_license.key_array[2].key_data}, + {ODK_SUBSTRING, &parsed_license.key_array[2].key_control_iv}, + {ODK_SUBSTRING, &parsed_license.key_array[2].key_control}, + }; + + auto odk_parse_func = [&](const uint8_t* buf, size_t size, + uint32_t api_version, uint32_t nonce, + uint32_t session_id) { + return ODK_ParseLicense(buf, size + 128, api_version, nonce, session_id, 0, + 0, 3, &parsed_license); + }; + ValidateResponse(ODK_License_Response_Type, extra_fields, odk_parse_func); +} + +TEST(OdkTest, RenewalResponse) { + uint64_t system_time = 0xfaceb00c; + uint64_t playback_clock = 11; + uint64_t playback_timer = 12; + uint64_t message_playback_clock = 10; + std::vector extra_fields = { + {ODK_UINT64, &message_playback_clock}, + }; + + ODK_TimerLimits timer_limits = { + .soft_expiry = 0, + .earliest_playback_start_seconds = 0, + .latest_playback_start_seconds = 100, + .initial_playback_duration_seconds = 10, + .renewal_playback_duration_seconds = 20, + .license_duration_seconds = 100, + }; + + ODK_ClockValues clock_values = { + .time_of_license_signed = 0, + .time_of_first_decrypt = system_time - playback_clock, + .time_of_last_decrypt = 0, + .time_when_timer_expires = system_time + playback_timer, + .timer_status = 0, + .status = kUnused, + }; + + auto odk_parse_func = [&](const uint8_t* buf, size_t size, + uint32_t api_version, uint32_t nonce, + uint32_t session_id) { + OEMCryptoResult err = + ODK_ParseRenewal(buf, size, api_version, nonce, session_id, system_time, + &timer_limits, &clock_values, &playback_timer); + + EXPECT_EQ(ODK_SET_TIMER, err); + EXPECT_EQ(timer_limits.renewal_playback_duration_seconds, playback_timer); + EXPECT_EQ(clock_values.time_when_timer_expires, + system_time + playback_timer); + + // manually restore message_playback_clock since ODK_ParseRenewal doesn't + // generate output + message_playback_clock = 10; + return OEMCrypto_SUCCESS; + }; + ValidateResponse(ODK_Renewal_Response_Type, extra_fields, odk_parse_func); +} + +TEST(OdkTest, ProvisionResponse) { + uint32_t device_id_length = DEVICE_ID_MAX / 2; + uint8_t device_id[DEVICE_ID_MAX] = {0}; + memset(device_id, 0xff, device_id_length); + + ODK_ParsedProvisioning parsed_response = { + .enc_private_key = {.offset = 0, .length = 1}, + .enc_private_key_iv = {.offset = 2, .length = 3}, + .encrypted_message_key = {.offset = 4, .length = 5}, + }; + + std::vector extra_fields = { + {ODK_UINT32, &device_id_length}, + {ODK_DEVICEID, device_id}, + {ODK_UINT32, &parsed_response.key_type}, + {ODK_SUBSTRING, &parsed_response.enc_private_key}, + {ODK_SUBSTRING, &parsed_response.enc_private_key_iv}, + {ODK_SUBSTRING, &parsed_response.encrypted_message_key}, + }; + + auto odk_parse_func = [&](const uint8_t* buf, size_t size, + uint32_t api_version, uint32_t nonce, + uint32_t session_id) { + OEMCryptoResult err = + ODK_ParseProvisioning(buf, size + 16, api_version, nonce, session_id, + device_id, device_id_length, &parsed_response); + // restore device id because it is not part of parsed_response + device_id_length = DEVICE_ID_MAX / 2; + memset(device_id, 0xff, device_id_length); + return err; + }; + ValidateResponse(ODK_Provisioning_Response_Type, extra_fields, + odk_parse_func); +} + +TEST(OdkSizeTest, LicenseRequest) { + uint8_t* message = nullptr; + size_t message_length = 0; + size_t core_message_length = 0; + uint32_t api_version = 0; + uint32_t nonce = 0; + uint32_t session_id = 0; + EXPECT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, + ODK_PrepareCoreLicenseRequest(message, message_length, + &core_message_length, api_version, + nonce, session_id)); + // All messages have at least a five 4-byte fields. + size_t minimum_message_size = 5 * 4; + EXPECT_GE(core_message_length, minimum_message_size); +} + +TEST(OdkSizeTest, RenewalRequest) { + uint8_t* message = nullptr; + size_t message_length = 0; + size_t core_message_length = 0; + uint32_t api_version = 0; + uint32_t nonce = 0; + uint32_t session_id = 0; + ODK_ClockValues clock_values; + clock_values.time_of_first_decrypt = 10; + uint64_t system_time_seconds = 15; + EXPECT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, + ODK_PrepareCoreRenewalRequest( + message, message_length, &core_message_length, api_version, + nonce, session_id, &clock_values, system_time_seconds)); + // All messages have at least a five 4-byte fields. + size_t minimum_message_size = 5 * 4; + EXPECT_GE(core_message_length, minimum_message_size); +} + +TEST(OdkSizeTest, ProvisioningRequest) { + uint8_t* message = nullptr; + size_t message_length = 0; + size_t core_message_length = 0; + uint32_t api_version = 0; + uint32_t nonce = 0; + uint32_t session_id = 0; + uint8_t* device_id = nullptr; + uint32_t device_id_length = 0; + EXPECT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, + ODK_PrepareCoreProvisioningRequest( + message, message_length, &core_message_length, api_version, + nonce, session_id, nullptr, device_id_length)); + // All messages have at least a five 4-byte fields. + size_t minimum_message_size = 5 * 4; + EXPECT_GE(core_message_length, minimum_message_size); +} + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/oemcrypto/odk/test/odk_test.gypi b/oemcrypto/odk/test/odk_test.gypi new file mode 100644 index 0000000..54035bb --- /dev/null +++ b/oemcrypto/odk/test/odk_test.gypi @@ -0,0 +1,11 @@ +# Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +# source code may only be used and distributed under the Widevine Master License +# Agreement. + +{ + 'sources': [ + 'odk_test.cpp', + 'odk_timer_test.cpp', + ], +} + diff --git a/oemcrypto/odk/test/odk_test.h b/oemcrypto/odk/test/odk_test.h new file mode 100644 index 0000000..edbbdaa --- /dev/null +++ b/oemcrypto/odk/test/odk_test.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#ifndef ODK_TEST_H_ +#define ODK_TEST_H_ + +#include "OEMCryptoCENC.h" + +typedef enum { + ODK_License_Request_Type = 1, + ODK_License_Response_Type = 2, + ODK_Renewal_Request_Type = 3, + ODK_Renewal_Response_Type = 4, + ODK_Provisioning_Request_Type = 5, + ODK_Provisioning_Response_Type = 6, +} ODK_MessageType; + +typedef enum { + ODK_UINT32, + ODK_UINT64, + ODK_SUBSTRING, + ODK_DEVICEID, + ODK_NUMTYPES, +} ODK_FieldType; + +typedef enum { + ODK_READ, + ODK_WRITE, +} ODK_FieldMode; + +typedef struct { + ODK_FieldType type; + void* value; +} ODK_Field; + +#define DEVICE_ID_MAX (64) + +#ifdef __cplusplus +extern "C" { +#endif + +size_t ODK_FieldLength(ODK_FieldType type); +OEMCryptoResult ODK_WriteSingleField(uint8_t* const buf, + const ODK_Field* const field); +OEMCryptoResult ODK_ReadSingleField(const uint8_t* const buf, + const ODK_Field* const field); + +OEMCryptoResult ODK_ReadFields(const uint8_t* const buf, const size_t size_in, + size_t* size_out, const size_t n, + const ODK_Field* const fields); + +OEMCryptoResult ODK_WriteFields(uint8_t* const buf, const size_t size_in, + size_t* size_out, const size_t n, + const ODK_Field* const fields); + +#ifdef __cplusplus +} +#endif + +#endif // ODK_TEST_H_ diff --git a/oemcrypto/odk/test/odk_timer_test.cpp b/oemcrypto/odk/test/odk_timer_test.cpp new file mode 100644 index 0000000..72b5faf --- /dev/null +++ b/oemcrypto/odk/test/odk_timer_test.cpp @@ -0,0 +1,21 @@ +/* + * Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary + * source code may only be used and distributed under the Widevine Master + * License Agreement. + */ + +#include + +#include "odk_timer.h" + +TEST(OdkTimerTest, Init) { + ODK_ClockValues clock_values; + uint64_t time = 42; + ODK_InitializeClockValues(&clock_values, time); + EXPECT_EQ(clock_values.time_of_license_signed, time); + EXPECT_EQ(clock_values.time_of_first_decrypt, 0); + EXPECT_EQ(clock_values.time_of_last_decrypt, 0); + EXPECT_EQ(clock_values.time_when_timer_expires, 0); + EXPECT_EQ(clock_values.timer_status, 0); + EXPECT_EQ(clock_values.status, kUnused); +} diff --git a/oemcrypto/oemcrypto_unittests.gyp b/oemcrypto/oemcrypto_unittests.gyp new file mode 100644 index 0000000..6c09275 --- /dev/null +++ b/oemcrypto/oemcrypto_unittests.gyp @@ -0,0 +1,56 @@ +# This is a gyp file for building the OEMCrypto unit tests with the reference +# code from the stand-alone source code. +{ + 'variables': { + # Override the variables below for the location of various gyp files. + # Alternatively, set the environment variable PATH_TO_CDM_DIR to point to a + # recent version of the source CDM. This *must* be a relative path. + 'boringssl_dependency%': 'second; } - return NULL; + return nullptr; } time_t CryptoEngine::OnlineTime() { @@ -135,7 +135,7 @@ time_t CryptoEngine::RollbackCorrectedOfflineTime() { if (!file) { LOGE("RollbackCorrectedOfflineTime: File open failed: %s", filename.c_str()); - return time(NULL); + return time(nullptr); } file->Read(reinterpret_cast(&encrypted_buffer[0]), sizeof(TimeInfo)); // Decrypt the encrypted TimeInfo buffer. @@ -149,7 +149,7 @@ time_t CryptoEngine::RollbackCorrectedOfflineTime() { time_t current_time; // Add any time offsets in the past to the current time. - current_time = time(NULL) + time_info.rollback_offset; + current_time = time(nullptr) + time_info.rollback_offset; if (time_info.previous_time > current_time) { // Time has been rolled back. // Update the rollback offset. @@ -174,7 +174,7 @@ time_t CryptoEngine::RollbackCorrectedOfflineTime() { if (!file) { LOGE("RollbackCorrectedOfflineTime: File open failed: %s", filename.c_str()); - return time(NULL); + return time(nullptr); } file->Write(reinterpret_cast(&encrypted_buffer[0]), sizeof(TimeInfo)); @@ -183,9 +183,9 @@ time_t CryptoEngine::RollbackCorrectedOfflineTime() { } bool CryptoEngine::NonceCollision(uint32_t nonce) { - for (const auto & session_pair : sessions_) { + for (const auto& session_pair : sessions_) { const SessionContext* session = session_pair.second; - if (session->NonceCollision(nonce)) return true; + if (nonce == session->nonce()) return true; } return false; } @@ -218,7 +218,7 @@ OEMCryptoResult CryptoEngine::SetDestination( // Direct buffer type is only used on some specialized devices where // oemcrypto has a direct connection to the screen buffer. It is not, // for example, supported on Android. - destination_ = NULL; + destination_ = nullptr; break; default: return OEMCrypto_ERROR_INVALID_CONTEXT; @@ -237,7 +237,7 @@ OEMCryptoResult CryptoEngine::SetDestination( } adjust_destination(out_description, data_length, subsample_flags); if ((out_description->type != OEMCrypto_BufferType_Direct) && - (destination_ == NULL)) { + (destination_ == nullptr)) { return OEMCrypto_ERROR_INVALID_CONTEXT; } return OEMCrypto_SUCCESS; diff --git a/oemcrypto/ref/src/oemcrypto_engine_ref.h b/oemcrypto/ref/src/oemcrypto_engine_ref.h index cc132aa..182873c 100644 --- a/oemcrypto/ref/src/oemcrypto_engine_ref.h +++ b/oemcrypto/ref/src/oemcrypto_engine_ref.h @@ -91,8 +91,7 @@ class CryptoEngine { time_t RollbackCorrectedOfflineTime(); - // Verify that this nonce does not collide with another nonce in any session's - // nonce table. + // Verify that this nonce does not collide with another nonce in any session. virtual bool NonceCollision(uint32_t nonce); // Returns the HDCP version currently in use. @@ -133,12 +132,15 @@ class CryptoEngine { return OEMCrypto_Keybox; } - virtual OEMCryptoResult get_oem_certificate(SessionContext* session, - uint8_t* public_cert, + virtual OEMCryptoResult get_oem_certificate(uint8_t* public_cert, size_t* public_cert_length) { return OEMCrypto_ERROR_NOT_IMPLEMENTED; } + virtual OEMCryptoResult load_oem_private_key(SessionContext* session) { + return OEMCrypto_ERROR_NOT_IMPLEMENTED; + } + // Used for OEMCrypto_IsAntiRollbackHwPresent. virtual bool config_is_anti_rollback_hw_present() { return false; } diff --git a/oemcrypto/ref/src/oemcrypto_key_ref.cpp b/oemcrypto/ref/src/oemcrypto_key_ref.cpp index cc08c27..feb2374 100644 --- a/oemcrypto/ref/src/oemcrypto_key_ref.cpp +++ b/oemcrypto/ref/src/oemcrypto_key_ref.cpp @@ -22,7 +22,8 @@ bool KeyControlBlock::Validate() { memcmp(verification_, "kc12", 4) && // add in version 12 api memcmp(verification_, "kc13", 4) && // add in version 13 api memcmp(verification_, "kc14", 4) && // add in version 14 api - memcmp(verification_, "kc15", 4)) { // add in version 15 api + memcmp(verification_, "kc15", 4) && // add in version 15 api + memcmp(verification_, "kc16", 4)) { // add in version 16 api LOGE("KCB: BAD verification string: %4.4s", verification_); valid_ = false; } else { diff --git a/oemcrypto/ref/src/oemcrypto_nonce_table.cpp b/oemcrypto/ref/src/oemcrypto_nonce_table.cpp deleted file mode 100644 index 65d9269..0000000 --- a/oemcrypto/ref/src/oemcrypto_nonce_table.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master -// License Agreement. -// -// Reference implementation of OEMCrypto APIs -// -#include "oemcrypto_nonce_table.h" - -namespace wvoec_ref { - -void NonceTable::AddNonce(uint32_t nonce) { - int new_slot = -1; - int oldest_slot = -1; - - // Flush any nonces that have been checked but not flushed. - // After flush, nonces will be either valid or invalid. - Flush(); - - for (int i = 0; i < kTableSize; ++i) { - // Increase age of all valid nonces. - if (kNTStateValid == state_[i]) { - ++age_[i]; - if (-1 == oldest_slot) { - oldest_slot = i; - } else { - if (age_[i] > age_[oldest_slot]) { - oldest_slot = i; - } - } - } else { - if (-1 == new_slot) { - age_[i] = 0; - nonces_[i] = nonce; - state_[i] = kNTStateValid; - new_slot = i; - } - } - } - if (-1 == new_slot) { - // reuse oldest - // assert (oldest_slot != -1) - int i = oldest_slot; - age_[i] = 0; - nonces_[i] = nonce; - state_[i] = kNTStateValid; - } -} - -bool NonceTable::CheckNonce(uint32_t nonce) { - for (int i = 0; i < kTableSize; ++i) { - if (kNTStateInvalid != state_[i]) { - if (nonce == nonces_[i]) { - state_[i] = kNTStateFlushPending; - return true; - } - } - } - return false; -} - -bool NonceTable::NonceCollision(uint32_t nonce) const { - for (int i = 0; i < kTableSize; ++i) { - if (nonce == nonces_[i]) return true; - } - return false; -} - -void NonceTable::Flush() { - for (int i = 0; i < kTableSize; ++i) { - if (kNTStateFlushPending == state_[i]) { - state_[i] = kNTStateInvalid; - } - } -} - -} // namespace wvoec_ref diff --git a/oemcrypto/ref/src/oemcrypto_nonce_table.h b/oemcrypto/ref/src/oemcrypto_nonce_table.h deleted file mode 100644 index 409e7fc..0000000 --- a/oemcrypto/ref/src/oemcrypto_nonce_table.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master -// License Agreement. -// -// Reference implementation of OEMCrypto APIs -// -#ifndef REF_OEMCRYPTO_NONCE_TABLE_H_ -#define REF_OEMCRYPTO_NONCE_TABLE_H_ - -#include - -namespace wvoec_ref { - -class NonceTable { - public: - static const int kTableSize = 4; - NonceTable() { - for (int i = 0; i < kTableSize; ++i) { - state_[i] = kNTStateInvalid; - } - } - ~NonceTable() {} - void AddNonce(uint32_t nonce); - bool CheckNonce(uint32_t nonce); - // Verify that the nonce is not the same as any in this table. - bool NonceCollision(uint32_t nonce) const; - void Flush(); - - private: - enum NonceTableState { - kNTStateInvalid, - kNTStateValid, - kNTStateFlushPending - }; - NonceTableState state_[kTableSize]; - uint32_t age_[kTableSize]; - uint32_t nonces_[kTableSize]; -}; - -} // namespace wvoec_ref - -#endif // REF_OEMCRYPTO_NONCE_TABLE_H_ diff --git a/oemcrypto/ref/src/oemcrypto_old_usage_table_ref.cpp b/oemcrypto/ref/src/oemcrypto_old_usage_table_ref.cpp deleted file mode 100644 index 5e9e9a7..0000000 --- a/oemcrypto/ref/src/oemcrypto_old_usage_table_ref.cpp +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master -// License Agreement. -// -// Reference implementation of OEMCrypto APIs -// -// This is from the v12 version of oemcrypto usage tables. It is used for -// devices that upgrade from v12 to v13 in the field, and need to convert from -// the old type of usage table to the new. -#include "oemcrypto_old_usage_table_ref.h" - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "file_store.h" -#include "log.h" -#include "oemcrypto_engine_ref.h" -// TODO(fredgc): Setting the device files base bath is currently broken as -// wvcdm::Properties is no longer used by the reference code. -//#include "properties.h" -#include "pst_report.h" -#include "string_conversions.h" - -namespace wvoec_ref { - -OldUsageTableEntry::OldUsageTableEntry(OldUsageTable *old_usage_table, - const std::vector &pst_hash) - : pst_hash_(pst_hash), - old_usage_table_(old_usage_table), - time_of_license_received_( - old_usage_table_->ce_->RollbackCorrectedOfflineTime()), - time_of_first_decrypt_(0), - time_of_last_decrypt_(0), - status_(kUnused) {} - -OldUsageTableEntry::~OldUsageTableEntry() {} - -OldUsageTableEntry::OldUsageTableEntry(OldUsageTable *old_usage_table, - const OldStoredUsageEntry *buffer) - : old_usage_table_(old_usage_table) { - pst_hash_.assign(buffer->pst_hash, buffer->pst_hash + SHA256_DIGEST_LENGTH); - time_of_license_received_ = buffer->time_of_license_received; - time_of_first_decrypt_ = buffer->time_of_first_decrypt; - time_of_last_decrypt_ = buffer->time_of_last_decrypt; - status_ = buffer->status; - mac_key_server_.assign(buffer->mac_key_server, - buffer->mac_key_server + wvoec::MAC_KEY_SIZE); - mac_key_client_.assign(buffer->mac_key_client, - buffer->mac_key_client + wvoec::MAC_KEY_SIZE); -} - -OldUsageTable::OldUsageTable(CryptoEngine *ce) { - ce_ = ce; - generation_ = 0; - table_.clear(); - - // Load saved table. - wvcdm::FileSystem *file_system = ce->file_system(); - std::unique_ptr file; - std::string path; - // Note: this path is OK for a real implementation, but using security level 1 - // would be better. - // TODO(fredgc, jfore): Address how this property is presented to the ref. - // For now, the path is empty. - /*if (!Properties::GetDeviceFilesBasePath(kSecurityLevelL3, &path)) { - LOGE("OldUsageTable: Unable to get base path"); - return; - }*/ - std::string filename = path + "UsageTable.dat"; - if (!file_system->Exists(filename)) { - return; - } - - size_t file_size = file_system->FileSize(filename); - std::vector encrypted_buffer(file_size); - std::vector buffer(file_size); - OldStoredUsageTable *stored_table = - reinterpret_cast(&buffer[0]); - OldStoredUsageTable *encrypted_table = - reinterpret_cast(&encrypted_buffer[0]); - - file = file_system->Open(filename, wvcdm::FileSystem::kReadOnly); - if (!file) { - LOGE("OldUsageTable: File open failed: %s", path.c_str()); - return; - } - file->Read(reinterpret_cast(&encrypted_buffer[0]), file_size); - - // Verify the signature of the usage table file. - - // This should be encrypted and signed with a device specific key. - // For the reference implementation, I'm just going to use the keybox key. - const std::vector &key = ce_->DeviceRootKey(); - if (key.empty()) { - LOGE("OldUsageTable: DeviceRootKey is unexpectedly empty."); - table_.clear(); - return; - } - - uint8_t computed_signature[SHA256_DIGEST_LENGTH]; - unsigned int sig_length = sizeof(computed_signature); - if (!HMAC(EVP_sha256(), &key[0], key.size(), - &encrypted_buffer[SHA256_DIGEST_LENGTH], - file_size - SHA256_DIGEST_LENGTH, computed_signature, - &sig_length)) { - LOGE("OldUsageTable: Could not recreate signature."); - table_.clear(); - return; - } - if (memcmp(encrypted_table->signature, computed_signature, sig_length)) { - LOGE("OldUsageTable: Invalid signature given: %s", - wvcdm::HexEncode(&encrypted_buffer[0], sig_length).c_str()); - LOGE("OldUsageTable: Invalid signature computed: %s", - wvcdm::HexEncode(computed_signature, sig_length).c_str()); - table_.clear(); - return; - } - - // Next, decrypt the table. - uint8_t iv_buffer[wvoec::KEY_IV_SIZE]; - memcpy(iv_buffer, encrypted_table->iv, wvoec::KEY_IV_SIZE); - AES_KEY aes_key; - AES_set_decrypt_key(&key[0], 128, &aes_key); - AES_cbc_encrypt(&encrypted_buffer[SHA256_DIGEST_LENGTH + wvoec::KEY_IV_SIZE], - &buffer[SHA256_DIGEST_LENGTH + wvoec::KEY_IV_SIZE], - file_size - SHA256_DIGEST_LENGTH - wvoec::KEY_IV_SIZE, &aes_key, - iv_buffer, AES_DECRYPT); - - // Next, read the generation number from a different location. - // On a real implementation, you should NOT put the generation number in - // a file in user space. It should be stored in secure memory. For the - // reference implementation, we'll just pretend this is secure. - std::string filename2 = path + "GenerationNumber.dat"; - file = file_system->Open(filename2, wvcdm::FileSystem::kReadOnly); - if (!file) { - LOGE("OldUsageTable: File open failed: %s (clearing table)", path.c_str()); - generation_ = 0; - table_.clear(); - return; - } - file->Read(reinterpret_cast(&generation_), sizeof(int64_t)); - if ((stored_table->generation > generation_ + 1) || - (stored_table->generation < generation_ - 1)) { - LOGE("OldUsageTable: Rollback detected. Clearing Usage Table. %lx -> %lx", - generation_, stored_table->generation); - table_.clear(); - generation_ = 0; - return; - } - - // At this point, the stored table looks valid. We can load in all the - // entries. - for (uint64_t i = 0; i < stored_table->count; i++) { - OldUsageTableEntry *entry = - new OldUsageTableEntry(this, &stored_table->entries[i].entry); - table_[entry->pst_hash()] = entry; - } -} - -OldUsageTableEntry *OldUsageTable::FindEntry(const std::vector &pst) { - std::unique_lock lock(lock_); - return FindEntryLocked(pst); -} - -OldUsageTableEntry *OldUsageTable::FindEntryLocked( - const std::vector &pst) { - std::vector pst_hash; - if (!ComputeHash(pst, pst_hash)) { - LOGE("OldUsageTable: Could not compute hash of pst."); - return NULL; - } - EntryMap::iterator it = table_.find(pst_hash); - if (it == table_.end()) { - return NULL; - } - return it->second; -} - -OldUsageTableEntry *OldUsageTable::CreateEntry( - const std::vector &pst) { - std::vector pst_hash; - if (!ComputeHash(pst, pst_hash)) { - LOGE("OldUsageTable: Could not compute hash of pst."); - return NULL; - } - OldUsageTableEntry *entry = new OldUsageTableEntry(this, pst_hash); - std::unique_lock lock(lock_); - table_[pst_hash] = entry; - return entry; -} - -void OldUsageTable::Clear() { - std::unique_lock lock(lock_); - for (EntryMap::iterator i = table_.begin(); i != table_.end(); ++i) { - if (i->second) delete i->second; - } - table_.clear(); -} - -void OldUsageTable::DeleteFile(CryptoEngine *ce) { - wvcdm::FileSystem *file_system = ce->file_system(); - std::string path; - // Note: this path is OK for a real implementation, but using security level 1 - // would be better. - // TODO(jfore): Address how this property is presented to the ref. For now, - // the path is empty. - /*if (!Properties::GetDeviceFilesBasePath(kSecurityLevelL3, &path)) { - LOGE("OldUsageTable: Unable to get base path"); - return; - }*/ - std::string filename = path + "UsageTable.dat"; - if (file_system->Exists(filename)) { - if (!file_system->Remove(filename)) { - LOGE("DeleteOldUsageTable: error removing file."); - } - } -} - -bool OldUsageTable::ComputeHash(const std::vector &pst, - std::vector &pst_hash) { - // The PST is not fixed size, and we have no promises that it is reasonbly - // sized, so we compute a hash of it, and store that instead. - pst_hash.resize(SHA256_DIGEST_LENGTH); - SHA256_CTX context; - if (!SHA256_Init(&context)) return false; - if (!SHA256_Update(&context, &pst[0], pst.size())) return false; - if (!SHA256_Final(&pst_hash[0], &context)) return false; - return true; -} - -} // namespace wvoec_ref diff --git a/oemcrypto/ref/src/oemcrypto_old_usage_table_ref.h b/oemcrypto/ref/src/oemcrypto_old_usage_table_ref.h deleted file mode 100644 index 452d504..0000000 --- a/oemcrypto/ref/src/oemcrypto_old_usage_table_ref.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary -// source code may only be used and distributed under the Widevine Master -// License Agreement. -// -// Reference implementation of OEMCrypto APIs -// -// This is from the v12 version of oemcrypto usage tables. It is used for -// devices that upgrade from v12 to v13 in the field, and need to convert from -// the old type of usage table to the new. -#ifndef OEMCRYPTO_OLD_USAGE_TABLE_REF_H_ -#define OEMCRYPTO_OLD_USAGE_TABLE_REF_H_ - -#include -#include -#include -#include -#include - -#include "OEMCryptoCENC.h" -#include "oemcrypto_types.h" -#include "openssl/sha.h" - -namespace wvoec_ref { - -class CryptoEngine; -class OldUsageTable; -class UsagetTableEntry; - -struct OldStoredUsageEntry { - // To save disk space, we only store a hash of the pst. - uint8_t pst_hash[SHA256_DIGEST_LENGTH]; - int64_t time_of_license_received; - int64_t time_of_first_decrypt; - int64_t time_of_last_decrypt; - enum OEMCrypto_Usage_Entry_Status status; - uint8_t mac_key_server[wvoec::MAC_KEY_SIZE]; - uint8_t mac_key_client[wvoec::MAC_KEY_SIZE]; -}; - -typedef union { - struct OldStoredUsageEntry entry; - uint8_t padding[128]; // multiple of block size and bigger than entry size. -} AlignedOldStoredUsageEntry; - -struct OldStoredUsageTable { - uint8_t signature[SHA256_DIGEST_LENGTH]; - uint8_t iv[wvoec::KEY_IV_SIZE]; - int64_t generation; - uint64_t count; - AlignedOldStoredUsageEntry entries[]; -}; - -class OldUsageTableEntry { - public: - OldUsageTableEntry(OldUsageTable *old_usage_table, - const std::vector &pst_hash); - OldUsageTableEntry(OldUsageTable *old_usage_table, - const OldStoredUsageEntry *buffer); - ~OldUsageTableEntry(); - const std::vector &pst_hash() const { return pst_hash_; } - - private: - std::vector pst_hash_; - const OldUsageTable *old_usage_table_; - int64_t time_of_license_received_; - int64_t time_of_first_decrypt_; - int64_t time_of_last_decrypt_; - enum OEMCrypto_Usage_Entry_Status status_; - std::vector mac_key_server_; - std::vector mac_key_client_; - - friend class UsageTableEntry; - friend class UsageTable; -}; - -class OldUsageTable { - public: - OldUsageTable(CryptoEngine *ce); - ~OldUsageTable() { Clear(); } - OldUsageTableEntry *FindEntry(const std::vector &pst); - OldUsageTableEntry *CreateEntry(const std::vector &pst); - void Clear(); - static void DeleteFile(CryptoEngine *ce); - - private: - OldUsageTableEntry *FindEntryLocked(const std::vector &pst); - bool ComputeHash(const std::vector &pst, - std::vector &pst_hash); - - typedef std::map, OldUsageTableEntry *> EntryMap; - EntryMap table_; - std::mutex lock_; - int64_t generation_; - CryptoEngine *ce_; - - friend class OldUsageTableEntry; -}; - -} // namespace wvoec_ref - -#endif // OEMCRYPTO_OLD_USAGE_TABLE_REF_H_ diff --git a/oemcrypto/ref/src/oemcrypto_ref.cpp b/oemcrypto/ref/src/oemcrypto_ref.cpp index 355fbf7..dc00cc5 100644 --- a/oemcrypto/ref/src/oemcrypto_ref.cpp +++ b/oemcrypto/ref/src/oemcrypto_ref.cpp @@ -20,8 +20,10 @@ #include #include #include + #include "file_store.h" #include "log.h" +#include "odk.h" #include "oemcrypto_engine_ref.h" #include "oemcrypto_session.h" #include "oemcrypto_usage_table_ref.h" @@ -37,9 +39,9 @@ namespace { const uint8_t kBakedInCertificateMagicBytes[] = {0xDE, 0xAD, 0xBE, 0xEF}; // Return uint32 referenced through a potentially unaligned pointer. -// If the pointer is NULL, return 0. +// If the pointer is nullptr, return 0. uint32_t unaligned_dereference_uint32(const void* unaligned_ptr) { - if (unaligned_ptr == NULL) return 0; + if (unaligned_ptr == nullptr) return 0; uint32_t value; const uint8_t* src = reinterpret_cast(unaligned_ptr); uint8_t* dest = reinterpret_cast(&value); @@ -124,8 +126,8 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_CloseSession( OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateDerivedKeys( OEMCrypto_SESSION session, const uint8_t* mac_key_context, - uint32_t mac_key_context_length, const uint8_t* enc_key_context, - uint32_t enc_key_context_length) { + size_t mac_key_context_length, const uint8_t* enc_key_context, + size_t enc_key_context_length) { if (crypto_engine == nullptr) { LOGE("OEMCrypto_GenerateDerivedKeys: OEMCrypto not initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; @@ -139,7 +141,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateDerivedKeys( } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_GenerateDerivedKeys(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -157,7 +159,6 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateDerivedKeys( return OEMCrypto_SUCCESS; } - OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session, uint32_t* nonce) { if (crypto_engine == nullptr) { @@ -165,7 +166,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session, return OEMCrypto_ERROR_UNKNOWN_FAILURE; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_GenerateNonce(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -199,38 +200,120 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateNonce(OEMCrypto_SESSION session, return OEMCrypto_ERROR_UNKNOWN_FAILURE; } } - session_ctx->AddNonce(nonce_value); + if (!session_ctx->set_nonce(nonce_value)) { + return OEMCrypto_ERROR_INVALID_CONTEXT; + } *nonce = nonce_value; return OEMCrypto_SUCCESS; } -OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateSignature( - OEMCrypto_SESSION session, const uint8_t* message, size_t message_length, - uint8_t* signature, size_t* signature_length) { +OEMCRYPTO_API OEMCryptoResult OEMCrypto_SignLicenseRequest( + OEMCrypto_SESSION session, const uint8_t* protobuf_message, + size_t protobuf_message_length, uint8_t* core_message, + size_t* core_message_length, uint8_t* signature, size_t* signature_length) { if (crypto_engine == nullptr) { - LOGE("OEMCrypto_GenerateSignature: OEMCrypto Not Initialized."); + LOGE("OEMCrypto_SignLicenseRequest: OEMCrypto Not Initialized."); + return OEMCrypto_ERROR_UNKNOWN_FAILURE; + } + if (signature_length == nullptr || core_message_length == nullptr) { return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (*signature_length < SHA256_DIGEST_LENGTH) { *signature_length = SHA256_DIGEST_LENGTH; return OEMCrypto_ERROR_SHORT_BUFFER; } - if (message == NULL || message_length == 0 || signature == NULL || - signature_length == 0) { - LOGE("[OEMCrypto_GenerateSignature(): OEMCrypto_ERROR_INVALID_CONTEXT]"); + if (protobuf_message == nullptr || protobuf_message_length == 0 || + signature == nullptr) { + LOGE("[OEMCrypto_SignLicenseRequest(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { - LOGE("[OEMCrypto_GenerateSignature(): ERROR_INVALID_SESSION]"); + if (session_ctx == nullptr || !session_ctx->isValid()) { + LOGE("[OEMCrypto_SignLicenseRequest(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - if (session_ctx->GenerateSignature(message, message_length, signature, - signature_length)) { + // TODO(b/135288420): Add core message functionality. + *core_message_length = 0; + + if (session_ctx->GenerateSignature(protobuf_message, protobuf_message_length, + signature, signature_length, false)) { + return OEMCrypto_SUCCESS; + } + return OEMCrypto_ERROR_UNKNOWN_FAILURE; +} + +OEMCRYPTO_API OEMCryptoResult OEMCrypto_SignRenewalRequest( + OEMCrypto_SESSION session, const uint8_t* protobuf_message, + size_t protobuf_message_length, uint8_t* core_message, + size_t* core_message_length, uint8_t* signature, size_t* signature_length) { + if (crypto_engine == nullptr) { + LOGE("OEMCrypto_SignRenewalRequest: OEMCrypto Not Initialized."); + return OEMCrypto_ERROR_UNKNOWN_FAILURE; + } + if (signature_length == nullptr || core_message_length == nullptr) { + return OEMCrypto_ERROR_UNKNOWN_FAILURE; + } + if (*signature_length < SHA256_DIGEST_LENGTH) { + *signature_length = SHA256_DIGEST_LENGTH; + return OEMCrypto_ERROR_SHORT_BUFFER; + } + if (protobuf_message == nullptr || protobuf_message_length == 0 || + signature == nullptr) { + LOGE("[OEMCrypto_SignRenewalRequest(): OEMCrypto_ERROR_INVALID_CONTEXT]"); + return OEMCrypto_ERROR_INVALID_CONTEXT; + } + + SessionContext* session_ctx = crypto_engine->FindSession(session); + if (session_ctx == nullptr || !session_ctx->isValid()) { + LOGE("[OEMCrypto_SignRenewalRequest(): ERROR_INVALID_SESSION]"); + return OEMCrypto_ERROR_INVALID_SESSION; + } + + // TODO(b/135288420): Add core message functionality. + *core_message_length = 0; + + if (session_ctx->GenerateSignature(protobuf_message, protobuf_message_length, + signature, signature_length, true)) { + return OEMCrypto_SUCCESS; + } + return OEMCrypto_ERROR_UNKNOWN_FAILURE; +} + +OEMCRYPTO_API OEMCryptoResult OEMCrypto_SignProvisioningRequest( + OEMCrypto_SESSION session, const uint8_t* protobuf_message, + size_t protobuf_message_length, uint8_t* core_message, + size_t* core_message_length, uint8_t* signature, size_t* signature_length) { + if (crypto_engine == nullptr) { + LOGE("OEMCrypto_SignProvisioningRequest: OEMCrypto Not Initialized."); + return OEMCrypto_ERROR_UNKNOWN_FAILURE; + } + if (signature_length == nullptr || core_message_length == nullptr) { + return OEMCrypto_ERROR_UNKNOWN_FAILURE; + } + if (*signature_length < SHA256_DIGEST_LENGTH) { + *signature_length = SHA256_DIGEST_LENGTH; + return OEMCrypto_ERROR_SHORT_BUFFER; + } + if (protobuf_message == nullptr || protobuf_message_length == 0 || + signature == nullptr) { + LOGE("OEMCrypto_ERROR_INVALID_CONTEXT"); + return OEMCrypto_ERROR_INVALID_CONTEXT; + } + + SessionContext* session_ctx = crypto_engine->FindSession(session); + if (session_ctx == nullptr || !session_ctx->isValid()) { + LOGE("[OEMCrypto_SignProvisioningRequest(): ERROR_INVALID_SESSION]"); + return OEMCrypto_ERROR_INVALID_SESSION; + } + + // TODO(b/135288420): Add core message functionality. + *core_message_length = 0; + + if (session_ctx->GenerateSignature(protobuf_message, protobuf_message_length, + signature, signature_length, false)) { return OEMCrypto_SUCCESS; } return OEMCrypto_ERROR_UNKNOWN_FAILURE; @@ -238,7 +321,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateSignature( bool RangeCheck(const uint8_t* message, uint32_t message_length, const uint8_t* field, uint32_t field_length, bool allow_null) { - if (field == NULL) return allow_null; + if (field == nullptr) return allow_null; if (field < message) return false; if (field + field_length > message + message_length) return false; return true; @@ -268,12 +351,12 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadKeys( return OEMCrypto_ERROR_KEYBOX_INVALID; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_LoadKeys(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - if (message == NULL || message_length == 0 || signature == NULL || - signature_length == 0 || key_array == NULL || num_keys == 0) { + if (message == nullptr || message_length == 0 || signature == nullptr || + signature_length == 0 || key_array == nullptr || num_keys == 0) { LOGE("[OEMCrypto_LoadKeys(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -321,12 +404,13 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadKeys( OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadEntitledContentKeys( OEMCrypto_SESSION session, const uint8_t* message, size_t message_length, - size_t num_keys, const OEMCrypto_EntitledContentKeyObject* key_array) { - if (num_keys == 0) { + const OEMCrypto_EntitledContentKeyObject* key_array, + size_t key_array_length) { + if (key_array_length == 0) { LOGE("[OEMCrypto_LoadEntitledContentKeys(): key_array is empty."); return OEMCrypto_SUCCESS; } - if (!key_array) { + if (key_array == nullptr) { LOGE("[OEMCrypto_LoadEntitledContentKeys(): missing key_array."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } @@ -335,11 +419,11 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadEntitledContentKeys( return OEMCrypto_ERROR_UNKNOWN_FAILURE; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_LoadEntitledContentKeys(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - for (unsigned int i = 0; i < num_keys; i++) { + for (size_t i = 0; i < key_array_length; i++) { if (!RangeCheck(message_length, key_array[i].entitlement_key_id, false) || !RangeCheck(message_length, key_array[i].content_key_id, false) || !RangeCheck(message_length, key_array[i].content_key_data_iv, false) || @@ -347,14 +431,13 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadEntitledContentKeys( LOGE( "[OEMCrypto_LoadEntitledContentKeys(): " "OEMCrypto_ERROR_INVALID_CONTEXT -range " - "check %d]", + "check %zu]", i); return OEMCrypto_ERROR_INVALID_CONTEXT; } } - - return session_ctx->LoadEntitledContentKeys(message, message_length, num_keys, - key_array); + return session_ctx->LoadEntitledContentKeys(message, message_length, + key_array, key_array_length); } OEMCRYPTO_API OEMCryptoResult OEMCrypto_RefreshKeys( @@ -372,12 +455,12 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RefreshKeys( } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_RefreshKeys(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - if (message == NULL || message_length == 0 || signature == NULL || + if (message == nullptr || message_length == 0 || signature == nullptr || signature_length == 0 || num_keys == 0) { LOGE("[OEMCrypto_RefreshKeys(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; @@ -437,7 +520,6 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RefreshKeys( } } - session_ctx->FlushNonces(); if (status != OEMCrypto_SUCCESS) { return status; } @@ -454,13 +536,13 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_QueryKeyControl( return OEMCrypto_ERROR_UNKNOWN_FAILURE; } uint32_t* block = reinterpret_cast(key_control_block); - if ((key_control_block_length == NULL) || + if ((key_control_block_length == nullptr) || (*key_control_block_length < wvoec::KEY_CONTROL_SIZE)) { LOGE("[OEMCrypto_QueryKeyControl(): OEMCrypto_ERROR_SHORT_BUFFER]"); return OEMCrypto_ERROR_SHORT_BUFFER; } *key_control_block_length = wvoec::KEY_CONTROL_SIZE; - if (key_id == NULL) { + if (key_id == nullptr) { LOGE( "[OEMCrypto_QueryKeyControl(): key_id null. " "OEMCrypto_ERROR_UNKNOWN_FAILURE]"); @@ -468,7 +550,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_QueryKeyControl( } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_QueryKeyControl(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -492,7 +574,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_SelectKey( #endif SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_SelectKey(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -511,8 +593,8 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_DecryptCENC( LOGE("OEMCrypto_DecryptCENC: OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (data_addr == NULL || data_length == 0 || iv == NULL || - out_buffer == NULL) { + if (data_addr == nullptr || data_length == 0 || iv == nullptr || + out_buffer == nullptr) { LOGE("[OEMCrypto_DecryptCENC(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -537,7 +619,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_DecryptCENC( #endif SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_DecryptCENC(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -556,7 +638,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_CopyBuffer( LOGE("OEMCrypto_CopyBuffer: OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (data_addr == NULL || out_buffer == NULL) { + if (data_addr == nullptr || out_buffer == nullptr) { LOGE("[OEMCrypto_CopyBuffer(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -570,7 +652,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_CopyBuffer( OEMCryptoResult status = crypto_engine->SetDestination(out_buffer, data_length, subsample_flags); if (status != OEMCrypto_SUCCESS) return status; - if (crypto_engine->destination() != NULL) { + if (crypto_engine->destination() != nullptr) { memmove(crypto_engine->destination(), data_addr, data_length); } return crypto_engine->PushDestination(out_buffer, subsample_flags); @@ -661,25 +743,37 @@ OEMCRYPTO_API OEMCrypto_ProvisioningMethod OEMCrypto_GetProvisioningMethod() { return crypto_engine->config_provisioning_method(); } -OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetOEMPublicCertificate( - OEMCrypto_SESSION session, uint8_t* public_cert, - size_t* public_cert_length) { +OEMCRYPTO_API OEMCryptoResult +OEMCrypto_LoadOEMPrivateKey(OEMCrypto_SESSION session) { if (crypto_engine == nullptr) { - LOGE("OEMCrypto_GetOEMPublicCertificate: OEMCrypto Not Initialized."); + LOGE("OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } if (crypto_engine->config_provisioning_method() != OEMCrypto_OEMCertificate) { - LOGE("OEMCrypto_GetOEMPublicCertificate: Provisioning method = %d.", + LOGE("Provisioning method = %d.", crypto_engine->config_provisioning_method()); return OEMCrypto_ERROR_NOT_IMPLEMENTED; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { - LOGE("[OEMCrypto_GetOEMPublicCertificate(): ERROR_INVALID_SESSION]"); + if (session_ctx == nullptr || !session_ctx->isValid()) { + LOGE("ERROR_INVALID_SESSION"); return OEMCrypto_ERROR_INVALID_SESSION; } - return crypto_engine->get_oem_certificate(session_ctx, public_cert, - public_cert_length); + return crypto_engine->load_oem_private_key(session_ctx); +} + +OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetOEMPublicCertificate( + uint8_t* public_cert, size_t* public_cert_length) { + if (crypto_engine == nullptr) { + LOGE("OEMCrypto Not Initialized."); + return OEMCrypto_ERROR_UNKNOWN_FAILURE; + } + if (crypto_engine->config_provisioning_method() != OEMCrypto_OEMCertificate) { + LOGE("Provisioning method = %d.", + crypto_engine->config_provisioning_method()); + return OEMCrypto_ERROR_NOT_IMPLEMENTED; + } + return crypto_engine->get_oem_certificate(public_cert, public_cert_length); } OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetDeviceID(uint8_t* deviceID, @@ -721,7 +815,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetKeyData(uint8_t* keyData, return OEMCrypto_ERROR_NOT_IMPLEMENTED; } size_t length = crypto_engine->DeviceRootTokenLength(); - if (keyDataLength == NULL) { + if (keyDataLength == nullptr) { LOGE("[OEMCrypto_GetKeyData(): null pointer. ERROR_UNKNOWN_FAILURE]"); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } @@ -730,7 +824,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetKeyData(uint8_t* keyData, LOGE("[OEMCrypto_GetKeyData(): ERROR_SHORT_BUFFER]"); return OEMCrypto_ERROR_SHORT_BUFFER; } - if (keyData == NULL) { + if (keyData == nullptr) { LOGE("[OEMCrypto_GetKeyData(): null pointer. ERROR_UNKNOWN_FAILURE]"); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } @@ -762,14 +856,14 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey30( const uint8_t* enc_rsa_key_iv, uint8_t* wrapped_rsa_key, size_t* wrapped_rsa_key_length) { uint32_t nonce = unaligned_dereference_uint32(unaligned_nonce); - if (unaligned_nonce == NULL) { + if (unaligned_nonce == nullptr) { return OEMCrypto_ERROR_INVALID_CONTEXT; } if (crypto_engine == nullptr) { LOGE("OEMCrypto_RewrapDeviceRSAKey30: OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (wrapped_rsa_key_length == NULL) { + if (wrapped_rsa_key_length == nullptr) { LOGE("[OEMCrypto_RewrapDeviceRSAKey30(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -779,7 +873,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey30( // Important: This layout must match OEMCrypto_LoadDeviceRSAKey below. size_t buffer_size = enc_rsa_key_length + sizeof(WrappedRSAKey); - if (wrapped_rsa_key == NULL || *wrapped_rsa_key_length < buffer_size) { + if (wrapped_rsa_key == nullptr || *wrapped_rsa_key_length < buffer_size) { *wrapped_rsa_key_length = buffer_size; return OEMCrypto_ERROR_SHORT_BUFFER; } @@ -789,13 +883,13 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey30( return OEMCrypto_ERROR_KEYBOX_INVALID; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_RewrapDeviceRSAKey30(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - if (encrypted_message_key == NULL || encrypted_message_key_length == 0 || - enc_rsa_key == NULL || enc_rsa_key_iv == NULL || - unaligned_nonce == NULL) { + if (encrypted_message_key == nullptr || encrypted_message_key_length == 0 || + enc_rsa_key == nullptr || enc_rsa_key_iv == nullptr || + unaligned_nonce == nullptr) { LOGE("[OEMCrypto_RewrapDeviceRSAKey30(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -804,7 +898,6 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey30( if (!session_ctx->CheckNonce(nonce)) { return OEMCrypto_ERROR_INVALID_NONCE; } - session_ctx->FlushNonces(); if (!session_ctx->InstallRSAEncryptedKey(encrypted_message_key, encrypted_message_key_length)) { @@ -879,9 +972,9 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( size_t enc_rsa_key_length, const uint8_t* enc_rsa_key_iv, uint8_t* wrapped_rsa_key, size_t* wrapped_rsa_key_length) { uint32_t nonce = unaligned_dereference_uint32(unaligned_nonce); - if (unaligned_nonce == NULL) { - return OEMCrypto_ERROR_INVALID_CONTEXT; - } + if (unaligned_nonce == nullptr) { + return OEMCrypto_ERROR_INVALID_CONTEXT; + } if (crypto_engine == nullptr) { LOGE("OEMCrypto_RewrapDeviceRSAKey: OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; @@ -889,7 +982,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( if (crypto_engine->config_provisioning_method() != OEMCrypto_Keybox) { return OEMCrypto_ERROR_NOT_IMPLEMENTED; } - if (wrapped_rsa_key_length == NULL) { + if (wrapped_rsa_key_length == nullptr) { LOGE("[OEMCrypto_RewrapDeviceRSAKey(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -899,7 +992,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( // Important: This layout must match OEMCrypto_LoadDeviceRSAKey below. size_t buffer_size = enc_rsa_key_length + sizeof(WrappedRSAKey); - if (wrapped_rsa_key == NULL || *wrapped_rsa_key_length < buffer_size) { + if (wrapped_rsa_key == nullptr || *wrapped_rsa_key_length < buffer_size) { *wrapped_rsa_key_length = buffer_size; return OEMCrypto_ERROR_SHORT_BUFFER; } @@ -909,12 +1002,13 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( return OEMCrypto_ERROR_KEYBOX_INVALID; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_RewrapDeviceRSAKey(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - if (message == NULL || message_length == 0 || signature == NULL || - signature_length == 0 || unaligned_nonce == NULL || enc_rsa_key == NULL) { + if (message == nullptr || message_length == 0 || signature == nullptr || + signature_length == 0 || unaligned_nonce == nullptr || + enc_rsa_key == nullptr) { LOGE("[OEMCrypto_RewrapDeviceRSAKey(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -934,7 +1028,6 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( if (!session_ctx->CheckNonce(nonce)) { return OEMCrypto_ERROR_INVALID_NONCE; } - session_ctx->FlushNonces(); // Decrypt RSA key. std::vector pkcs8_rsa_key(enc_rsa_key_length); @@ -995,7 +1088,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_RewrapDeviceRSAKey( OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadDeviceRSAKey( OEMCrypto_SESSION session, const uint8_t* wrapped_rsa_key, size_t wrapped_rsa_key_length) { - if (wrapped_rsa_key == NULL) { + if (wrapped_rsa_key == nullptr) { LOGE("[OEMCrypto_LoadDeviceRSAKey(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -1023,7 +1116,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadDeviceRSAKey( } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_LoadDeviceRSAKey(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1085,7 +1178,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateRSASignature( } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_GenerateRSASignature(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1096,7 +1189,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GenerateRSASignature( return OEMCrypto_ERROR_SHORT_BUFFER; } - if (message == NULL || message_length == 0 || signature == NULL || + if (message == nullptr || message_length == 0 || signature == nullptr || signature_length == 0) { LOGE("[OEMCrypto_GenerateRSASignature(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; @@ -1122,7 +1215,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_DeriveKeysFromSessionKey( } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_GenerateDerivedKeys(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1146,7 +1239,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_DeriveKeysFromSessionKey( return OEMCrypto_SUCCESS; } -OEMCRYPTO_API uint32_t OEMCrypto_APIVersion() { return 15; } +OEMCRYPTO_API uint32_t OEMCrypto_APIVersion() { return 16; } OEMCRYPTO_API uint8_t OEMCrypto_Security_Patch_Level() { uint8_t security_patch_level = crypto_engine->config_security_patch_level(); @@ -1164,8 +1257,8 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetHDCPCapability( LOGE("OEMCrypto_GetHDCPCapability: OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (current == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE; - if (maximum == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + if (current == nullptr) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + if (maximum == nullptr) return OEMCrypto_ERROR_UNKNOWN_FAILURE; *current = crypto_engine->config_current_hdcp_capability(); *maximum = crypto_engine->config_maximum_hdcp_capability(); return OEMCrypto_SUCCESS; @@ -1200,12 +1293,21 @@ OEMCRYPTO_API bool OEMCrypto_SupportsUsageTable() { return supports_usage; } +OEMCRYPTO_API size_t OEMCrypto_MaximumUsageTableHeaderSize() { + // TOOD(b/140080305): fill in a real value. + if (crypto_engine == nullptr) { + LOGE("OEMCrypto_MaximumUsageTableHeaderSize: OEMCrypto Not Initialized."); + return 0; + } + return 200; +} + OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(size_t* count) { if (crypto_engine == nullptr) { LOGE("OEMCrypto_GetNumberOfOpenSessions: OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (count == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + if (count == nullptr) return OEMCrypto_ERROR_UNKNOWN_FAILURE; *count = crypto_engine->GetNumberOfOpenSessions(); return OEMCrypto_SUCCESS; } @@ -1216,7 +1318,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions( LOGE("OEMCrypto_GetMaxNumberOfSessions: OEMCrypto Not Initialized."); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (maximum == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + if (maximum == nullptr) return OEMCrypto_ERROR_UNKNOWN_FAILURE; *maximum = crypto_engine->GetMaxNumberOfSessions(); return OEMCrypto_SUCCESS; } @@ -1252,12 +1354,12 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_Generic_Encrypt( return OEMCrypto_ERROR_KEYBOX_INVALID; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_Generic_Encrypt(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - if (in_buffer == NULL || buffer_length == 0 || iv == NULL || - out_buffer == NULL) { + if (in_buffer == nullptr || buffer_length == 0 || iv == nullptr || + out_buffer == nullptr) { LOGE("[OEMCrypto_Generic_Encrypt(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -1278,12 +1380,12 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_Generic_Decrypt( return OEMCrypto_ERROR_KEYBOX_INVALID; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_Generic_Decrypt(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } - if (in_buffer == NULL || buffer_length == 0 || iv == NULL || - out_buffer == NULL) { + if (in_buffer == nullptr || buffer_length == 0 || iv == nullptr || + out_buffer == nullptr) { LOGE("[OEMCrypto_Generic_Decrypt(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -1305,7 +1407,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_Generic_Sign( return OEMCrypto_ERROR_KEYBOX_INVALID; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_Generic_Sign(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1313,7 +1415,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_Generic_Sign( *signature_length = SHA256_DIGEST_LENGTH; return OEMCrypto_ERROR_SHORT_BUFFER; } - if (in_buffer == NULL || buffer_length == 0 || signature == NULL) { + if (in_buffer == nullptr || buffer_length == 0 || signature == nullptr) { LOGE("[OEMCrypto_Generic_Sign(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -1335,14 +1437,14 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_Generic_Verify( return OEMCrypto_ERROR_KEYBOX_INVALID; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_Generic_Verify(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } if (signature_length != SHA256_DIGEST_LENGTH) { return OEMCrypto_ERROR_UNKNOWN_FAILURE; } - if (in_buffer == NULL || buffer_length == 0 || signature == NULL) { + if (in_buffer == nullptr || buffer_length == 0 || signature == nullptr) { LOGE("[OEMCrypto_Generic_Verify(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; } @@ -1350,11 +1452,6 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_Generic_Verify( signature, signature_length); } -// TODO(fredgc): remove this. -OEMCRYPTO_API OEMCryptoResult OEMCrypto_UpdateUsageTable() { - return OEMCrypto_ERROR_NOT_IMPLEMENTED; -} - OEMCRYPTO_API OEMCryptoResult OEMCrypto_DeactivateUsageEntry( OEMCrypto_SESSION session, const uint8_t* pst, size_t pst_length) { if (crypto_engine == nullptr) { @@ -1365,7 +1462,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_DeactivateUsageEntry( return OEMCrypto_ERROR_NOT_IMPLEMENTED; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_DeactivateUsageEntry(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1389,7 +1486,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_ReportUsage(OEMCrypto_SESSION session, return OEMCrypto_ERROR_INVALID_CONTEXT; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_ReportUsage(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1398,30 +1495,6 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_ReportUsage(OEMCrypto_SESSION session, return sts; } -OEMCRYPTO_API OEMCryptoResult OEMCrypto_DeleteUsageEntry( - OEMCrypto_SESSION, const uint8_t*, size_t, const uint8_t*, size_t, - const uint8_t*, size_t) { - // TODO(fredgc): delete this. - return OEMCrypto_ERROR_NOT_IMPLEMENTED; -} - -OEMCRYPTO_API OEMCryptoResult OEMCrypto_ForceDeleteUsageEntry(const uint8_t*, - size_t) { - // TODO(fredgc): delete this. - return OEMCrypto_ERROR_NOT_IMPLEMENTED; -} - -OEMCRYPTO_API OEMCryptoResult OEMCrypto_DeleteOldUsageTable() { - if (crypto_engine == nullptr) { - LOGE("OEMCrypto_DeleteOldUsageTable: OEMCrypto Not Initialized."); - return OEMCrypto_ERROR_UNKNOWN_FAILURE; - } - if (!crypto_engine->config_supports_usage_table()) { - return OEMCrypto_ERROR_NOT_IMPLEMENTED; - } - return crypto_engine->usage_table().DeleteOldUsageTable(); -} - OEMCRYPTO_API bool OEMCrypto_IsSRMUpdateSupported() { if (crypto_engine == nullptr) { LOGE("OEMCrypto_IsSRMUpdateSupported: OEMCrypto Not Initialized."); @@ -1502,7 +1575,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_CreateNewUsageEntry( return OEMCrypto_ERROR_NOT_IMPLEMENTED; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_CreateNewUsageEntry(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1524,7 +1597,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_LoadUsageEntry( return OEMCrypto_ERROR_NOT_IMPLEMENTED; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_LoadUsageEntry(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1551,7 +1624,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_UpdateUsageEntry( return OEMCrypto_ERROR_INVALID_CONTEXT; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_UpdateUsageEntry(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1583,49 +1656,13 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_MoveEntry(OEMCrypto_SESSION session, return OEMCrypto_ERROR_NOT_IMPLEMENTED; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_MoveEntry(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } return session_ctx->MoveEntry(new_index); } -OEMCRYPTO_API OEMCryptoResult OEMCrypto_CopyOldUsageEntry( - OEMCrypto_SESSION session, const uint8_t* pst, size_t pst_length) { - if (crypto_engine == nullptr) { - LOGE("OEMCrypto_CopyOldUsageEntry: OEMCrypto Not Initialized."); - return OEMCrypto_ERROR_UNKNOWN_FAILURE; - } - if (!crypto_engine->config_supports_usage_table()) { - return OEMCrypto_ERROR_NOT_IMPLEMENTED; - } - SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { - LOGE("[OEMCrypto_CopyOldUsageEntry(): ERROR_INVALID_SESSION]"); - return OEMCrypto_ERROR_INVALID_SESSION; - } - std::vector pstv(pst, pst + pst_length); - return session_ctx->CopyOldUsageEntry(pstv); -} - -OEMCRYPTO_API OEMCryptoResult OEMCrypto_CreateOldUsageEntry( - uint64_t time_since_license_received, uint64_t time_since_first_decrypt, - uint64_t time_since_last_decrypt, OEMCrypto_Usage_Entry_Status status, - uint8_t* server_mac_key, uint8_t* client_mac_key, const uint8_t* pst, - size_t pst_length) { - if (crypto_engine == nullptr) { - LOGE("OEMCrypto_CreateOldUsageEntry: OEMCrypto Not Initialized."); - return OEMCrypto_ERROR_UNKNOWN_FAILURE; - } - if (!crypto_engine->config_supports_usage_table()) { - return OEMCrypto_ERROR_NOT_IMPLEMENTED; - } - return crypto_engine->usage_table().CreateOldUsageEntry( - time_since_license_received, time_since_first_decrypt, - time_since_last_decrypt, status, server_mac_key, client_mac_key, pst, - pst_length); -} - OEMCRYPTO_API uint32_t OEMCrypto_SupportsDecryptHash() { return OEMCrypto_CRC_Clear_Buffer; } @@ -1638,7 +1675,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_SetDecryptHash( return OEMCrypto_ERROR_UNKNOWN_FAILURE; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_SetDecryptHash(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -1652,7 +1689,7 @@ OEMCRYPTO_API OEMCryptoResult OEMCrypto_GetHashErrorCode( return OEMCrypto_ERROR_UNKNOWN_FAILURE; } SessionContext* session_ctx = crypto_engine->FindSession(session); - if (!session_ctx || !session_ctx->isValid()) { + if (session_ctx == nullptr || !session_ctx->isValid()) { LOGE("[OEMCrypto_GetHashErrorCode(): ERROR_INVALID_SESSION]"); return OEMCrypto_ERROR_INVALID_SESSION; } diff --git a/oemcrypto/ref/src/oemcrypto_rsa_key_shared.cpp b/oemcrypto/ref/src/oemcrypto_rsa_key_shared.cpp index b34a316..6c73ad8 100644 --- a/oemcrypto/ref/src/oemcrypto_rsa_key_shared.cpp +++ b/oemcrypto/ref/src/oemcrypto_rsa_key_shared.cpp @@ -34,50 +34,50 @@ void RSA_shared_ptr::reset() { RSA_free(rsa_key_); } key_owned_ = false; - rsa_key_ = NULL; + rsa_key_ = nullptr; } bool RSA_shared_ptr::LoadPkcs8RsaKey(const uint8_t* buffer, size_t length) { - assert(buffer != NULL); + assert(buffer != nullptr); reset(); uint8_t* pkcs8_rsa_key = const_cast(buffer); BIO* bio = BIO_new_mem_buf(pkcs8_rsa_key, length); - if (bio == NULL) { + if (bio == nullptr) { LOGE("[LoadPkcs8RsaKey(): Could not allocate bio buffer]"); return false; } bool success = true; - PKCS8_PRIV_KEY_INFO* pkcs8_pki = d2i_PKCS8_PRIV_KEY_INFO_bio(bio, NULL); - if (pkcs8_pki == NULL) { + PKCS8_PRIV_KEY_INFO* pkcs8_pki = d2i_PKCS8_PRIV_KEY_INFO_bio(bio, nullptr); + if (pkcs8_pki == nullptr) { BIO_reset(bio); - pkcs8_pki = d2i_PKCS8_PRIV_KEY_INFO_bio(bio, NULL); - if (pkcs8_pki == NULL) { - LOGE("[LoadPkcs8RsaKey(): d2i_PKCS8_PRIV_KEY_INFO_bio returned NULL]"); + pkcs8_pki = d2i_PKCS8_PRIV_KEY_INFO_bio(bio, nullptr); + if (pkcs8_pki == nullptr) { + LOGE("[LoadPkcs8RsaKey(): d2i_PKCS8_PRIV_KEY_INFO_bio returned nullptr]"); dump_boringssl_error(); success = false; } } - EVP_PKEY* evp = NULL; + EVP_PKEY* evp = nullptr; if (success) { evp = EVP_PKCS82PKEY(pkcs8_pki); - if (evp == NULL) { - LOGE("[LoadPkcs8RsaKey(): EVP_PKCS82PKEY returned NULL]"); + if (evp == nullptr) { + LOGE("[LoadPkcs8RsaKey(): EVP_PKCS82PKEY returned nullptr]"); dump_boringssl_error(); success = false; } } if (success) { rsa_key_ = EVP_PKEY_get1_RSA(evp); - if (rsa_key_ == NULL) { + if (rsa_key_ == nullptr) { LOGE("[LoadPkcs8RsaKey(): PrivateKeyInfo did not contain an RSA key]"); success = false; } key_owned_ = true; } - if (evp != NULL) { + if (evp != nullptr) { EVP_PKEY_free(evp); } - if (pkcs8_pki != NULL) { + if (pkcs8_pki != nullptr) { PKCS8_PRIV_KEY_INFO_free(pkcs8_pki); } BIO_free(bio); diff --git a/oemcrypto/ref/src/oemcrypto_rsa_key_shared.h b/oemcrypto/ref/src/oemcrypto_rsa_key_shared.h index c80745d..98ea154 100644 --- a/oemcrypto/ref/src/oemcrypto_rsa_key_shared.h +++ b/oemcrypto/ref/src/oemcrypto_rsa_key_shared.h @@ -18,7 +18,7 @@ namespace wvoec_ref { // counting. class RSA_shared_ptr { public: - RSA_shared_ptr() : rsa_key_(NULL), key_owned_(false) {} + RSA_shared_ptr() : rsa_key_(nullptr), key_owned_(false) {} ~RSA_shared_ptr() { reset(); }; // Explicitly allow copy as share. explicit RSA_shared_ptr(const RSA_shared_ptr& other) : diff --git a/oemcrypto/ref/src/oemcrypto_session.cpp b/oemcrypto/ref/src/oemcrypto_session.cpp index eb70320..c08a86d 100644 --- a/oemcrypto/ref/src/oemcrypto_session.cpp +++ b/oemcrypto/ref/src/oemcrypto_session.cpp @@ -23,14 +23,15 @@ #include #include +#include "disallow_copy_and_assign.h" #include "keys.h" #include "log.h" +#include "odk.h" #include "oemcrypto_engine_ref.h" #include "oemcrypto_key_ref.h" #include "oemcrypto_rsa_key_shared.h" #include "oemcrypto_types.h" #include "platform.h" -#include "disallow_copy_and_assign.h" #include "string_conversions.h" #include "wvcrc32.h" @@ -159,11 +160,11 @@ EntitlementKey* EntitlementKeysContext::GetEntitlementKey( SessionContext::~SessionContext() { if (usage_entry_) { delete usage_entry_; - usage_entry_ = NULL; + usage_entry_ = nullptr; } if (session_keys_) { delete session_keys_; - session_keys_ = NULL; + session_keys_ = nullptr; } } @@ -171,7 +172,7 @@ SessionContext::~SessionContext() { bool SessionContext::DeriveKey(const std::vector& key, const std::vector& context, int counter, std::vector* out) { - if (key.empty() || counter > 4 || context.empty() || out == NULL) { + if (key.empty() || counter > 4 || context.empty() || out == nullptr) { LOGE("[DeriveKey(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return false; } @@ -290,9 +291,10 @@ bool SessionContext::RSADeriveKeys( bool SessionContext::GenerateSignature(const uint8_t* message, size_t message_length, uint8_t* signature, - size_t* signature_length) { - if (message == NULL || message_length == 0 || signature == NULL || - signature_length == 0) { + size_t* signature_length, + bool renewal_message) { + if (message == nullptr || message_length == 0 || signature == nullptr || + signature_length == nullptr) { LOGE("[OEMCrypto_GenerateSignature(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return false; } @@ -301,11 +303,18 @@ bool SessionContext::GenerateSignature(const uint8_t* message, return false; } - if (*signature_length < SHA256_DIGEST_LENGTH) { + if (*signature_length != SHA256_DIGEST_LENGTH) { *signature_length = SHA256_DIGEST_LENGTH; return false; } + if (!renewal_message) { + if (state_request_signed_) { + return false; + } + state_request_signed_ = true; + } + unsigned int md_len = *signature_length; if (HMAC(EVP_sha256(), &mac_key_client_[0], wvoec::MAC_KEY_SIZE, message, message_length, signature, &md_len)) { @@ -326,7 +335,7 @@ size_t SessionContext::RSASignatureSize() { OEMCryptoResult SessionContext::GenerateRSASignature( const uint8_t* message, size_t message_length, uint8_t* signature, size_t* signature_length, RSA_Padding_Scheme padding_scheme) { - if (message == NULL || message_length == 0 || signature == NULL || + if (message == nullptr || message_length == 0 || signature == nullptr || signature_length == 0) { LOGE("[GenerateRSASignature(): OEMCrypto_ERROR_INVALID_CONTEXT]"); return OEMCrypto_ERROR_INVALID_CONTEXT; @@ -344,21 +353,29 @@ OEMCryptoResult SessionContext::GenerateRSASignature( return OEMCrypto_ERROR_INVALID_RSA_KEY; } // This is the standard padding scheme used for license requests. + // TODO(b/135288022): This first padding scheme will be used only for signing + // messages, as in OEMCrypto_Sign*Request. if (padding_scheme == kSign_RSASSA_PSS) { + if (state_request_signed_) { + return OEMCrypto_ERROR_INVALID_CONTEXT; + } + state_request_signed_ = true; + // Hash the message using SHA1. uint8_t hash[SHA_DIGEST_LENGTH]; if (!SHA1(message, message_length, hash)) { - LOGE("[GeneratRSASignature(): error creating signature hash.]"); + LOGE("[GenerateRSASignature(): error creating signature hash.]"); dump_boringssl_error(); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } // Add PSS padding. std::vector padded_digest(*signature_length); - int status = RSA_padding_add_PKCS1_PSS_mgf1( - rsa_key(), &padded_digest[0], hash, EVP_sha1(), NULL, kPssSaltLength); + int status = + RSA_padding_add_PKCS1_PSS_mgf1(rsa_key(), &padded_digest[0], hash, + EVP_sha1(), nullptr, kPssSaltLength); if (status == -1) { - LOGE("[GeneratRSASignature(): error padding hash.]"); + LOGE("[GenerateRSASignature(): error padding hash.]"); dump_boringssl_error(); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } @@ -367,21 +384,26 @@ OEMCryptoResult SessionContext::GenerateRSASignature( status = RSA_private_encrypt(*signature_length, &padded_digest[0], signature, rsa_key(), RSA_NO_PADDING); if (status == -1) { - LOGE("[GeneratRSASignature(): error in private encrypt.]"); + LOGE("[GenerateRSASignature(): error in private encrypt.]"); dump_boringssl_error(); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } // This is the alternate padding scheme used by cast receivers only. } else if (padding_scheme == kSign_PKCS1_Block1) { + // TODO(b/135288022): Alternate padding scheme is not used for messages, so + // we do not need to keep track of the state, like we do above. This + // padding scheme will be left over as the only valid option for this + // function. The padding scheme above will be used for signing messages. + if (message_length > 83) { - LOGE("[GeneratRSASignature(): RSA digest too large.]"); + LOGE("[GenerateRSASignature(): RSA digest too large.]"); return OEMCrypto_ERROR_SIGNATURE_FAILURE; } // Pad the message with PKCS1 padding, and then encrypt. size_t status = RSA_private_encrypt(message_length, message, signature, rsa_key(), RSA_PKCS1_PADDING); if (status != *signature_length) { - LOGE("[GeneratRSASignature(): error in RSA private encrypt. status=%d]", + LOGE("[GenerateRSASignature(): error in RSA private encrypt. status=%d]", status); dump_boringssl_error(); return OEMCrypto_ERROR_UNKNOWN_FAILURE; @@ -500,8 +522,12 @@ OEMCryptoResult SessionContext::LoadKeys( if (!ValidateMessage(message, message_length, signature, signature_length)) { return OEMCrypto_ERROR_SIGNATURE_FAILURE; } + if (state_response_loaded_) { + return OEMCrypto_ERROR_INVALID_CONTEXT; + } + state_response_loaded_ = true; - if (!session_keys_) { + if (session_keys_ == nullptr) { switch (license_type) { case OEMCrypto_ContentLicense: session_keys_ = new ContentKeysContext(); @@ -587,10 +613,9 @@ OEMCryptoResult SessionContext::LoadKeys( break; } } - FlushNonces(); if (status != OEMCrypto_SUCCESS) return status; - // enc_mac_key can be NULL if license renewal is not supported + // enc_mac_key can be nullptr if license renewal is not supported if (enc_mac_keys.length != 0) { // V2.1 license protocol: update mac keys after processing license response const std::vector enc_mac_keys_str = std::vector( @@ -641,15 +666,16 @@ OEMCryptoResult SessionContext::LoadKeys( } OEMCryptoResult SessionContext::LoadEntitledContentKeys( - const uint8_t* message, size_t message_length, size_t num_keys, - const OEMCrypto_EntitledContentKeyObject* key_array) { + const uint8_t* message, size_t message_length, + const OEMCrypto_EntitledContentKeyObject* key_array, + size_t key_array_length) { if (!key_array) { return OEMCrypto_ERROR_UNKNOWN_FAILURE; } if (!session_keys_ || session_keys_->type() != OEMCrypto_EntitlementLicense) { return OEMCrypto_ERROR_INVALID_CONTEXT; } - for (size_t i = 0; i < num_keys; ++i) { + for (size_t i = 0; i < key_array_length; ++i) { const OEMCrypto_EntitledContentKeyObject* key_data = &key_array[i]; std::vector entitlement_key_id; entitlement_key_id.assign(message + key_data->entitlement_key_id.offset, @@ -753,7 +779,7 @@ OEMCryptoResult SessionContext::InstallKey( } Key key(content_key, key_control_block); - if (!session_keys_) { + if (session_keys_ == nullptr) { return OEMCrypto_ERROR_INVALID_CONTEXT; } session_keys_->Insert(key_id, key); @@ -785,11 +811,11 @@ bool SessionContext::InstallRSAEncryptedKey( OEMCryptoResult SessionContext::RefreshKey( const KeyId& key_id, const std::vector& key_control, const std::vector& key_control_iv) { - if (!session_keys_) { + if (session_keys_ == nullptr) { return OEMCrypto_ERROR_INVALID_CONTEXT; } if (key_id.empty()) { - // Key control is not encrypted if key id is NULL + // Key control is not encrypted if key id is nullptr KeyControlBlock key_control_block(key_control); if (!key_control_block.valid()) { LOGE("Parse key control error."); @@ -807,7 +833,7 @@ OEMCryptoResult SessionContext::RefreshKey( Key* content_key = session_keys_->Find(key_id); - if (NULL == content_key) { + if (content_key == nullptr) { LOGE("Key ID not found."); return OEMCrypto_ERROR_NO_CONTENT_KEY; } @@ -963,7 +989,7 @@ OEMCryptoResult SessionContext::Generic_Encrypt(const uint8_t* in_buffer, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer) { // Check there is a content key - if (current_content_key() == NULL) { + if (current_content_key() == nullptr) { LOGE("[Generic_Encrypt(): OEMCrypto_ERROR_NO_CONTENT_KEY]"); return OEMCrypto_ERROR_NO_CONTENT_KEY; } @@ -1003,7 +1029,7 @@ OEMCryptoResult SessionContext::Generic_Decrypt(const uint8_t* in_buffer, OEMCrypto_Algorithm algorithm, uint8_t* out_buffer) { // Check there is a content key - if (current_content_key() == NULL) { + if (current_content_key() == nullptr) { LOGE("[Generic_Decrypt(): OEMCrypto_ERROR_NO_CONTENT_KEY]"); return OEMCrypto_ERROR_NO_CONTENT_KEY; } @@ -1044,7 +1070,7 @@ OEMCryptoResult SessionContext::Generic_Sign(const uint8_t* in_buffer, uint8_t* signature, size_t* signature_length) { // Check there is a content key - if (current_content_key() == NULL) { + if (current_content_key() == nullptr) { LOGE("[Generic_Sign(): OEMCrypto_ERROR_NO_CONTENT_KEY]"); return OEMCrypto_ERROR_NO_CONTENT_KEY; } @@ -1082,7 +1108,7 @@ OEMCryptoResult SessionContext::Generic_Verify(const uint8_t* in_buffer, const uint8_t* signature, size_t signature_length) { // Check there is a content key - if (current_content_key() == NULL) { + if (current_content_key() == nullptr) { LOGE("[Decrypt_Verify(): OEMCrypto_ERROR_NO_CONTENT_KEY]"); return OEMCrypto_ERROR_UNKNOWN_FAILURE; } @@ -1132,11 +1158,11 @@ bool SessionContext::UpdateMacKeys(const std::vector& enc_mac_keys, } bool SessionContext::QueryKeyControlBlock(const KeyId& key_id, uint32_t* data) { - if (!session_keys_) { + if (session_keys_ == nullptr) { return false; } const Key* content_key = session_keys_->Find(key_id); - if (NULL == content_key) { + if (content_key == nullptr) { LOGE("[QueryKeyControlBlock(): No key matches key id]"); return false; } @@ -1149,12 +1175,12 @@ bool SessionContext::QueryKeyControlBlock(const KeyId& key_id, uint32_t* data) { OEMCryptoResult SessionContext::SelectContentKey( const KeyId& key_id, OEMCryptoCipherMode cipher_mode) { - if (!session_keys_) { + if (session_keys_ == nullptr) { LOGE("Select Key: no session keys."); return OEMCrypto_ERROR_INVALID_CONTEXT; } Key* content_key = session_keys_->Find(key_id); - if (NULL == content_key) { + if (content_key == nullptr) { LOGE("No key matches key id"); return OEMCrypto_ERROR_NO_CONTENT_KEY; } @@ -1172,14 +1198,6 @@ OEMCryptoResult SessionContext::SelectContentKey( return OEMCrypto_SUCCESS; } -void SessionContext::AddNonce(uint32_t nonce) { nonce_table_.AddNonce(nonce); } - -bool SessionContext::CheckNonce(uint32_t nonce) { - return nonce_table_.CheckNonce(nonce); -} - -void SessionContext::FlushNonces() { nonce_table_.Flush(); } - bool SessionContext::CheckUsageEntry() { if (!usage_entry_) return false; return usage_entry_->CheckForUse(); @@ -1187,6 +1205,10 @@ bool SessionContext::CheckUsageEntry() { OEMCryptoResult SessionContext::CreateNewUsageEntry( uint32_t* usage_entry_number) { + if (usage_entry_) { + // Can only load one entry per session. + return OEMCrypto_ERROR_INVALID_CONTEXT; + } OEMCryptoResult result = ce_->usage_table().CreateNewUsageEntry( this, &usage_entry_, usage_entry_number); if (usage_entry_) { @@ -1197,6 +1219,10 @@ OEMCryptoResult SessionContext::CreateNewUsageEntry( OEMCryptoResult SessionContext::LoadUsageEntry( uint32_t index, const std::vector& buffer) { + if (usage_entry_) { + // Can only load one entry per session. + return OEMCrypto_ERROR_INVALID_CONTEXT; + } OEMCryptoResult result = ce_->usage_table().LoadUsageEntry(this, &usage_entry_, index, buffer); if (usage_entry_) { @@ -1244,12 +1270,6 @@ OEMCryptoResult SessionContext::MoveEntry(uint32_t new_index) { return ce_->usage_table().MoveEntry(usage_entry_, new_index); } -OEMCryptoResult SessionContext::CopyOldUsageEntry( - const std::vector& pst) { - if (!usage_entry_) return OEMCrypto_ERROR_INVALID_CONTEXT; - return usage_entry_->CopyOldUsageEntry(pst); -} - // Internal utility function to decrypt the message bool SessionContext::DecryptMessage(const std::vector& key, const std::vector& iv, @@ -1279,7 +1299,7 @@ OEMCryptoResult SessionContext::DecryptCENC( ChooseDecrypt(iv, block_offset, pattern, cipher_data, cipher_data_length, is_encrypted, clear_data, buffer_type); if (compute_hash_) { - if (current_content_key() == NULL || + if (current_content_key() == nullptr || (current_content_key()->control().control_bits() & wvoec::kControlAllowHashVerification) == 0) { LOGE("[DecryptCENC(): OEMCrypto_ERROR_UNKNOWN_FAILURE]"); @@ -1327,7 +1347,7 @@ OEMCryptoResult SessionContext::ChooseDecrypt( } // Check there is a content key - if (current_content_key() == NULL) { + if (current_content_key() == nullptr) { LOGE("[DecryptCTR(): OEMCrypto_ERROR_NO_CONTENT_KEY]"); return OEMCrypto_ERROR_DECRYPT_FAILED; } @@ -1484,7 +1504,7 @@ OEMCryptoResult SessionContext::DecryptCTR(const uint8_t* key_u8, while (remaining) { EVP_CIPHER_CTX* evp_cipher_ctx = EVP_CIPHER_CTX_new(); EVP_CIPHER_CTX_set_padding(evp_cipher_ctx, 0); - if (!EVP_DecryptInit_ex(evp_cipher_ctx, EVP_aes_128_ctr(), NULL, key_u8, + if (!EVP_DecryptInit_ex(evp_cipher_ctx, EVP_aes_128_ctr(), nullptr, key_u8, aes_iv_u8)) { LOGE("[DecryptCTR(): EVP_INIT ERROR]"); EVP_CIPHER_CTX_free(evp_cipher_ctx); @@ -1551,10 +1571,17 @@ OEMCryptoResult SessionContext::SetDecryptHash(uint32_t frame_number, OEMCryptoResult SessionContext::GetHashErrorCode( uint32_t* failed_frame_number) { - if (failed_frame_number == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE; + if (failed_frame_number == nullptr) return OEMCrypto_ERROR_UNKNOWN_FAILURE; if (hash_error_ != OEMCrypto_SUCCESS) *failed_frame_number = bad_frame_number_; return hash_error_; } +bool SessionContext::set_nonce(uint32_t nonce) { + if (state_nonce_created_) return false; + state_nonce_created_ = true; + nonce_ = nonce; + return true; +} + } // namespace wvoec_ref diff --git a/oemcrypto/ref/src/oemcrypto_session.h b/oemcrypto/ref/src/oemcrypto_session.h index 0956056..ca6aba1 100644 --- a/oemcrypto/ref/src/oemcrypto_session.h +++ b/oemcrypto/ref/src/oemcrypto_session.h @@ -15,9 +15,9 @@ #include #include "OEMCryptoCENC.h" +#include "odk_structs.h" #include "oemcrypto_auth_ref.h" #include "oemcrypto_key_ref.h" -#include "oemcrypto_nonce_table.h" #include "oemcrypto_rsa_key_shared.h" #include "oemcrypto_session_key_table.h" #include "oemcrypto_types.h" @@ -66,17 +66,21 @@ class SessionContext { : valid_(true), ce_(ce), id_(sid), - current_content_key_(NULL), - session_keys_(NULL), + current_content_key_(nullptr), + session_keys_(nullptr), + nonce_(0), rsa_key_(rsa_key), allowed_schemes_(kSign_RSASSA_PSS), - usage_entry_(NULL), + usage_entry_(nullptr), srm_requirements_status_(NoSRMVersion), usage_entry_status_(kNoUsageEntry), compute_hash_(false), current_hash_(0), bad_frame_number_(0), - hash_error_(OEMCrypto_SUCCESS) {} + hash_error_(OEMCrypto_SUCCESS), + state_nonce_created_(false), + state_request_signed_(false), + state_response_loaded_(false) {} virtual ~SessionContext(); bool isValid() { return valid_; } @@ -87,8 +91,10 @@ class SessionContext { virtual bool RSADeriveKeys(const std::vector& enc_session_key, const std::vector& mac_context, const std::vector& enc_context); + // TODO(b/135288022): remove renewal_message hack. virtual bool GenerateSignature(const uint8_t* message, size_t message_length, - uint8_t* signature, size_t* signature_length); + uint8_t* signature, size_t* signature_length, + bool renewal_message); size_t RSASignatureSize(); virtual OEMCryptoResult GenerateRSASignature( const uint8_t* message, size_t message_length, uint8_t* signature, @@ -128,9 +134,10 @@ class SessionContext { const OEMCrypto_KeyObject* key_array, OEMCrypto_Substring pst, OEMCrypto_Substring srm_restriction_data, OEMCrypto_LicenseType license_type); - OEMCryptoResult LoadEntitledContentKeys( - const uint8_t* message, size_t message_length, size_t num_keys, - const OEMCrypto_EntitledContentKeyObject* key_array); + virtual OEMCryptoResult LoadEntitledContentKeys( + const uint8_t* message, size_t message_length, + const OEMCrypto_EntitledContentKeyObject* key_array, + size_t key_array_length); virtual OEMCryptoResult InstallKey( const KeyId& key_id, const std::vector& key_data, const std::vector& key_data_iv, @@ -171,13 +178,13 @@ class SessionContext { const std::vector& encryption_key() { return encryption_key_; } uint32_t allowed_schemes() const { return allowed_schemes_; } - void AddNonce(uint32_t nonce); - bool CheckNonce(uint32_t nonce); - // Verify that the nonce does not match any in this session's nonce table. - bool NonceCollision(uint32_t nonce) const { - return nonce_table_.NonceCollision(nonce); - } - void FlushNonces(); + // Return true if nonce was set. + bool set_nonce(uint32_t nonce); + uint32_t nonce() const { return nonce_; } + + bool CheckNonce(uint32_t nonce) const { + return nonce != 0 && nonce == nonce_; + }; virtual OEMCryptoResult CreateNewUsageEntry(uint32_t* usage_entry_number); virtual OEMCryptoResult LoadUsageEntry(uint32_t index, @@ -190,7 +197,6 @@ class SessionContext { virtual OEMCryptoResult ReportUsage(const std::vector& pst, uint8_t* buffer, size_t* buffer_length); OEMCryptoResult MoveEntry(uint32_t new_index); - OEMCryptoResult CopyOldUsageEntry(const std::vector& pst); protected: bool DeriveKey(const std::vector& key, @@ -244,7 +250,7 @@ class SessionContext { std::vector session_key_; const Key* current_content_key_; SessionContextKeys* session_keys_; - NonceTable nonce_table_; + uint32_t nonce_; RSA_shared_ptr rsa_key_; uint32_t allowed_schemes_; // for RSA signatures. time_t timer_start_; @@ -265,6 +271,12 @@ class SessionContext { uint32_t bad_frame_number_; // Frame number with bad hash. OEMCryptoResult hash_error_; // Error code for first bad frame. + // The bare minimum state machine is to only call each of these function + // categories at most once. + bool state_nonce_created_; + bool state_request_signed_; + bool state_response_loaded_; + CORE_DISALLOW_COPY_AND_ASSIGN(SessionContext); }; diff --git a/oemcrypto/ref/src/oemcrypto_session_key_table.cpp b/oemcrypto/ref/src/oemcrypto_session_key_table.cpp index 42b8a58..e713197 100644 --- a/oemcrypto/ref/src/oemcrypto_session_key_table.cpp +++ b/oemcrypto/ref/src/oemcrypto_session_key_table.cpp @@ -13,7 +13,7 @@ namespace wvoec_ref { SessionKeyTable::~SessionKeyTable() { for (KeyMap::iterator i = keys_.begin(); i != keys_.end(); ++i) { - if (NULL != i->second) { + if (nullptr != i->second) { delete i->second; } } @@ -27,7 +27,7 @@ bool SessionKeyTable::Insert(const KeyId key_id, const Key& key_data) { Key* SessionKeyTable::Find(const KeyId key_id) { if (keys_.find(key_id) == keys_.end()) { - return NULL; + return nullptr; } return keys_[key_id]; } @@ -59,11 +59,11 @@ Key* EntitlementKeyTable::Find(const KeyId key_id) { ContentIdToEntitlementIdMap::iterator it = contentid_to_entitlementid_.find(key_id); if (it == contentid_to_entitlementid_.end()) { - return NULL; + return nullptr; } if (keys_.find(it->second) == keys_.end()) { - return NULL; + return nullptr; } return keys_[it->second]; } diff --git a/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp b/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp index c24275d..a08d06c 100644 --- a/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp +++ b/oemcrypto/ref/src/oemcrypto_usage_table_ref.cpp @@ -20,7 +20,6 @@ #include "file_store.h" #include "log.h" #include "oemcrypto_engine_ref.h" -#include "oemcrypto_old_usage_table_ref.h" // TODO(fredgc): Setting the device files base bath is currently broken as // wvcdm::Properties is no longer used by the reference code. //#include "properties.h" @@ -299,37 +298,6 @@ OEMCryptoResult UsageTableEntry::LoadData(CryptoEngine* ce, uint32_t index, return OEMCrypto_SUCCESS; } -OEMCryptoResult UsageTableEntry::CopyOldUsageEntry( - const std::vector& pst) { - OldUsageTableEntry* old_entry = usage_table_->FindOldUsageEntry(pst); - if (!old_entry) return OEMCrypto_ERROR_WRONG_PST; - data_.time_of_license_received = old_entry->time_of_license_received_; - data_.time_of_first_decrypt = old_entry->time_of_first_decrypt_; - data_.time_of_last_decrypt = old_entry->time_of_last_decrypt_; - data_.status = old_entry->status_; - if (old_entry->mac_key_server_.size() != wvoec::MAC_KEY_SIZE) { - LOGE("CopyOldEntry: Old entry has bad server mac key."); - } else { - memcpy(data_.mac_key_server, &(old_entry->mac_key_server_[0]), - wvoec::MAC_KEY_SIZE); - } - if (old_entry->mac_key_client_.size() != wvoec::MAC_KEY_SIZE) { - LOGE("CopyOldEntry: Old entry has bad client mac key."); - } else { - memcpy(data_.mac_key_client, &(old_entry->mac_key_client_[0]), - wvoec::MAC_KEY_SIZE); - } - if (pst.size() > kMaxPSTLength) { - LOGE("CopyOldEntry: PST Length was too large. Truncating."); - data_.pst_length = kMaxPSTLength; - } else { - data_.pst_length = pst.size(); - } - memcpy(data_.pst, pst.data(), data_.pst_length); - data_.pst[data_.pst_length] = '\0'; - return OEMCrypto_SUCCESS; -} - size_t UsageTableEntry::SignedEntrySize() { size_t base = sizeof(SignedEntryBlock); // round up to make even number of blocks: @@ -337,12 +305,7 @@ size_t UsageTableEntry::SignedEntrySize() { return blocks * wvoec::KEY_IV_SIZE; } -UsageTable::~UsageTable() { - if (old_table_) { - delete old_table_; - old_table_ = NULL; - } -} +UsageTable::~UsageTable() {} size_t UsageTable::SignedHeaderSize(size_t count) { size_t base = sizeof(SignedHeaderBlock) + count * sizeof(int64_t); @@ -722,7 +685,7 @@ OEMCryptoResult UsageTable::CreateUsageTableHeader( if (!LoadGenerationNumber(true)) return OEMCrypto_ERROR_UNKNOWN_FAILURE; // Make sure there are no entries that are currently tied to an open session. for (size_t i = 0; i < sessions_.size(); ++i) { - if (sessions_[i] != NULL) { + if (sessions_[i] != nullptr) { LOGE("CreateUsageTableHeader: index %d used by session.", i); return OEMCrypto_ERROR_INVALID_SESSION; } @@ -733,41 +696,4 @@ OEMCryptoResult UsageTable::CreateUsageTableHeader( return SaveUsageTableHeader(header_buffer, *header_buffer_length); } -OldUsageTableEntry* UsageTable::FindOldUsageEntry( - const std::vector& pst) { - if (!old_table_) old_table_ = new OldUsageTable(ce_); - return old_table_->FindEntry(pst); -} - -OEMCryptoResult UsageTable::DeleteOldUsageTable() { - if (old_table_) { - old_table_->Clear(); - delete old_table_; - old_table_ = NULL; - } - OldUsageTable::DeleteFile(ce_); - return OEMCrypto_SUCCESS; -} - -OEMCryptoResult UsageTable::CreateOldUsageEntry( - uint64_t time_since_license_received, uint64_t time_since_first_decrypt, - uint64_t time_since_last_decrypt, OEMCrypto_Usage_Entry_Status status, - uint8_t* server_mac_key, uint8_t* client_mac_key, const uint8_t* pst, - size_t pst_length) { - if (!old_table_) old_table_ = new OldUsageTable(ce_); - std::vector pstv(pst, pst + pst_length); - OldUsageTableEntry* old_entry = old_table_->CreateEntry(pstv); - - int64_t now = ce_->RollbackCorrectedOfflineTime(); - old_entry->time_of_license_received_ = now - time_since_license_received; - old_entry->time_of_first_decrypt_ = now - time_since_first_decrypt; - old_entry->time_of_last_decrypt_ = now - time_since_last_decrypt; - old_entry->status_ = status; - old_entry->mac_key_server_.assign(server_mac_key, - server_mac_key + wvoec::MAC_KEY_SIZE); - old_entry->mac_key_client_.assign(client_mac_key, - client_mac_key + wvoec::MAC_KEY_SIZE); - return OEMCrypto_SUCCESS; -} - } // namespace wvoec_ref diff --git a/oemcrypto/ref/src/oemcrypto_usage_table_ref.h b/oemcrypto/ref/src/oemcrypto_usage_table_ref.h index 3278852..31913f7 100644 --- a/oemcrypto/ref/src/oemcrypto_usage_table_ref.h +++ b/oemcrypto/ref/src/oemcrypto_usage_table_ref.h @@ -21,8 +21,6 @@ namespace wvoec_ref { class SessionContext; class CryptoEngine; class UsageTable; -class OldUsageTable; -class OldUsageTableEntry; const size_t kMaxPSTLength = 255; // This is the data we store offline. @@ -62,7 +60,6 @@ class UsageTableEntry { uint8_t* signed_buffer, size_t buffer_size); OEMCryptoResult LoadData(CryptoEngine* ce, uint32_t index, const std::vector& buffer); - virtual OEMCryptoResult CopyOldUsageEntry(const std::vector& pst); int64_t generation_number() { return data_.generation_number; } void set_generation_number(int64_t value) { data_.generation_number = value; } void set_index(int32_t index) { data_.index = index; } @@ -80,8 +77,7 @@ class UsageTableEntry { class UsageTable { public: - explicit UsageTable(CryptoEngine* ce) - : ce_(ce), header_loaded_(false), old_table_(NULL) {}; + explicit UsageTable(CryptoEngine* ce) : ce_(ce), header_loaded_(false){}; virtual ~UsageTable(); OEMCryptoResult CreateNewUsageEntry(SessionContext* session, @@ -106,15 +102,6 @@ class UsageTable { void ReleaseEntry(uint32_t index) { sessions_[index] = 0; } void IncrementGeneration(); static size_t SignedHeaderSize(size_t count); - OldUsageTableEntry* FindOldUsageEntry(const std::vector& pst); - OEMCryptoResult DeleteOldUsageTable(); - OEMCryptoResult CreateOldUsageEntry(uint64_t time_since_license_received, - uint64_t time_since_first_decrypt, - uint64_t time_since_last_decrypt, - OEMCrypto_Usage_Entry_Status status, - uint8_t* server_mac_key, - uint8_t* client_mac_key, - const uint8_t* pst, size_t pst_length); protected: virtual UsageTableEntry* MakeEntry(uint32_t index); @@ -128,7 +115,6 @@ class UsageTable { int64_t master_generation_number_; std::vector generation_numbers_; std::vector sessions_; - OldUsageTable* old_table_; friend class UsageTableEntry; }; diff --git a/oemcrypto/test/oec_device_features.cpp b/oemcrypto/test/oec_device_features.cpp index 2e18ca1..d1c5624 100644 --- a/oemcrypto/test/oec_device_features.cpp +++ b/oemcrypto/test/oec_device_features.cpp @@ -7,8 +7,13 @@ #include "oec_device_features.h" #include -#include -#include + +#ifdef _WIN32 +# include +#else +# include +# include +#endif #include @@ -18,6 +23,43 @@ namespace wvoec { DeviceFeatures global_features; +bool CanChangeTime() { +#ifdef _WIN32 + LUID desired_id; + if (!LookupPrivilegeValue(nullptr, SE_SYSTEMTIME_NAME, &desired_id)) + return false; + HANDLE token; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &token)) + return false; + std::unique_ptr safe_token(token, &CloseHandle); + + // This queries all the permissions given to the token to determine if we can + // change the system time. Note this is subtly different from PrivilegeCheck + // as that only checks "enabled" privileges; even with admin rights, the + // privilege is default disabled, even when granted. + + DWORD size = 0; + // Determine how big we need to allocate first. + GetTokenInformation(token, TokenPrivileges, nullptr, 0, &size); + // Since TOKEN_PRIVILEGES uses a variable-length array, we need to use malloc + std::unique_ptr privileges( + (TOKEN_PRIVILEGES*)malloc(size), &free); + if (privileges && GetTokenInformation(token, TokenPrivileges, + privileges.get(), size, &size)) { + for (int i = 0; i < privileges->PrivilegeCount; i++) { + if (privileges->Privileges[i].Luid.HighPart == desired_id.HighPart && + privileges->Privileges[i].Luid.LowPart == desired_id.LowPart) { + return true; + } + } + } + + return false; +#else + return getuid() == 0; +#endif +} + void DeviceFeatures::Initialize(bool is_cast_receiver, bool force_load_test_keybox) { cast_receiver = is_cast_receiver; @@ -141,6 +183,7 @@ void DeviceFeatures::Initialize(bool is_cast_receiver, std::string DeviceFeatures::RestrictFilter(const std::string& initial_filter) { std::string filter = initial_filter; + // clang-format off if (!uses_keybox) FilterOut(&filter, "*KeyboxTest*"); if (derive_key_method != FORCE_TEST_KEYBOX) FilterOut(&filter, "*ForceKeybox*"); @@ -160,10 +203,12 @@ std::string DeviceFeatures::RestrictFilter(const std::string& initial_filter) { if (api_version < 13) FilterOut(&filter, "*API13*"); if (api_version < 14) FilterOut(&filter, "*API14*"); if (api_version < 15) FilterOut(&filter, "*API15*"); + if (api_version < 16) FilterOut(&filter, "*API16*"); + // clang-format on // Some tests may require root access. If user is not root, filter these tests // out. - if (getuid()) { - FilterOut(&filter, "UsageTableTest.TimeRollbackPrevention"); + if (!CanChangeTime()) { + FilterOut(&filter, "OEMCryptoUsageTableTest.TimeRollbackPrevention"); } // Performance tests take a long time. Filter them out if they are not // specifically requested. @@ -197,7 +242,8 @@ void DeviceFeatures::PickDerivedKey() { } if (uses_keybox) { // If device uses a keybox, try to load the test keybox. - if (OEMCrypto_ERROR_NOT_IMPLEMENTED != OEMCrypto_LoadTestKeybox(NULL, 0)) { + if (OEMCrypto_ERROR_NOT_IMPLEMENTED != + OEMCrypto_LoadTestKeybox(nullptr, 0)) { derive_key_method = LOAD_TEST_KEYBOX; } } else if (OEMCrypto_ERROR_NOT_IMPLEMENTED != OEMCrypto_LoadTestRSAKey()) { diff --git a/oemcrypto/test/oec_key_deriver.cpp b/oemcrypto/test/oec_key_deriver.cpp new file mode 100644 index 0000000..e56ffc1 --- /dev/null +++ b/oemcrypto/test/oec_key_deriver.cpp @@ -0,0 +1,169 @@ +// Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. +// +// OEMCrypto unit tests +// + +#include "oec_session_util.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "OEMCryptoCENC.h" +#include "disallow_copy_and_assign.h" +#include "log.h" +#include "oec_device_features.h" +#include "oec_test_data.h" +#include "oemcrypto_types.h" +#include "platform.h" +#include "string_conversions.h" + +using namespace std; + +namespace wvoec { + +void Encryptor::set_enc_key(const std::vector& enc_key) { + enc_key_ = enc_key; +} + +void Encryptor::CBCEncrypt(const uint8_t* data, uint8_t* encrypted_data, + size_t data_length, + const uint8_t (&iv)[KEY_IV_SIZE]) const { + ASSERT_EQ(enc_key_.size(), KEY_SIZE); + ASSERT_NE(data, nullptr); + ASSERT_NE(encrypted_data, nullptr); + AES_KEY aes_key; + static const int key_size = KEY_SIZE * 8; // in bits. + AES_set_encrypt_key(enc_key_.data(), key_size, &aes_key); + uint8_t iv_buffer[KEY_IV_SIZE]; + memcpy(iv_buffer, iv, KEY_IV_SIZE); + AES_cbc_encrypt(data, encrypted_data, data_length, &aes_key, iv_buffer, + AES_ENCRYPT); +} + +void Encryptor::PadAndEncryptProvisioningMessage( + RSAPrivateKeyMessage* data, RSAPrivateKeyMessage* encrypted) const { + EXPECT_EQ(1, GetRandBytes(data->rsa_key_iv, KEY_IV_SIZE)); + ASSERT_EQ(enc_key_.size(), KEY_SIZE); + *encrypted = *data; + size_t padding = AES_BLOCK_SIZE - (data->rsa_key_length % AES_BLOCK_SIZE); + memset(data->rsa_key + data->rsa_key_length, static_cast(padding), + padding); + encrypted->rsa_key_length = data->rsa_key_length + padding; + AES_KEY aes_key; + static const int key_size = KEY_SIZE * 8; // in bits. + AES_set_encrypt_key(enc_key_.data(), key_size, &aes_key); + uint8_t iv_buffer[KEY_IV_SIZE]; + memcpy(iv_buffer, &data->rsa_key_iv[0], KEY_IV_SIZE); + AES_cbc_encrypt(&data->rsa_key[0], &encrypted->rsa_key[0], + encrypted->rsa_key_length, &aes_key, iv_buffer, AES_ENCRYPT); +} + +// This generates the data for deriving one key. If there are failures in +// this function, then there is something wrong with the test program and its +// dependency on BoringSSL. +void KeyDeriver::DeriveKey(const uint8_t* key, const vector& context, + int counter, vector* out) { + ASSERT_NE(key, nullptr); + ASSERT_FALSE(context.empty()); + ASSERT_GE(4, counter); + ASSERT_LE(1, counter); + ASSERT_NE(out, nullptr); + + const EVP_CIPHER* cipher = EVP_aes_128_cbc(); + CMAC_CTX* cmac_ctx = CMAC_CTX_new(); + ASSERT_NE(nullptr, cmac_ctx); + + ASSERT_TRUE(CMAC_Init(cmac_ctx, key, KEY_SIZE, cipher, 0)); + + std::vector message; + message.push_back(static_cast(counter)); + message.insert(message.end(), context.begin(), context.end()); + + ASSERT_TRUE(CMAC_Update(cmac_ctx, message.data(), message.size())); + + size_t reslen; + uint8_t res[128]; + ASSERT_TRUE(CMAC_Final(cmac_ctx, res, &reslen)); + + out->assign(res, res + reslen); + CMAC_CTX_free(cmac_ctx); +} + +// This generates the data for deriving a set of keys. If there are failures in +// this function, then there is something wrong with the test program and its +// dependency on BoringSSL. +void KeyDeriver::DeriveKeys(const uint8_t* master_key, + const vector& mac_key_context, + const vector& enc_key_context) { + // Generate derived key for mac key + std::vector mac_key_part2; + DeriveKey(master_key, mac_key_context, 1, &mac_key_server_); + DeriveKey(master_key, mac_key_context, 2, &mac_key_part2); + mac_key_server_.insert(mac_key_server_.end(), mac_key_part2.begin(), + mac_key_part2.end()); + + DeriveKey(master_key, mac_key_context, 3, &mac_key_client_); + DeriveKey(master_key, mac_key_context, 4, &mac_key_part2); + mac_key_client_.insert(mac_key_client_.end(), mac_key_part2.begin(), + mac_key_part2.end()); + + // Generate derived key for encryption key + std::vector enc_key; + DeriveKey(master_key, enc_key_context, 1, &enc_key); + set_enc_key(enc_key); +} + +void KeyDeriver::set_mac_keys(const uint8_t* mac_keys) { + ASSERT_EQ(mac_key_server_.size(), MAC_KEY_SIZE); + ASSERT_EQ(mac_key_client_.size(), MAC_KEY_SIZE); + memcpy(mac_key_server_.data(), mac_keys, MAC_KEY_SIZE); + memcpy(mac_key_client_.data(), mac_keys + MAC_KEY_SIZE, MAC_KEY_SIZE); +} + +void KeyDeriver::ServerSignBuffer(const uint8_t* data, size_t data_length, + std::vector* signature) { + ASSERT_LE(data_length, kMaxMessageSize); + ASSERT_EQ(mac_key_server_.size(), MAC_KEY_SIZE); + signature->assign(SHA256_DIGEST_LENGTH, 0); + unsigned int sig_len = SHA256_DIGEST_LENGTH; + ASSERT_TRUE(HMAC(EVP_sha256(), mac_key_server_.data(), mac_key_server_.size(), + data, data_length, signature->data(), &sig_len)); +} + +void KeyDeriver::ClientSignBuffer(const vector& buffer, + std::vector* signature) { + ASSERT_EQ(mac_key_client_.size(), MAC_KEY_SIZE); + signature->assign(SHA256_DIGEST_LENGTH, 0); + unsigned int sig_len = SHA256_DIGEST_LENGTH; + ASSERT_TRUE(HMAC(EVP_sha256(), mac_key_client_.data(), mac_key_client_.size(), + buffer.data(), buffer.size(), signature->data(), &sig_len)); +} + +void KeyDeriver::ClientSignPstReport(const vector& pst_report_buffer, + std::vector* signature) { + ASSERT_EQ(mac_key_client_.size(), MAC_KEY_SIZE); + signature->assign(SHA_DIGEST_LENGTH, 0); + unsigned int sig_len = SHA_DIGEST_LENGTH; + ASSERT_TRUE(HMAC(EVP_sha1(), mac_key_client_.data(), mac_key_client_.size(), + &pst_report_buffer[SHA_DIGEST_LENGTH], + pst_report_buffer.size() - SHA_DIGEST_LENGTH, + signature->data(), &sig_len)); +} + +} // namespace wvoec diff --git a/oemcrypto/test/oec_key_deriver.h b/oemcrypto/test/oec_key_deriver.h new file mode 100644 index 0000000..beb82ed --- /dev/null +++ b/oemcrypto/test/oec_key_deriver.h @@ -0,0 +1,90 @@ +// Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. +// +#ifndef CDM_OEC_KEY_DERIVER_H_ +#define CDM_OEC_KEY_DERIVER_H_ + +#include +#include +#include +#include +#include + +#include "oec_device_features.h" +#include "oemcrypto_types.h" +#include "pst_report.h" + +namespace wvoec { + +constexpr size_t kMaxTestRSAKeyLength = 2000; // Rough estimate. + +// This structure will be signed to simulate a provisioning response from the +// server. +struct RSAPrivateKeyMessage { + uint8_t rsa_key[kMaxTestRSAKeyLength]; + uint8_t rsa_key_iv[KEY_IV_SIZE]; + size_t rsa_key_length; + uint32_t nonce; +}; + +// Holds an encryption key and can encrypt a provisioning message. It also can +// encrypt short buffers using CBC, such as content keys in a license. +class Encryptor { + public: + Encryptor() : enc_key_(KEY_SIZE, 0) {} + Encryptor(const std::vector& enc_key) { set_enc_key(enc_key); }; + Encryptor& operator=(const Encryptor&) = default; + void set_enc_key(const std::vector& enc_key); + + // This encrypts an RSAPrivateKeyMessage with encryption_key so that it may be + // loaded with OEMCrypto_RewrapDeviceRSAKey. + // This modifies the clear data: it adds padding and generates a random iv. + void PadAndEncryptProvisioningMessage(RSAPrivateKeyMessage* data, + RSAPrivateKeyMessage* encrypted) const; + + void CBCEncrypt(const uint8_t* data, uint8_t* encrypted_data, + size_t data_length, const uint8_t (&iv)[KEY_IV_SIZE]) const; + + private: + std::vector enc_key_; +}; + +// Holds encryption and mac keys derived from a master key. +// Can be used to sign a buffer as either a server or client. +class KeyDeriver : public Encryptor { + public: + KeyDeriver() + : mac_key_server_(MAC_KEY_SIZE, 0), mac_key_client_(MAC_KEY_SIZE, 0) {} + KeyDeriver& operator=(const KeyDeriver&) = default; + + // Generate mac and enc keys give the master key. + void DeriveKeys(const uint8_t* master_key, + const std::vector& mac_key_context, + const std::vector& enc_key_context); + // Sign the buffer with server's mac key. + void ServerSignBuffer(const uint8_t* data, size_t data_length, + std::vector* signature); + // Sign the buffer with client's known mac key. Known test keys must be + // installed first. This uses HMAC with SHA256, so is suitable for a message. + void ClientSignBuffer(const std::vector& buffer, + std::vector* signature); + // Sign the pst buffer with client's known mac key. Known test keys must be + // installed first. This uses HMAC with SHA128, and skips the beginning of the + // buffer, so is only suitable for a pst report. + void ClientSignPstReport(const std::vector& pst_report_buffer, + std::vector* signature); + void set_mac_keys(const uint8_t* mac_keys); + + private: + // Internal utility function to derive key using CMAC-128 + void DeriveKey(const uint8_t* key, const std::vector& context, + int counter, std::vector* out); + + std::vector mac_key_server_; + std::vector mac_key_client_; +}; + +} // namespace wvoec + +#endif // CDM_OEC_KEY_DERIVER_H_ diff --git a/oemcrypto/test/oec_session_util.cpp b/oemcrypto/test/oec_session_util.cpp index 737f473..21510f9 100644 --- a/oemcrypto/test/oec_session_util.cpp +++ b/oemcrypto/test/oec_session_util.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include "OEMCryptoCENC.h" @@ -45,11 +44,6 @@ void PrintTo(const vector& value, ostream* os) { } // namespace std namespace { -int GetRandBytes(unsigned char* buf, int num) { - // returns 1 on success, -1 if not supported, or 0 if other failure. - return RAND_bytes(buf, num); -} - void DeleteX509Stack(STACK_OF(X509)* stack) { sk_X509_pop_free(stack, X509_free); } @@ -58,12 +52,17 @@ void DeleteX509Stack(STACK_OF(X509)* stack) { namespace wvoec { +int GetRandBytes(unsigned char* buf, int num) { + // returns 1 on success, -1 if not supported, or 0 if other failure. + return RAND_bytes(buf, num); +} + // Increment counter for AES-CTR. The CENC spec specifies we increment only // the low 64 bits of the IV counter, and leave the high 64 bits alone. This // is different from the BoringSSL implementation, so we implement the CTR loop // ourselves. void ctr128_inc64(int64_t increaseBy, uint8_t* iv) { - ASSERT_NE(static_cast(NULL), iv); + ASSERT_NE(nullptr, iv); uint64_t* counterBuffer = reinterpret_cast(&iv[8]); (*counterBuffer) = wvcdm::htonll64(wvcdm::ntohll64(*counterBuffer) + increaseBy); @@ -85,7 +84,7 @@ void dump_boringssl_error() { template class boringssl_ptr { public: - explicit boringssl_ptr(T* p = NULL) : ptr_(p) {} + explicit boringssl_ptr(T* p = nullptr) : ptr_(p) {} ~boringssl_ptr() { if (ptr_) func(ptr_); } @@ -123,9 +122,6 @@ Session::Session() : open_(false), forced_session_id_(false), session_id_(0), - mac_key_server_(MAC_KEY_SIZE), - mac_key_client_(MAC_KEY_SIZE), - enc_key_(KEY_SIZE), public_rsa_(0), message_size_(sizeof(MessageData)), // Most tests only use 4 keys. Other tests will explicitly call @@ -201,62 +197,10 @@ void Session::FillDefaultContext(vector* mac_context, "180120002a0c31383836373837343035000000000080"); } -// This generates the truth data for deriving one key. If there are failures in -// this function, then there is something wrong with the test program and its -// dependency on BoringSSL. -void Session::DeriveKey(const uint8_t* key, const vector& context, - int counter, vector* out) { - ASSERT_FALSE(context.empty()); - ASSERT_GE(4, counter); - ASSERT_NE(static_cast(NULL), out); - - const EVP_CIPHER* cipher = EVP_aes_128_cbc(); - CMAC_CTX* cmac_ctx = CMAC_CTX_new(); - ASSERT_NE(static_cast(NULL), cmac_ctx); - - ASSERT_EQ(1, CMAC_Init(cmac_ctx, key, KEY_SIZE, cipher, 0)); - - std::vector message; - message.push_back(counter); - message.insert(message.end(), context.begin(), context.end()); - - ASSERT_EQ(1, CMAC_Update(cmac_ctx, message.data(), message.size())); - - size_t reslen; - uint8_t res[128]; - ASSERT_EQ(1, CMAC_Final(cmac_ctx, res, &reslen)); - - out->assign(res, res + reslen); - CMAC_CTX_free(cmac_ctx); -} - -// This generates the truth data for deriving a set of keys. If there are -// failures in this function, then there is something wrong with the test -// program and its dependency on BoringSSL. -void Session::DeriveKeys(const uint8_t* master_key, - const vector& mac_key_context, - const vector& enc_key_context) { - // Generate derived key for mac key - std::vector mac_key_part2; - DeriveKey(master_key, mac_key_context, 1, &mac_key_server_); - DeriveKey(master_key, mac_key_context, 2, &mac_key_part2); - mac_key_server_.insert(mac_key_server_.end(), mac_key_part2.begin(), - mac_key_part2.end()); - - DeriveKey(master_key, mac_key_context, 3, &mac_key_client_); - DeriveKey(master_key, mac_key_context, 4, &mac_key_part2); - mac_key_client_.insert(mac_key_client_.end(), mac_key_part2.begin(), - mac_key_part2.end()); - - // Generate derived key for encryption key - DeriveKey(master_key, enc_key_context, 1, &enc_key_); -} - // This should only be called if the device uses Provisioning 2.0. A failure in // this function is probably caused by a bad keybox. void Session::GenerateDerivedKeysFromKeybox( const wvoec::WidevineKeybox& keybox) { - GenerateNonce(); vector mac_context; vector enc_context; FillDefaultContext(&mac_context, &enc_context); @@ -264,16 +208,14 @@ void Session::GenerateDerivedKeysFromKeybox( OEMCrypto_GenerateDerivedKeys( session_id(), mac_context.data(), mac_context.size(), enc_context.data(), enc_context.size())); - - DeriveKeys(keybox.device_key_, mac_context, enc_context); + key_deriver_.DeriveKeys(keybox.device_key_, mac_context, enc_context); } void Session::GenerateDerivedKeysFromSessionKey() { // Uses test certificate. - GenerateNonce(); vector session_key; vector enc_session_key; - if (public_rsa_ == NULL) PreparePublicKey(); + if (public_rsa_ == nullptr) PreparePublicKey(); // A failure here probably indicates that there is something wrong with the // test program and its dependency on BoringSSL. ASSERT_TRUE(GenerateRSASessionKey(&session_key, &enc_session_key)); @@ -287,7 +229,7 @@ void Session::GenerateDerivedKeysFromSessionKey() { mac_context.data(), mac_context.size(), enc_context.data(), enc_context.size())); - DeriveKeys(session_key.data(), mac_context, enc_context); + key_deriver_.DeriveKeys(session_key.data(), mac_context, enc_context); } void Session::LoadTestKeys(const std::string& provider_session_token, @@ -308,9 +250,7 @@ void Session::LoadTestKeys(const std::string& provider_session_token, signature_.size(), enc_mac_keys_iv, enc_mac_keys, num_keys_, key_array_, pst, GetSubstring(), OEMCrypto_ContentLicense)); // Update new generated keys. - memcpy(mac_key_server_.data(), license_.mac_keys, MAC_KEY_SIZE); - memcpy(mac_key_client_.data(), license_.mac_keys + MAC_KEY_SIZE, - MAC_KEY_SIZE); + key_deriver_.set_mac_keys(license_.mac_keys); } else { ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_LoadKeys( @@ -342,9 +282,7 @@ void Session::LoadEntitlementTestKeys(const std::string& provider_session_token, key_array_, pst, GetSubstring(), OEMCrypto_EntitlementLicense)); // Update new generated keys. - memcpy(mac_key_server_.data(), license_.mac_keys, MAC_KEY_SIZE); - memcpy(mac_key_client_.data(), license_.mac_keys + MAC_KEY_SIZE, - MAC_KEY_SIZE); + key_deriver_.set_mac_keys(license_.mac_keys); } else { ASSERT_EQ( expected_sts, @@ -432,8 +370,9 @@ void Session::LoadEntitledContentKeys(OEMCryptoResult expected_sts) { OEMCrypto_LoadEntitledContentKeys( session_id(), reinterpret_cast(encrypted_entitled_message_.data()), - encrypted_entitled_message_.size(), num_keys_, - encrypted_entitled_key_array.data())); + encrypted_entitled_message_.size(), + encrypted_entitled_key_array.data(), + encrypted_entitled_key_array.size())); if (expected_sts != OEMCrypto_SUCCESS) { return; } @@ -502,8 +441,9 @@ void Session::RefreshTestKeys(const size_t key_count, uint32_t control_bits, // message is not actually encrypted. It is, however, signed. // FillRefreshMessage fills the message with a duration of kLongDuration. FillRefreshMessage(key_count, control_bits, nonce); - ServerSignBuffer(reinterpret_cast(&padded_message_), - message_size_, &signature_); + key_deriver_.ServerSignBuffer( + reinterpret_cast(&padded_message_), message_size_, + &signature_); std::vector key_array(key_count); FillRefreshArray(key_array.data(), key_count); OEMCryptoResult sts = OEMCrypto_RefreshKeys( @@ -555,9 +495,9 @@ void Session::FillSimpleMessage(uint32_t duration, uint32_t control, if (global_features.api_version >= 12) { // For version 12 and above, we require OEMCrypto to handle kcNN for all // licenses. - std::stringstream stream; - stream << "kc" << global_features.api_version; - memcpy(license_.keys[i].control.verification, stream.str().c_str(), 4); + std::string kcVersion = + "kc" + std::to_string(global_features.api_version); + memcpy(license_.keys[i].control.verification, kcVersion.c_str(), 4); } else if (control & wvoec::kControlSecurityPatchLevelMask) { // For versions before 12, we require the special key control block only // when there are newer features present. @@ -599,9 +539,9 @@ void Session::FillSimpleEntitlementMessage( if (global_features.api_version >= 12) { // For version 12 and above, we require OEMCrypto to handle kcNN for all // licenses. - std::stringstream stream; - stream << "kc" << global_features.api_version; - memcpy(license_.keys[i].control.verification, stream.str().c_str(), 4); + std::string kcVersion = + "kc" + std::to_string(global_features.api_version); + memcpy(license_.keys[i].control.verification, kcVersion.c_str(), 4); } else if (control & wvoec::kControlSecurityPatchLevelMask) { // For versions before 12, we require the special key control block only // when there are newer features present. @@ -632,10 +572,10 @@ void Session::FillRefreshMessage(size_t key_count, uint32_t control_bits, if (global_features.api_version >= 12) { // For version 12 and above, we require OEMCrypto to handle kcNN for all // licenses. - std::stringstream stream; - stream << "kc" << global_features.api_version; + std::string kcVersion = + "kc" + std::to_string(global_features.api_version); memcpy(encrypted_license().keys[i].control.verification, - stream.str().c_str(), 4); + kcVersion.c_str(), 4); } else { // For versions before 12, we require the special key control block only // when there are newer features present. @@ -673,84 +613,115 @@ void Session::EncryptAndSign() { uint8_t iv_buffer[16]; memcpy(iv_buffer, &license_.mac_key_iv[0], KEY_IV_SIZE); - AES_KEY aes_key; - AES_set_encrypt_key(enc_key_.data(), 128, &aes_key); - AES_cbc_encrypt(&license_.mac_keys[0], &encrypted_license().mac_keys[0], - 2 * MAC_KEY_SIZE, &aes_key, iv_buffer, AES_ENCRYPT); + key_deriver_.CBCEncrypt(&license_.mac_keys[0], + &encrypted_license().mac_keys[0], 2 * MAC_KEY_SIZE, + license_.mac_key_iv); for (unsigned int i = 0; i < num_keys_; i++) { memcpy(iv_buffer, &license_.keys[i].control_iv[0], KEY_IV_SIZE); + AES_KEY aes_key; AES_set_encrypt_key(&license_.keys[i].key_data[0], 128, &aes_key); AES_cbc_encrypt( reinterpret_cast(&license_.keys[i].control), reinterpret_cast(&encrypted_license().keys[i].control), KEY_SIZE, &aes_key, iv_buffer, AES_ENCRYPT); - - memcpy(iv_buffer, &license_.keys[i].key_iv[0], KEY_IV_SIZE); - AES_set_encrypt_key(enc_key_.data(), 128, &aes_key); - AES_cbc_encrypt( + key_deriver_.CBCEncrypt( &license_.keys[i].key_data[0], &encrypted_license().keys[i].key_data[0], - license_.keys[i].key_data_length, &aes_key, iv_buffer, AES_ENCRYPT); + license_.keys[i].key_data_length, license_.keys[i].key_iv); } memcpy(encrypted_license().pst, license_.pst, sizeof(license_.pst)); - ServerSignBuffer(reinterpret_cast(&padded_message_), - message_size_, &signature_); + key_deriver_.ServerSignBuffer( + reinterpret_cast(&padded_message_), message_size_, + &signature_); FillKeyArray(encrypted_license(), key_array_); SetLoadKeysSubstringParams(); } -void Session::EncryptProvisioningMessage( - RSAPrivateKeyMessage* data, RSAPrivateKeyMessage* encrypted, - const vector& encryption_key) { - ASSERT_EQ(encryption_key.size(), KEY_SIZE); - *encrypted = *data; - size_t padding = KEY_SIZE - (data->rsa_key_length % KEY_SIZE); - memset(data->rsa_key + data->rsa_key_length, static_cast(padding), - padding); - encrypted->rsa_key_length = data->rsa_key_length + padding; - uint8_t iv_buffer[16]; - memcpy(iv_buffer, &data->rsa_key_iv[0], KEY_IV_SIZE); - AES_KEY aes_key; - AES_set_encrypt_key(&encryption_key[0], 128, &aes_key); - AES_cbc_encrypt(&data->rsa_key[0], &encrypted->rsa_key[0], - encrypted->rsa_key_length, &aes_key, iv_buffer, AES_ENCRYPT); -} - -void Session::ServerSignBuffer(const uint8_t* data, size_t data_length, - std::vector* signature) { - ASSERT_LE(data_length, kMaxMessageSize); - signature->assign(SHA256_DIGEST_LENGTH, 0); - unsigned int md_len = SHA256_DIGEST_LENGTH; - HMAC(EVP_sha256(), mac_key_server_.data(), mac_key_server_.size(), data, - data_length, &(signature->front()), &md_len); -} - -void Session::ClientSignMessage(const vector& data, - std::vector* signature) { - signature->assign(SHA256_DIGEST_LENGTH, 0); - unsigned int md_len = SHA256_DIGEST_LENGTH; - HMAC(EVP_sha256(), mac_key_client_.data(), mac_key_client_.size(), - &(data.front()), data.size(), &(signature->front()), &md_len); -} - -void Session::VerifyClientSignature(size_t data_length) { +void Session::VerifyLicenseRequestSignature(size_t data_length) { // In the real world, a message should be signed by the client and // verified by the server. This simulates that. vector data(data_length); - for (size_t i = 0; i < data.size(); i++) data[i] = i % 0xFF; + for (size_t i = 0; i < data.size(); i++) data[i] = i & 0xFF; OEMCryptoResult sts; size_t gen_signature_length = 0; - sts = OEMCrypto_GenerateSignature(session_id(), data.data(), data.size(), - NULL, &gen_signature_length); + + // TODO(b/135288420): Test core message functionality. + // This function should be split into three versions, one for each core + // message. + size_t core_message_length = 0; + sts = OEMCrypto_SignLicenseRequest(session_id(), data.data(), data.size(), + nullptr, &core_message_length, nullptr, + &gen_signature_length); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); - ASSERT_EQ(static_cast(32), gen_signature_length); + const size_t hmac_signature_size = 32u; + ASSERT_EQ(hmac_signature_size, gen_signature_length); vector gen_signature(gen_signature_length); - sts = OEMCrypto_GenerateSignature(session_id(), data.data(), data.size(), - gen_signature.data(), - &gen_signature_length); + sts = OEMCrypto_SignLicenseRequest( + session_id(), data.data(), data.size(), nullptr, &core_message_length, + gen_signature.data(), &gen_signature_length); ASSERT_EQ(OEMCrypto_SUCCESS, sts); std::vector expected_signature; - ClientSignMessage(data, &expected_signature); + key_deriver_.ClientSignBuffer(data, &expected_signature); + ASSERT_EQ(expected_signature, gen_signature); +} + +// TODO(b/135288022): This function only handles the keybox case. +// It should do something different for Prov 3.0. +void Session::VerifyProvisioningRequestSignature(size_t data_length) { + // In the real world, a message should be signed by the client and + // verified by the server. This simulates that. + vector data(data_length); + for (size_t i = 0; i < data.size(); i++) data[i] = i & 0xFF; + OEMCryptoResult sts; + size_t gen_signature_length = 0; + + // TODO(b/135288420): Test core message functionality. + // This function should be split into three versions, one for each core + // message. + size_t core_message_length = 0; + sts = OEMCrypto_SignProvisioningRequest( + session_id(), data.data(), data.size(), nullptr, &core_message_length, + nullptr, &gen_signature_length); + ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); + const size_t hmac_signature_size = 32u; + ASSERT_EQ(hmac_signature_size, gen_signature_length); + vector gen_signature(gen_signature_length); + // TODO(b/135288022): This function should pick the right type of signature, + // and then call SignProvisioningRequest. + sts = OEMCrypto_SignLicenseRequest( + session_id(), data.data(), data.size(), nullptr, &core_message_length, + gen_signature.data(), &gen_signature_length); + ASSERT_EQ(OEMCrypto_SUCCESS, sts); + std::vector expected_signature; + key_deriver_.ClientSignBuffer(data, &expected_signature); + ASSERT_EQ(expected_signature, gen_signature); +} + +void Session::VerifyRenewalRequestSignature(size_t data_length) { + // In the real world, a message should be signed by the client and + // verified by the server. This simulates that. + vector data(data_length); + for (size_t i = 0; i < data.size(); i++) data[i] = i & 0xFF; + OEMCryptoResult sts; + size_t gen_signature_length = 0; + + // TODO(b/135288420): Test core message functionality. + // This function should be split into three versions, one for each core + // message. + size_t core_message_length = 0; + sts = OEMCrypto_SignRenewalRequest(session_id(), data.data(), data.size(), + nullptr, &core_message_length, nullptr, + &gen_signature_length); + ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); + const size_t hmac_signature_size = 32u; + ASSERT_EQ(hmac_signature_size, gen_signature_length); + vector gen_signature(gen_signature_length); + sts = OEMCrypto_SignRenewalRequest( + session_id(), data.data(), data.size(), nullptr, &core_message_length, + gen_signature.data(), &gen_signature_length); + ASSERT_EQ(OEMCrypto_SUCCESS, sts); + std::vector expected_signature; + key_deriver_.ClientSignBuffer(data, &expected_signature); ASSERT_EQ(expected_signature, gen_signature); } @@ -801,9 +772,9 @@ void Session::FillRefreshArray(OEMCrypto_KeyRefreshObject* key_array, void Session::EncryptCTR(const vector& in_buffer, const uint8_t* key, const uint8_t* starting_iv, vector* out_buffer) { - ASSERT_NE(static_cast(NULL), key); - ASSERT_NE(static_cast(NULL), starting_iv); - ASSERT_NE(static_cast(NULL), out_buffer); + ASSERT_NE(nullptr, key); + ASSERT_NE(nullptr, starting_iv); + ASSERT_NE(nullptr, out_buffer); AES_KEY aes_key; AES_set_encrypt_key(key, AES_BLOCK_SIZE * 8, &aes_key); out_buffer->resize(in_buffer.size()); @@ -830,7 +801,9 @@ void Session::TestDecryptCTR(bool select_key_first, sts = OEMCrypto_SelectKey(session_id(), license_.keys[key_index].key_id, license_.keys[key_index].key_id_length, OEMCrypto_CipherMode_CTR); - ASSERT_EQ(OEMCrypto_SUCCESS, sts); + if (expected_result == OEMCrypto_SUCCESS) { + ASSERT_EQ(OEMCrypto_SUCCESS, sts); + } } vector unencryptedData(256); @@ -908,13 +881,12 @@ void Session::LoadOEMCert(bool verify_cert) { vector public_cert; size_t public_cert_length = 0; ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, - OEMCrypto_GetOEMPublicCertificate(session_id(), NULL, - &public_cert_length)); + OEMCrypto_GetOEMPublicCertificate(nullptr, &public_cert_length)); ASSERT_LT(0u, public_cert_length); public_cert.resize(public_cert_length); - ASSERT_EQ(OEMCrypto_SUCCESS, - OEMCrypto_GetOEMPublicCertificate(session_id(), public_cert.data(), - &public_cert_length)); + ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_GetOEMPublicCertificate( + public_cert.data(), &public_cert_length)); + ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_LoadOEMPrivateKey(session_id())); // Load the certificate chain into a BoringSSL X509 Stack const boringssl_ptr x509_stack( @@ -940,7 +912,7 @@ void Session::LoadOEMCert(bool verify_cert) { if (!public_rsa_) { cout << "d2i_RSAPrivateKey failed.\n"; dump_boringssl_error(); - ASSERT_TRUE(NULL != public_rsa_); + ASSERT_TRUE(nullptr != public_rsa_); } } if (verify_cert) { @@ -955,7 +927,7 @@ void Session::LoadOEMCert(bool verify_cert) { X509_STORE_CTX_new()); ASSERT_TRUE(store_ctx.NotNull()); - X509_STORE_CTX_init(store_ctx.get(), store.get(), x509_cert, NULL); + X509_STORE_CTX_init(store_ctx.get(), store.get(), x509_cert, nullptr); // TODO(fredgc): Verify cert is signed by Google. @@ -977,8 +949,8 @@ void Session::MakeRSACertificate(struct RSAPrivateKeyMessage* encrypted, std::vector* signature, uint32_t allowed_schemes, const vector& rsa_key, - const vector* encryption_key) { - if (encryption_key == NULL) encryption_key = &enc_key_; + const Encryptor* encryptor) { + if (encryptor == nullptr) encryptor = &key_deriver_; struct RSAPrivateKeyMessage message; if (allowed_schemes != kSign_RSASSA_PSS) { uint32_t algorithm_n = htonl(allowed_schemes); @@ -990,12 +962,11 @@ void Session::MakeRSACertificate(struct RSAPrivateKeyMessage* encrypted, memcpy(message.rsa_key, rsa_key.data(), rsa_key.size()); message.rsa_key_length = rsa_key.size(); } - EXPECT_EQ(1, GetRandBytes(message.rsa_key_iv, KEY_IV_SIZE)); + GenerateNonce(); message.nonce = nonce_; - - EncryptProvisioningMessage(&message, encrypted, *encryption_key); - ServerSignBuffer(reinterpret_cast(encrypted), message_size, - signature); + encryptor->PadAndEncryptProvisioningMessage(&message, encrypted); + key_deriver_.ServerSignBuffer(reinterpret_cast(encrypted), + message_size, signature); } void Session::RewrapRSAKey(const struct RSAPrivateKeyMessage& encrypted, @@ -1008,7 +979,7 @@ void Session::RewrapRSAKey(const struct RSAPrivateKeyMessage& encrypted, OEMCrypto_RewrapDeviceRSAKey( session_id(), message_ptr, message_size, signature.data(), signature.size(), &encrypted.nonce, encrypted.rsa_key, - encrypted.rsa_key_length, encrypted.rsa_key_iv, NULL, + encrypted.rsa_key_length, encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key->clear(); wrapped_key->assign(wrapped_key_length, 0); @@ -1033,7 +1004,7 @@ void Session::RewrapRSAKey30(const struct RSAPrivateKeyMessage& encrypted, OEMCrypto_RewrapDeviceRSAKey30( session_id(), &nonce_, encrypted_message_key.data(), encrypted_message_key.size(), encrypted.rsa_key, - encrypted.rsa_key_length, encrypted.rsa_key_iv, NULL, + encrypted.rsa_key_length, encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key->clear(); wrapped_key->assign(wrapped_key_length, 0); @@ -1050,7 +1021,7 @@ void Session::RewrapRSAKey30(const struct RSAPrivateKeyMessage& encrypted, } void Session::PreparePublicKey(const uint8_t* rsa_key, size_t rsa_key_length) { - if (rsa_key == NULL) { + if (rsa_key == nullptr) { rsa_key = kTestRSAPKCS8PrivateKeyInfo2_2048; rsa_key_length = sizeof(kTestRSAPKCS8PrivateKeyInfo2_2048); } @@ -1058,7 +1029,7 @@ void Session::PreparePublicKey(const uint8_t* rsa_key, size_t rsa_key_length) { boringssl_ptr bio(BIO_new_mem_buf(p, rsa_key_length)); ASSERT_TRUE(bio.NotNull()); boringssl_ptr pkcs8_pki( - d2i_PKCS8_PRIV_KEY_INFO_bio(bio.get(), NULL)); + d2i_PKCS8_PRIV_KEY_INFO_bio(bio.get(), nullptr)); ASSERT_TRUE(pkcs8_pki.NotNull()); boringssl_ptr evp(EVP_PKCS82PKEY(pkcs8_pki.get())); ASSERT_TRUE(evp.NotNull()); @@ -1088,10 +1059,10 @@ bool Session::VerifyPSSSignature(EVP_PKEY* pkey, const uint8_t* message, EVP_MD_CTX md_ctx_struct; EVP_MD_CTX* md_ctx = &md_ctx_struct; EVP_MD_CTX_init(md_ctx); - EVP_PKEY_CTX* pkey_ctx = NULL; + EVP_PKEY_CTX* pkey_ctx = nullptr; - if (EVP_DigestVerifyInit(md_ctx, &pkey_ctx, EVP_sha1(), NULL /* no ENGINE */, - pkey) != 1) { + if (EVP_DigestVerifyInit(md_ctx, &pkey_ctx, EVP_sha1(), + nullptr /* no ENGINE */, pkey) != 1) { LOGE("EVP_DigestVerifyInit failed in VerifyPSSSignature"); goto err; } @@ -1138,7 +1109,7 @@ void Session::VerifyRSASignature(const vector& message, const uint8_t* signature, size_t signature_length, RSA_Padding_Scheme padding_scheme) { - EXPECT_TRUE(NULL != public_rsa_) + EXPECT_TRUE(nullptr != public_rsa_) << "No public RSA key loaded in test code.\n"; EXPECT_EQ(static_cast(RSA_size(public_rsa_)), signature_length) @@ -1211,8 +1182,8 @@ void Session::UpdateUsageEntry(std::vector* header_buffer) { size_t entry_buffer_length = 0; ASSERT_EQ( OEMCrypto_ERROR_SHORT_BUFFER, - OEMCrypto_UpdateUsageEntry(session_id(), NULL, &header_buffer_length, - NULL, &entry_buffer_length)); + OEMCrypto_UpdateUsageEntry(session_id(), nullptr, &header_buffer_length, + nullptr, &entry_buffer_length)); ASSERT_LT(0u, header_buffer_length); header_buffer->resize(header_buffer_length); ASSERT_LT(0u, entry_buffer_length); @@ -1258,8 +1229,7 @@ void Session::GenerateReport(const std::string& pst, Session* other) { ASSERT_TRUE(open_); if (other) { // If other is specified, copy mac keys. - mac_key_server_ = other->mac_key_server_; - mac_key_client_ = other->mac_key_client_; + key_deriver_ = other->key_deriver_; } size_t length = 0; OEMCryptoResult sts = OEMCrypto_ReportUsage( @@ -1280,10 +1250,7 @@ void Session::GenerateReport(const std::string& pst, } EXPECT_EQ(wvcdm::Unpacked_PST_Report::report_size(pst.length()), length); vector computed_signature(SHA_DIGEST_LENGTH); - unsigned int sig_len = SHA_DIGEST_LENGTH; - HMAC(EVP_sha1(), mac_key_client_.data(), mac_key_client_.size(), - &pst_report_buffer_[SHA_DIGEST_LENGTH], length - SHA_DIGEST_LENGTH, - computed_signature.data(), &sig_len); + key_deriver_.ClientSignPstReport(pst_report_buffer_, &computed_signature); EXPECT_EQ(0, memcmp(computed_signature.data(), pst_report().signature(), SHA_DIGEST_LENGTH)); EXPECT_GE(kInactiveUnused, pst_report().status()); @@ -1292,7 +1259,7 @@ void Session::GenerateReport(const std::string& pst, EXPECT_EQ(0, memcmp(pst.c_str(), pst_report().pst(), pst.length())); // Also, we the session to be able to sign the release message with the // correct mac keys from the usage table entry. - ASSERT_NO_FATAL_FAILURE(VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(VerifyRenewalRequestSignature()); } void Session::VerifyPST(const Test_PST_Report& expected) { @@ -1301,7 +1268,7 @@ void Session::VerifyPST(const Test_PST_Report& expected) { char* pst_ptr = reinterpret_cast(computed.pst()); std::string computed_pst(pst_ptr, pst_ptr + computed.pst_length()); ASSERT_EQ(expected.pst, computed_pst); - time_t now = time(NULL); + time_t now = time(nullptr); int64_t age = now - expected.time_created; // How old is this report. EXPECT_NEAR(expected.seconds_since_license_received + age, computed.seconds_since_license_received(), @@ -1316,14 +1283,7 @@ void Session::VerifyPST(const Test_PST_Report& expected) { kUsageTableTimeTolerance); } std::vector signature(SHA_DIGEST_LENGTH); - unsigned int md_len = SHA_DIGEST_LENGTH; - if (!HMAC(EVP_sha1(), mac_key_client_.data(), mac_key_client_.size(), - pst_report_buffer_.data() + SHA_DIGEST_LENGTH, - pst_report_buffer_.size() - SHA_DIGEST_LENGTH, - signature.data(), &md_len)) { - cout << "Error computing HMAC.\n"; - dump_boringssl_error(); - } + key_deriver_.ClientSignPstReport(pst_report_buffer_, &signature); EXPECT_EQ(0, memcmp(computed.signature(), signature.data(), SHA_DIGEST_LENGTH)); } @@ -1341,7 +1301,7 @@ void Session::VerifyReport(Test_PST_Report expected, int64_t time_license_received, int64_t time_first_decrypt, int64_t time_last_decrypt) { - time_t now = time(NULL); + time_t now = time(nullptr); expected.seconds_since_license_received = MaybeAdjustTime(time_license_received, now); expected.seconds_since_first_decrypt = @@ -1361,35 +1321,7 @@ void Session::GenerateVerifyReport(const std::string& pst, time_first_decrypt, time_last_decrypt)); // The PST report was signed above. Below we verify that the entire message // that is sent to the server will be signed by the right mac keys. - ASSERT_NO_FATAL_FAILURE(VerifyClientSignature()); -} - -void Session::CreateOldEntry(const Test_PST_Report& report) { - OEMCryptoResult result = OEMCrypto_CreateOldUsageEntry( - report.seconds_since_license_received, - report.seconds_since_first_decrypt, - report.seconds_since_last_decrypt, - report.status, mac_key_server_.data(), - mac_key_client_.data(), - reinterpret_cast(report.pst.c_str()), - report.pst.length()); - if (result == OEMCrypto_ERROR_NOT_IMPLEMENTED) return; - ASSERT_EQ(OEMCrypto_SUCCESS, result); -} - -void Session::CopyAndVerifyOldEntry(const Test_PST_Report& report, - std::vector* header_buffer) { - ASSERT_NO_FATAL_FAILURE(CreateNewUsageEntry()); - OEMCryptoResult result = OEMCrypto_CopyOldUsageEntry( - session_id(), reinterpret_cast(report.pst.c_str()), - report.pst.length()); - if (result == OEMCrypto_ERROR_NOT_IMPLEMENTED) { - cout << "WARNING: OEMCrypto CANNOT copy old usage table to new." << endl; - return; - } - ASSERT_NO_FATAL_FAILURE(UpdateUsageEntry(header_buffer)); - ASSERT_NO_FATAL_FAILURE(GenerateReport(report.pst)); - ASSERT_NO_FATAL_FAILURE(VerifyPST(report)); + ASSERT_NO_FATAL_FAILURE(VerifyRenewalRequestSignature()); } const uint8_t* Session::message_ptr() { diff --git a/oemcrypto/test/oec_session_util.h b/oemcrypto/test/oec_session_util.h index f162760..555e0e6 100644 --- a/oemcrypto/test/oec_session_util.h +++ b/oemcrypto/test/oec_session_util.h @@ -13,6 +13,7 @@ #include #include "oec_device_features.h" +#include "oec_key_deriver.h" #include "oemcrypto_types.h" #include "pst_report.h" @@ -60,7 +61,6 @@ const size_t kTestKeyIdMaxLength = 16; // Most content will use a key id that is 16 bytes long. const int kDefaultKeyIdLength = 16; -const size_t kMaxTestRSAKeyLength = 2000; // Rough estimate. const size_t kMaxPSTLength = 255; // In specification. const size_t kMaxMessageSize = 8 * 1024; // In specification. @@ -86,19 +86,10 @@ struct MessageData { uint8_t pst[kMaxPSTLength]; }; -// This structure will be signed to simulate a provisioning response from the -// server. -struct RSAPrivateKeyMessage { - uint8_t rsa_key[kMaxTestRSAKeyLength]; - uint8_t rsa_key_iv[KEY_IV_SIZE]; - size_t rsa_key_length; - uint32_t nonce; -}; - struct Test_PST_Report { Test_PST_Report(const std::string& pst_in, OEMCrypto_Usage_Entry_Status status_in) - : status(status_in), pst(pst_in), time_created(time(NULL)) {} + : status(status_in), pst(pst_in), time_created(time(nullptr)) {} OEMCrypto_Usage_Entry_Status status; int64_t seconds_since_license_received; @@ -115,6 +106,9 @@ struct EntitledContentKeyData { uint8_t content_key_data[KEY_SIZE]; }; +// returns 1 on success, -1 if not supported, or 0 if other failure. +int GetRandBytes(unsigned char* buf, int num); + // Increment counter for AES-CTR. The CENC spec specifies we increment only // the low 64 bits of the IV counter, and leave the high 64 bits alone. This // is different from the OpenSSL implementation, so we implement the CTR loop @@ -141,9 +135,9 @@ class Session { // Returns the most recently generated nonce. // Valid after call to GenerateNonce. - uint32_t get_nonce() { return nonce_; } + uint32_t nonce() const { return nonce_; } // Valid after call to open(). - uint32_t session_id() { return (uint32_t)session_id_; } + uint32_t session_id() const { return (uint32_t)session_id_; } // Call OEMCrypto_OpenSession, with GTest ASSERTs. void open(); // Call OEMCrypto_CloseSession, with GTest ASSERTs. @@ -155,7 +149,7 @@ class Session { // Generates one nonce. If error_counter is null, this will sleep 1 second // and try again if a nonce flood has been detected. If error_counter is // not null, it will be incremented when a nonce flood is detected. - void GenerateNonce(int* error_counter = NULL); + void GenerateNonce(int* error_counter = nullptr); // Fill the vectors with test context which generate known mac and enc keys. void FillDefaultContext(vector* mac_context, vector* enc_context); @@ -217,28 +211,22 @@ class Session { // Sets the OEMCrypto_Substring parameters of the LoadKeys method. // Specifically, it sets the |enc_mac_keys_iv|, |enc_mac_keys|, |pst|, and // |srm_restriction_data| in that order. For testing purposes, - // |srm_restriction_data| will always be NULL. + // |srm_restriction_data| will always be nullptr. void SetLoadKeysSubstringParams(); // This copies data from license_ to encrypted_license_, and then encrypts // each field in the key array appropriately. It then signes the buffer with // the server mac keys. It then fills out the key_array_ so that pointers in // that array point to the locations in the encrypted message. void EncryptAndSign(); - // This encrypts an RSAPrivateKeyMessage with encryption_key so that it may be - // loaded with OEMCrypto_RewrapDeviceRSAKey. - void EncryptProvisioningMessage(RSAPrivateKeyMessage* data, - RSAPrivateKeyMessage* encrypted, - const vector& encryption_key); - // Sign the buffer with server's mac key. - void ServerSignBuffer(const uint8_t* data, size_t data_length, - std::vector* signature); - // Sign the buffer with client's known mac key. Known test keys must be - // installed first. - void ClientSignMessage(const vector& data, - std::vector* signature); - // This checks the signature generated by OEMCrypto_GenerateSignature against - // that generaged by ClientSignMessage. - void VerifyClientSignature(size_t data_length = 400); + // This checks the signature generated by OEMCrypto_SignProvisioningRequest + // against that generaged by ClientSignBuffer. + void VerifyProvisioningRequestSignature(size_t data_length = 400); + // This checks the signature generated by OEMCrypto_SignLicenseRequest against + // that generaged by ClientSignBuffer. + void VerifyLicenseRequestSignature(size_t data_length = 400); + // This checks the signature generated by OEMCrypto_SignRenewalRequest against + // that generaged by ClientSignBuffer. + void VerifyRenewalRequestSignature(size_t data_length = 400); // Set the pointers in key_array[*] to point values inside data. This is // needed to satisfy range checks in OEMCrypto_LoadKeys. void FillKeyArray(const MessageData& data, OEMCrypto_KeyObject* key_array); @@ -260,8 +248,8 @@ class Session { // Verify that an attempt to select an expired key either succeeds, or gives // an actionable error code. void TestSelectExpired(unsigned int key_index); - // Calls OEMCrypto_GetOEMPublicCertificate and loads the OEM cert's public - // rsa key into public_rsa_. + // Calls OEMCrypto_GetOEMPublicCertificate and OEMCrypto_LoadOEMPrivateKey and + // loads the OEM cert's public rsa key into public_rsa_. void LoadOEMCert(bool verify_cert = false); // Creates RSAPrivateKeyMessage for the specified rsa_key, encrypts it with // the specified encryption key, and then signs it with the server's mac key. @@ -270,7 +258,7 @@ class Session { size_t message_size, std::vector* signature, uint32_t allowed_schemes, const vector& rsa_key, - const vector* encryption_key = NULL); + const Encryptor* encryptor = nullptr); // Calls OEMCrypto_RewrapDeviceRSAKey with the given provisioning response // message. If force is true, we assert that the key loads successfully. void RewrapRSAKey(const struct RSAPrivateKeyMessage& encrypted, @@ -278,7 +266,7 @@ class Session { vector* wrapped_key, bool force); // Loads the specified RSA public key into public_rsa_. If rsa_key is null, // the default test key is loaded. - void PreparePublicKey(const uint8_t* rsa_key = NULL, + void PreparePublicKey(const uint8_t* rsa_key = nullptr, size_t rsa_key_length = 0); // Verifies the given signature is from the given message and RSA key, pkey. static bool VerifyPSSSignature(EVP_PKEY* pkey, const uint8_t* message, @@ -306,7 +294,7 @@ class Session { // Creates a new usage entry, and keeps track of the index. // If status is null, we expect success, otherwise status is set to the // return value. - void CreateNewUsageEntry(OEMCryptoResult *status = NULL); + void CreateNewUsageEntry(OEMCryptoResult* status = nullptr); // Copy encrypted usage entry from other session, and then load it. // This session must already be open. void LoadUsageEntry(uint32_t index, const vector& buffer); @@ -414,20 +402,10 @@ class Session { const uint8_t* encrypted_entitled_message_ptr(); private: - // Generate mac and enc keys give the master key. - void DeriveKeys(const uint8_t* master_key, - const vector& mac_key_context, - const vector& enc_key_context); - // Internal utility function to derive key using CMAC-128 - void DeriveKey(const uint8_t* key, const vector& context, - int counter, vector* out); - bool open_; bool forced_session_id_; OEMCrypto_SESSION session_id_; - vector mac_key_server_; - vector mac_key_client_; - vector enc_key_; + KeyDeriver key_deriver_; uint32_t nonce_; RSA* public_rsa_; vector pst_report_buffer_; diff --git a/oemcrypto/test/oec_test_data.h b/oemcrypto/test/oec_test_data.h index 9739144..144c4d3 100644 --- a/oemcrypto/test/oec_test_data.h +++ b/oemcrypto/test/oec_test_data.h @@ -15,41 +15,6 @@ namespace wvoec { -// TODO(fredgc, b/119316243): REMOVE THIS KEYBOX! -// This test keybox is used for testing with OEMCrypto v13. -// It should be removed before release! -static const WidevineKeybox kTestKeyboxForV13 = { - // Sample keybox used for test vectors - { - // deviceID - 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x30, // TestKey01 - 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ - }, { - // key - 0xfb, 0xda, 0x04, 0x89, 0xa1, 0x58, 0x16, 0x0e, - 0xa4, 0x02, 0xe9, 0x29, 0xe3, 0xb6, 0x8f, 0x04, - }, { - // data - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x19, - 0x07, 0xd9, 0xff, 0xde, 0x13, 0xaa, 0x95, 0xc1, - 0x22, 0x67, 0x80, 0x53, 0x36, 0x21, 0x36, 0xbd, - 0xf8, 0x40, 0x8f, 0x82, 0x76, 0xe4, 0xc2, 0xd8, - 0x7e, 0xc5, 0x2b, 0x61, 0xaa, 0x1b, 0x9f, 0x64, - 0x6e, 0x58, 0x73, 0x49, 0x30, 0xac, 0xeb, 0xe8, - 0x99, 0xb3, 0xe4, 0x64, 0x18, 0x9a, 0x14, 0xa8, - 0x72, 0x02, 0xfb, 0x02, 0x57, 0x4e, 0x70, 0x64, - 0x0b, 0xd2, 0x2e, 0xf4, 0x4b, 0x2d, 0x7e, 0x39, - }, { - // magic - 0x6b, 0x62, 0x6f, 0x78, - }, { - // Crc - 0x0a, 0x7a, 0x2c, 0x35, - } -}; - // This is a test keybox. It will not be accepted by production systems. By // using a known keybox for these tests, the results for a given set of inputs // to a test are predictable and can be compared to the actual results. diff --git a/oemcrypto/test/oemcrypto_session_tests_helper.cpp b/oemcrypto/test/oemcrypto_session_tests_helper.cpp index c9643b8..7ec0704 100644 --- a/oemcrypto/test/oemcrypto_session_tests_helper.cpp +++ b/oemcrypto/test/oemcrypto_session_tests_helper.cpp @@ -15,7 +15,7 @@ const uint8_t* find(const vector& message, vector::const_iterator pos = search( message.begin(), message.end(), substring.begin(), substring.end()); if (pos == message.end()) { - return NULL; + return nullptr; } return &(*pos); } @@ -29,7 +29,7 @@ void SessionUtil::CreateWrappedRSAKeyFromKeybox(uint32_t allowed_schemes, ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); // Provisioning request would be signed by the client and verified by the // server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct RSAPrivateKeyMessage encrypted; std::vector signature; ASSERT_NO_FATAL_FAILURE( @@ -40,7 +40,7 @@ void SessionUtil::CreateWrappedRSAKeyFromKeybox(uint32_t allowed_schemes, encrypted, sizeof(encrypted), signature, &wrapped_rsa_key_, force)); // Verify that the clear key is not contained in the wrapped key. // It should be encrypted. - ASSERT_EQ(NULL, find(wrapped_rsa_key_, encoded_rsa_key_)); + ASSERT_EQ(nullptr, find(wrapped_rsa_key_, encoded_rsa_key_)); } // This creates a wrapped RSA key for devices using provisioning 3.0. If force @@ -50,21 +50,21 @@ void SessionUtil::CreateWrappedRSAKeyFromOEMCert( Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.LoadOEMCert()); - s.GenerateNonce(); struct RSAPrivateKeyMessage encrypted; std::vector signature; std::vector message_key; std::vector encrypted_message_key; s.GenerateRSASessionKey(&message_key, &encrypted_message_key); - ASSERT_NO_FATAL_FAILURE( - s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, - allowed_schemes, encoded_rsa_key_, &message_key)); + Encryptor encryptor(message_key); + ASSERT_NO_FATAL_FAILURE(s.MakeRSACertificate(&encrypted, sizeof(encrypted), + &signature, allowed_schemes, + encoded_rsa_key_, &encryptor)); ASSERT_NO_FATAL_FAILURE( s.RewrapRSAKey30(encrypted, encrypted_message_key, &wrapped_rsa_key_, force)); // Verify that the clear key is not contained in the wrapped key. // It should be encrypted. - ASSERT_EQ(NULL, find(wrapped_rsa_key_, encoded_rsa_key_)); + ASSERT_EQ(nullptr, find(wrapped_rsa_key_, encoded_rsa_key_)); } // If force is true, we assert that the key loads successfully. @@ -89,10 +89,9 @@ void SessionUtil::InstallKeybox(const wvoec::WidevineKeybox& keybox, uint8_t wrapped[sizeof(wvoec::WidevineKeybox)]; size_t length = sizeof(wvoec::WidevineKeybox); keybox_ = keybox; - ASSERT_EQ( - OEMCrypto_SUCCESS, - OEMCrypto_WrapKeybox(reinterpret_cast(&keybox), - sizeof(keybox), wrapped, &length, NULL, 0)); + ASSERT_EQ(OEMCrypto_SUCCESS, + OEMCrypto_WrapKeybox(reinterpret_cast(&keybox), + sizeof(keybox), wrapped, &length, nullptr, 0)); OEMCryptoResult sts = OEMCrypto_InstallKeybox(wrapped, sizeof(keybox)); if (good) { ASSERT_EQ(OEMCrypto_SUCCESS, sts); @@ -105,8 +104,6 @@ void SessionUtil::EnsureTestKeys() { switch (global_features.derive_key_method) { case DeviceFeatures::LOAD_TEST_KEYBOX: keybox_ = kTestKeybox; - // TODO(fredgc, b/119316243): REMOVE FOLLOWING LINE: - if (global_features.api_version < 14) keybox_ = kTestKeyboxForV13; ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_LoadTestKeybox( reinterpret_cast(&keybox_), diff --git a/oemcrypto/test/oemcrypto_test.cpp b/oemcrypto/test/oemcrypto_test.cpp index 3df68bf..63e1547 100644 --- a/oemcrypto/test/oemcrypto_test.cpp +++ b/oemcrypto/test/oemcrypto_test.cpp @@ -13,16 +13,20 @@ #include #include #include -#include #include +#ifdef _WIN32 +# include +#else +# include +#endif + #include #include #include #include #include #include -#include #include #include @@ -83,10 +87,36 @@ const size_t kMaxKeysPerSession [] = { 4, 20, 20}; // but are tested at the system level, so there are no unit tests for frame // rate. -int GetRandBytes(unsigned char* buf, int num) { - // returns 1 on success, -1 if not supported, or 0 if other failure. - return RAND_bytes(buf, num); +/** @return The Unix time of the given time point. */ +template +uint64_t UnixTime(const std::chrono::time_point& point) { + return point.time_since_epoch() / std::chrono::seconds(1); } + +#ifdef _WIN32 +using NativeTime = SYSTEMTIME; +#else +using NativeTime = timeval; +#endif + +void AddNativeTime(int64_t delta_seconds, NativeTime* time) { +#ifdef _WIN32 + // See remarks from this for why this series is used. + // https://msdn.microsoft.com/en-us/f77cdf86-0f97-4a89-b565-95b46fa7d65b + FILETIME file_time; + ASSERT_TRUE(SystemTimeToFileTime(time, &file_time)); + uint64_t long_time = static_cast(file_time.dwLowDateTime) | + (static_cast(file_time.dwHighDateTime) << 32); + long_time += delta_seconds * 1e7; // long_time is in 100-nanosecond intervals. + file_time.dwLowDateTime = long_time & ((1ull << 32) - 1); + file_time.dwHighDateTime = long_time >> 32; + ASSERT_TRUE(FileTimeToSystemTime(&file_time, time)); +#else + time->tv_sec += delta_seconds; +#endif +} + } // namespace class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { @@ -95,7 +125,6 @@ class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { void SetUp() override { ::testing::Test::SetUp(); - wvcdm::g_cutoff = wvcdm::LOG_INFO; const ::testing::TestInfo* const test_info = ::testing::UnitTest::GetInstance()->current_test_info(); LOGD("Running test %s.%s", test_info->test_case_name(), test_info->name()); @@ -113,7 +142,7 @@ class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { vector::const_iterator pos = search( message.begin(), message.end(), substring.begin(), substring.end()); if (pos == message.end()) { - return NULL; + return nullptr; } return &(*pos); } @@ -125,7 +154,7 @@ class OEMCryptoClientTest : public ::testing::Test, public SessionUtil { // tests are failing when the device has the wrong keybox installed. TEST_F(OEMCryptoClientTest, VersionNumber) { const char* level = OEMCrypto_SecurityLevel(); - ASSERT_NE((char*)NULL, level); + ASSERT_NE(nullptr, level); ASSERT_EQ('L', level[0]); cout << " OEMCrypto Security Level is " << level << endl; uint32_t version = OEMCrypto_APIVersion(); @@ -137,13 +166,13 @@ TEST_F(OEMCryptoClientTest, VersionNumber) { } if (version >= 15) { const char* build_info = OEMCrypto_BuildInformation(); - ASSERT_TRUE(build_info != NULL); + ASSERT_NE(nullptr, build_info); ASSERT_TRUE(strnlen(build_info, 256) <= 256) << "BuildInformation should be a short printable string."; cout << " BuildInformation: " << build_info << endl; } ASSERT_GE(version, 8u); - ASSERT_LE(version, 15u); + ASSERT_LE(version, 16u); } // The resource rating is a number from 1 to 3, defined API 15. @@ -202,7 +231,7 @@ TEST_F(OEMCryptoClientTest, CheckSRMCapabilityV13) { OEMCryptoResult current_result = OEMCrypto_GetCurrentSRMVersion(&version); if (current_result == OEMCrypto_SUCCESS) { printf(" Current SRM Version: %d.\n", version); - EXPECT_NE(OEMCrypto_SUCCESS, OEMCrypto_GetCurrentSRMVersion(NULL)); + EXPECT_NE(OEMCrypto_SUCCESS, OEMCrypto_GetCurrentSRMVersion(nullptr)); } else if (current_result == OEMCrypto_LOCAL_DISPLAY_ONLY) { printf(" Current SRM Status: Local Display Only.\n"); } else { @@ -227,6 +256,13 @@ TEST_F(OEMCryptoClientTest, CheckMaxNumberOfSessionsAPI10) { ASSERT_GE(maximum, required_max); } +TEST_F(OEMCryptoClientTest, CheckUsageTableSizeAPI16) { + size_t maximum = OEMCrypto_MaximumUsageTableHeaderSize(); + printf(" Max Usage Table Size: %zu.\n", maximum); + const size_t minimum_capacity = 200u; + ASSERT_GE(maximum, minimum_capacity); +} + // // initialization tests // @@ -346,47 +382,10 @@ TEST_F(OEMCryptoClientTest, GenerateNonce) { s.GenerateNonce(); } -TEST_F(OEMCryptoClientTest, GenerateTwoNonces) { - Session s; - ASSERT_NO_FATAL_FAILURE(s.open()); - s.GenerateNonce(); - uint32_t nonce1 = s.get_nonce(); - s.GenerateNonce(); - uint32_t nonce2 = s.get_nonce(); - ASSERT_TRUE(nonce1 != nonce2); // Very unlikely to be equal. -} - -// OEMCrypto should limit the number of nonces that it can generate in one -// second. A flood of nonce requests can be used for a replay attack, which we -// wish to protect against. -TEST_F(OEMCryptoClientTest, PreventNonceFloodAPI09) { - Session s; - ASSERT_NO_FATAL_FAILURE(s.open()); - int error_counter = 0; - time_t test_start = time(NULL); - // More than 20 nonces per second should generate an error. - // To allow for some slop, we actually test for more. - const int kFloodCount = 80; - for (int i = 0; i < kFloodCount; i++) { - s.GenerateNonce(&error_counter); - } - time_t test_end = time(NULL); - int valid_counter = kFloodCount - error_counter; - // Either oemcrypto should enforce a delay, or it should return an error from - // GenerateNonce -- in either case the number of valid nonces is rate - // limited. We add two seconds to allow for round off error in both - // test_start and test_end. - EXPECT_LE(valid_counter, 20 * (test_end - test_start + 2)); - error_counter = 0; - sleep(2); // After a pause, we should be able to regenerate nonces. - s.GenerateNonce(&error_counter); - EXPECT_EQ(0, error_counter); -} - // Prevent a nonce flood even if each nonce is in a different session. TEST_F(OEMCryptoClientTest, PreventNonceFlood2API09) { int error_counter = 0; - time_t test_start = time(NULL); + time_t test_start = time(nullptr); // More than 20 nonces per second should generate an error. // To allow for some slop, we actually test for more. const int kFloodCount = 80; @@ -395,7 +394,7 @@ TEST_F(OEMCryptoClientTest, PreventNonceFlood2API09) { ASSERT_NO_FATAL_FAILURE(s.open()); s.GenerateNonce(&error_counter); } - time_t test_end = time(NULL); + time_t test_end = time(nullptr); int valid_counter = kFloodCount - error_counter; // Either oemcrypto should enforce a delay, or it should return an error from // GenerateNonce -- in either case the number of valid nonces is rate @@ -417,18 +416,18 @@ TEST_F(OEMCryptoClientTest, PreventNonceFlood2API09) { TEST_F(OEMCryptoClientTest, PreventNonceFlood3API09) { int request_counter = 0; int error_counter = 0; - time_t test_start = time(NULL); + time_t test_start = time(nullptr); // More than 20 nonces per second should generate an error. // To allow for some slop, we actually test for more. - Session s[8]; - for (int i = 0; i < 8; i++) { - ASSERT_NO_FATAL_FAILURE(s[i].open()); - for (int j = 0; j < 10; j++) { + for (int i = 0; i < 10; i++) { + Session s[8]; + for (int j = 0; j < 8; j++) { + ASSERT_NO_FATAL_FAILURE(s[j].open()); request_counter++; - s[i].GenerateNonce(&error_counter); + s[j].GenerateNonce(&error_counter); } } - time_t test_end = time(NULL); + time_t test_end = time(nullptr); int valid_counter = request_counter - error_counter; // Either oemcrypto should enforce a delay, or it should return an error from // GenerateNonce -- in either case the number of valid nonces is rate @@ -437,7 +436,9 @@ TEST_F(OEMCryptoClientTest, PreventNonceFlood3API09) { EXPECT_LE(valid_counter, 20 * (test_end - test_start + 2)); error_counter = 0; sleep(2); // After a pause, we should be able to regenerate nonces. - s[0].GenerateNonce(&error_counter); + Session s; + ASSERT_NO_FATAL_FAILURE(s.open()); + s.GenerateNonce(&error_counter); EXPECT_EQ(0, error_counter); } @@ -461,13 +462,13 @@ TEST_F(OEMCryptoClientTest, ClearCopyTestAPI10) { ASSERT_EQ(input_buffer, output_buffer); ASSERT_EQ(OEMCrypto_ERROR_INVALID_CONTEXT, OEMCrypto_CopyBuffer( - s.session_id(), NULL, input_buffer.size(), &dest_buffer, + s.session_id(), nullptr, input_buffer.size(), &dest_buffer, OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample)); ASSERT_EQ(OEMCrypto_ERROR_INVALID_CONTEXT, OEMCrypto_CopyBuffer( - s.session_id(), input_buffer.data(), input_buffer.size(), NULL, - OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample)); - dest_buffer.buffer.clear.address = NULL; + s.session_id(), input_buffer.data(), input_buffer.size(), + nullptr, OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample)); + dest_buffer.buffer.clear.address = nullptr; ASSERT_EQ( OEMCrypto_ERROR_INVALID_CONTEXT, OEMCrypto_CopyBuffer(s.session_id(), input_buffer.data(), @@ -539,22 +540,21 @@ TEST_F(OEMCryptoKeyboxTest, NormalGetDeviceId) { TEST_F(OEMCryptoKeyboxTest, GetDeviceIdShortBuffer) { OEMCryptoResult sts; uint8_t dev_id[128]; - uint32_t req_len = 0; for (int i = 0; i < 128; ++i) { dev_id[i] = 0x55; } dev_id[127] = '\0'; - size_t dev_id_len = req_len; + size_t dev_id_len = 0; sts = OEMCrypto_GetDeviceID(dev_id, &dev_id_len); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); // On short buffer error, function should return minimum buffer length - ASSERT_TRUE(dev_id_len > req_len); + ASSERT_GT(dev_id_len, 0u); // Should also return short buffer if passed a zero length and a null buffer. - dev_id_len = req_len; - sts = OEMCrypto_GetDeviceID(NULL, &dev_id_len); + dev_id_len = 0; + sts = OEMCrypto_GetDeviceID(nullptr, &dev_id_len); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); // On short buffer error, function should return minimum buffer length - ASSERT_TRUE(dev_id_len > req_len); + ASSERT_GT(dev_id_len, 0u); } TEST_F(OEMCryptoKeyboxTest, NormalGetKeyData) { @@ -572,7 +572,7 @@ TEST_F(OEMCryptoKeyboxTest, NormalGetKeyData) { TEST_F(OEMCryptoKeyboxTest, GetKeyDataNullPointer) { OEMCryptoResult sts; uint8_t key_data[256]; - sts = OEMCrypto_GetKeyData(key_data, NULL); + sts = OEMCrypto_GetKeyData(key_data, nullptr); ASSERT_NE(OEMCrypto_SUCCESS, sts); } @@ -727,6 +727,37 @@ TEST_F(OEMCryptoProv30Test, OEMCertSignatureLargeBuffer) { data, signature.data(), signature_length, kSign_RSASSA_PSS)); } +// Calling OEMCrypto_GetOEMPublicCertificate should not change the session's +// private key. +TEST_F(OEMCryptoProv30Test, GetCertOnlyAPI16) { + if (wrapped_rsa_key_.size() == 0) { + // If we don't have a wrapped key yet, create one. + // This wrapped key will be shared by all sessions in the test. + ASSERT_NO_FATAL_FAILURE(CreateWrappedRSAKey(kSign_RSASSA_PSS, true)); + } + Session s; + ASSERT_NO_FATAL_FAILURE(s.open()); + // Install the DRM Cert's RSA key. + ASSERT_NO_FATAL_FAILURE(s.InstallRSASessionTestKey(wrapped_rsa_key_)); + // Request the OEM Cert. -- This should NOT load the OEM Private key. + vector public_cert; + size_t public_cert_length = 0; + ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, + OEMCrypto_GetOEMPublicCertificate(nullptr, &public_cert_length)); + ASSERT_LT(0u, public_cert_length); + public_cert.resize(public_cert_length); + ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_GetOEMPublicCertificate( + public_cert.data(), &public_cert_length)); + // Derive keys from the session key -- this should use the DRM Cert's key. It + // should NOT use the OEM Private key because that key should not have been + // loaded. + ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromSessionKey()); + // Now fill a message and try to load it. + ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 0)); + ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); + ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); +} + // // AddKey Tests // @@ -747,7 +778,7 @@ class OEMCryptoSessionTests : public OEMCryptoClientTest { void CreateUsageTableHeader(bool expect_success = true) { size_t header_buffer_length = 0; OEMCryptoResult sts = - OEMCrypto_CreateUsageTableHeader(NULL, &header_buffer_length); + OEMCrypto_CreateUsageTableHeader(nullptr, &header_buffer_length); if (expect_success) { ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); } else { @@ -827,6 +858,8 @@ TEST_F(OEMCryptoSessionTestKeyboxTest, BadDataForceKeybox) { ASSERT_EQ(OEMCrypto_ERROR_BAD_CRC, sts); } +// TODO(b/140764295) -- replace this test with a provisioning test. +#if 0 // Verify that keys can be derived from the test keybox, and then those derived // keys can be used to sign a message. TEST_F(OEMCryptoSessionTestKeyboxTest, GenerateSignature) { @@ -842,14 +875,19 @@ TEST_F(OEMCryptoSessionTestKeyboxTest, GenerateSignature) { "b76a3a85f046523e10011a09393837363534333231180120002a0c3138383637" "38373430350000"); - static const uint32_t SignatureBufferMaxLength = 256; + static const uint32_t SignatureBufferMaxLength = SHA256_DIGEST_LENGTH; vector signature(SignatureBufferMaxLength); size_t signature_length = signature.size(); + // TODO(b/135288420): Test core message functionality. + // This function should be split into three versions, one for each core + // message. + size_t core_message_length = 0; + OEMCryptoResult sts; - sts = OEMCrypto_GenerateSignature(s.session_id(), context.data(), - context.size(), signature.data(), - &signature_length); + sts = OEMCrypto_SignProvisioningRequest( + s.session_id(), context.data(), context.size(), nullptr, + &core_message_length, signature.data(), &signature_length); ASSERT_EQ(OEMCrypto_SUCCESS, sts); static const uint32_t SignatureExpectedLength = 32; @@ -857,16 +895,17 @@ TEST_F(OEMCryptoSessionTestKeyboxTest, GenerateSignature) { signature.resize(signature_length); std::vector expected_signature; - s.ClientSignMessage(context, &expected_signature); + s.ClientSignBuffer(context, &expected_signature); ASSERT_EQ(expected_signature, signature); } +#endif // Verify that a license may be loaded without a nonce. TEST_F(OEMCryptoSessionTests, LoadKeyNoNonce) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 42)); + ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); } @@ -876,7 +915,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyNoNonceTwice) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 42)); + ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); @@ -894,8 +933,9 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithNonce) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); } @@ -905,8 +945,9 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithNonceTwice) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); ASSERT_NE( @@ -918,23 +959,9 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithNonceTwice) { GetSubstring(), OEMCrypto_ContentLicense)); } -// This asks for several nonce. This simulates several license requests being -// lost. OEMCrypto is required to keep up to four nonce in the nonce table. -TEST_F(OEMCryptoSessionTests, LoadKeySeveralNonce) { - Session s; - ASSERT_NO_FATAL_FAILURE(s.open()); - ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - uint32_t first_nonce = - s.get_nonce(); // Nonce generated when installing keys. - s.GenerateNonce(); // two. - s.GenerateNonce(); // three. - s.GenerateNonce(); // four. - ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, first_nonce)); - ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); - ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); -} - +// TODO(b/140764295): this test should be replaced something that generates a +// renewal request. +#if 0 // A license might update the mac keys and it might not. This tests that // OEMCrypto keeps the old mac keys if the license does not update them. TEST_F(OEMCryptoSessionTests, LoadKeyWithNoMAC) { @@ -952,14 +979,19 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithNoMAC) { "b76a3a85f046523e10011a09393837363534333231180120002a0c3138383637" "38373430350000"); - static const uint32_t SignatureBufferMaxLength = 256; + static const uint32_t SignatureBufferMaxLength = SHA256_DIGEST_LENGTH; vector signature(SignatureBufferMaxLength); size_t signature_length = signature.size(); + // TODO(http://b/135288420): Test core message functionality. + // This function should be split into three versions, one for each core + // message. + size_t core_message_length = 0; + OEMCryptoResult sts; - sts = OEMCrypto_GenerateSignature(s.session_id(), context.data(), - context.size(), signature.data(), - &signature_length); + sts = OEMCrypto_SignLicenseRequest( + s.session_id(), context.data(), context.size(), nullptr, + &core_message_length, signature.data(), &signature_length); ASSERT_EQ(OEMCrypto_SUCCESS, sts); @@ -968,9 +1000,10 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithNoMAC) { signature.resize(signature_length); std::vector expected_signature; - s.ClientSignMessage(context, &expected_signature); + s.ClientSignBuffer(context, &expected_signature); ASSERT_EQ(expected_signature, signature); } +#endif // This verifies that entitlement keys and entitled content keys can be loaded. TEST_F(OEMCryptoSessionTests, LoadEntitlementKeysAPI14) { @@ -1017,12 +1050,16 @@ TEST_F(OEMCryptoSessionTests, LoadEntitlementKeysWrongEntitlementKeysAPI14) { s.LoadEntitledContentKeys(OEMCrypto_KEY_NOT_ENTITLED); } +// TODO(b/140764295): Replace by sign request for each request type. +#if 0 // This tests GenerateSignature with an 8k licnese request. TEST_F(OEMCryptoSessionTests, ClientSignatureLargeBuffer) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(0, 0, 0)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", false)); @@ -1030,14 +1067,19 @@ TEST_F(OEMCryptoSessionTests, ClientSignatureLargeBuffer) { for (size_t i = 0; i < kMaxMessageSize; i++) { context[i] = i % 0x100; } - static const uint32_t SignatureBufferMaxLength = 256; + static const uint32_t SignatureBufferMaxLength = SHA256_DIGEST_LENGTH; vector signature(SignatureBufferMaxLength); size_t signature_length = signature.size(); + // TODO(http://b/135288420): Test core message functionality. + // This function should be split into three versions, one for each core + // message. + size_t core_message_length = 0; + OEMCryptoResult sts; - sts = OEMCrypto_GenerateSignature(s.session_id(), context.data(), - context.size(), signature.data(), - &signature_length); + sts = OEMCrypto_SignLicenseRequest( + s.session_id(), context.data(), context.size(), nullptr, + &core_message_length, signature.data(), &signature_length); ASSERT_EQ(OEMCrypto_SUCCESS, sts); static const uint32_t SignatureExpectedLength = 32; @@ -1045,17 +1087,21 @@ TEST_F(OEMCryptoSessionTests, ClientSignatureLargeBuffer) { signature.resize(signature_length); std::vector expected_signature; - s.ClientSignMessage(context, &expected_signature); + s.ClientSignBuffer(context, &expected_signature); ASSERT_EQ(expected_signature, signature); } +#endif + // This tests LoadKeys with an 8k license response. TEST_F(OEMCryptoSessionTests, LoadKeyLargeBuffer) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); s.set_message_size(kMaxMessageSize); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(0, 0, 0)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); } @@ -1272,7 +1318,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithNullKeyControlIv) { ASSERT_NE(OEMCrypto_SUCCESS, sts); } -// Verify that LoadKeys fails when a key's nonce is not in the table. +// Verify that LoadKeys fails when a key's nonce is not in the session. TEST_F(OEMCryptoSessionTests, LoadKeyWithBadNonce) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); @@ -1294,7 +1340,8 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithRepeatNonce) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - uint32_t nonce = s.get_nonce(); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + uint32_t nonce = s.nonce(); ASSERT_NO_FATAL_FAILURE( s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, nonce)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); @@ -1320,19 +1367,20 @@ TEST_F(OEMCryptoSessionTests, LoadKeyWithRepeatNonce) { // This tests that a nonce cannot be used in new session. This is similar to // the previous test, but does not use the nonce in the first session. The nonce -// table should be tied to a session, so generating a nonce in the first session -// and then using it in the second session should fail. +// should be tied to a session, so generating a nonce in the first session and +// then using it in the second session should fail. TEST_F(OEMCryptoSessionTests, LoadKeyNonceReopenSession) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - uint32_t nonce = s.get_nonce(); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + uint32_t nonce = s.nonce(); // Do not use the nonce now. Close session and use it after re-opening. ASSERT_NO_FATAL_FAILURE(s.close()); // Actually, this isn't the same session. OEMCrypto opens a new session, but // we are guarding against the possiblity that it re-uses the session data - // and might not clear out the nonce table correctly. + // and might not clear out the nonce correctly. ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, @@ -1353,14 +1401,16 @@ TEST_F(OEMCryptoSessionTests, LoadKeyNonceWrongSession) { Session s1; ASSERT_NO_FATAL_FAILURE(s1.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); - uint32_t nonce = s1.get_nonce(); + ASSERT_NO_FATAL_FAILURE(s1.GenerateNonce()); + uint32_t nonce = s1.nonce(); // Do not use the nonce. Also, leave the session open. We want to make sure - // that s and s1 do NOT share a nonce table. This is different from the + // that s and s1 do NOT share a nonce. This is different from the // LoadKeyNonceReopenSession in that we do not close s1. Session s2; ASSERT_NO_FATAL_FAILURE(s2.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); + ASSERT_NO_FATAL_FAILURE(s2.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s2.FillSimpleMessage(0, wvoec::kControlNonceEnabled, nonce)); // nonce from session s1 ASSERT_NO_FATAL_FAILURE(s2.EncryptAndSign()); @@ -1396,8 +1446,9 @@ TEST_F(OEMCryptoSessionTests, LoadKeyUnalignedMessage) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(kDuration, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); std::vector buffer(1, '0'); // A string of 1 byte long. size_t offset = buffer.size(); @@ -1419,8 +1470,9 @@ TEST_F(OEMCryptoSessionTests, LoadKeyUnalignedMessage) { // This tests each key control block verification string in the range kc09-kc1?. // This test is parameterized by the API number in the key control lock. -class SessionTestAlternateVerification : public OEMCryptoSessionTests, - public WithParamInterface { +class OEMCryptoSessionTestAlternateVerification + : public OEMCryptoSessionTests, + public WithParamInterface { public: void SetUp() override { OEMCryptoSessionTests::SetUp(); @@ -1431,7 +1483,7 @@ class SessionTestAlternateVerification : public OEMCryptoSessionTests, uint32_t target_api_; }; -TEST_P(SessionTestAlternateVerification, LoadKeys) { +TEST_P(OEMCryptoSessionTestAlternateVerification, LoadKeys) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); @@ -1463,7 +1515,7 @@ TEST_P(SessionTestAlternateVerification, LoadKeys) { // Range of API versions to test. This should start at 8, and go to // the current API + 2. We use +2 because we want to test at least 1 // future API, and the ::testing::Range is not inclusive. -INSTANTIATE_TEST_CASE_P(TestAll, SessionTestAlternateVerification, +INSTANTIATE_TEST_CASE_P(TestAll, OEMCryptoSessionTestAlternateVerification, Range(8, 15 + 2)); TEST_F(OEMCryptoSessionTests, LoadKeysBadSignature) { @@ -1501,7 +1553,7 @@ TEST_F(OEMCryptoSessionTests, LoadKeyNoKeys) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 42)); + ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); int kNoKeys = 0; ASSERT_NE(OEMCrypto_SUCCESS, @@ -1517,8 +1569,9 @@ TEST_F(OEMCryptoSessionTests, LoadKeyNoKeyWithNonce) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); int kNoKeys = 0; ASSERT_NE(OEMCrypto_SUCCESS, @@ -1535,15 +1588,42 @@ TEST_F(OEMCryptoSessionTests, SelectKeyNotThereAPI15) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); const char* key_id = "no_key"; - ASSERT_EQ(OEMCrypto_ERROR_NO_CONTENT_KEY, - OEMCrypto_SelectKey( - s.session_id(), reinterpret_cast(key_id), - strlen(key_id), OEMCrypto_CipherMode_CTR)); + OEMCryptoResult sts = OEMCrypto_SelectKey( + s.session_id(), reinterpret_cast(key_id), strlen(key_id), + OEMCrypto_CipherMode_CTR); + if (sts != OEMCrypto_SUCCESS) { + EXPECT_EQ(OEMCrypto_ERROR_NO_CONTENT_KEY, sts); + } else { + // Delayed error code. If select key was a success, then we should + // eventually see the error when we decrypt. + vector in_buffer(256); + for (size_t i = 0; i < in_buffer.size(); i++) in_buffer[i] = i % 256; + vector encryptionIv(AES_BLOCK_SIZE); + EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); + // Describe the output + vector out_buffer(in_buffer.size()); + const bool is_encrypted = true; + OEMCrypto_DestBufferDesc destBuffer; + destBuffer.type = OEMCrypto_BufferType_Clear; + destBuffer.buffer.clear.address = out_buffer.data(); + destBuffer.buffer.clear.max_length = out_buffer.size(); + OEMCrypto_CENCEncryptPatternDesc pattern; + pattern.encrypt = 0; + pattern.skip = 0; + pattern.offset = 0; + // Decrypt the data + sts = OEMCrypto_DecryptCENC( + s.session_id(), in_buffer.data(), in_buffer.size(), is_encrypted, + encryptionIv.data(), 0, &destBuffer, &pattern, + OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample); + EXPECT_EQ(OEMCrypto_ERROR_NO_CONTENT_KEY, sts); + } } // After loading keys, we should be able to query the key control block. If we @@ -1553,8 +1633,9 @@ TEST_F(OEMCryptoSessionTests, QueryKeyControl) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); // Note: successful cases are tested in VerifyTestKeys. @@ -1674,8 +1755,8 @@ TEST_F(OEMCryptoSessionTests, MinimumKeysAPI12) { // Used to test the different HDCP versions. This test is parameterized by the // required HDCP version in the key control block. -class SessionTestDecryptWithHDCP : public OEMCryptoSessionTests, - public WithParamInterface { +class OEMCryptoSessionTestDecryptWithHDCP : public OEMCryptoSessionTests, + public WithParamInterface { public: void DecryptWithHDCP(OEMCrypto_HDCP_Capability version) { OEMCryptoResult sts; @@ -1702,11 +1783,12 @@ class SessionTestDecryptWithHDCP : public OEMCryptoSessionTests, } }; -TEST_P(SessionTestDecryptWithHDCP, DecryptAPI09) { +TEST_P(OEMCryptoSessionTestDecryptWithHDCP, DecryptAPI09) { // Test parameterized by HDCP version. DecryptWithHDCP(static_cast(GetParam())); } -INSTANTIATE_TEST_CASE_P(TestHDCP, SessionTestDecryptWithHDCP, Range(1, 6)); +INSTANTIATE_TEST_CASE_P(TestHDCP, OEMCryptoSessionTestDecryptWithHDCP, + Range(1, 6)); // // Load, Refresh Keys Test @@ -1716,7 +1798,7 @@ INSTANTIATE_TEST_CASE_P(TestHDCP, SessionTestDecryptWithHDCP, Range(1, 6)); // the license. // 2. The number of keys refreshed in the refresh method. If the number of keys // is zero, then all of the keys should be refreshed. -class SessionTestRefreshKeyTest +class OEMCryptoSessionTestRefreshKeyTestAPI16 : public OEMCryptoSessionTests, public WithParamInterface > { public: @@ -1732,25 +1814,24 @@ class SessionTestRefreshKeyTest size_t num_keys_; // Number of keys to refresh. }; -// Refresh keys should work if the license does not use a nonce. -TEST_P(SessionTestRefreshKeyTest, RefreshWithNonce) { +// Refresh keys should work if the license uses a nonce. +TEST_P(OEMCryptoSessionTestRefreshKeyTestAPI16, RefreshWithNonce) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(0, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); - s.GenerateNonce(); // License renewal message is signed by client and verified by the server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); - ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys(num_keys_, - wvoec::kControlNonceEnabled, - s.get_nonce(), OEMCrypto_SUCCESS)); + ASSERT_NO_FATAL_FAILURE(s.VerifyRenewalRequestSignature()); + ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( + num_keys_, wvoec::kControlNonceEnabled, s.nonce(), OEMCrypto_SUCCESS)); } -// Refresh keys should work if the license does use a nonce. -TEST_P(SessionTestRefreshKeyTest, RefreshNoNonce) { +// Refresh keys should work if the license does not use a nonce. +TEST_P(OEMCryptoSessionTestRefreshKeyTestAPI16, RefreshNoNonce) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); @@ -1758,98 +1839,82 @@ TEST_P(SessionTestRefreshKeyTest, RefreshNoNonce) { ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); // License renewal message is signed by client and verified by the server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); - ASSERT_NO_FATAL_FAILURE( - s.RefreshTestKeys(num_keys_, 0, 0, OEMCrypto_SUCCESS)); + ASSERT_NO_FATAL_FAILURE(s.VerifyRenewalRequestSignature()); + ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( + num_keys_, wvoec::kControlNonceEnabled, 0, OEMCrypto_SUCCESS)); } -// Refresh keys should fail if the nonce has already been used. -TEST_P(SessionTestRefreshKeyTest, RefreshOldNonceAPI11) { +// TODO(b/136281032): Nonce should be same as one in license. +// Refresh keys should fail if the nonce is not in the session. +TEST_P(OEMCryptoSessionTestRefreshKeyTestAPI16, RefreshBadNonceAPI11) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - uint32_t nonce = s.get_nonce(); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(kDuration, wvoec::kControlNonceEnabled, nonce)); + s.FillSimpleMessage(kDuration, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); // License renewal message is signed by client and verified by the server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); - // Tryinng to reuse the same nonce. - ASSERT_NO_FATAL_FAILURE( - s.RefreshTestKeys(num_keys_, wvoec::kControlNonceEnabled, nonce, - OEMCrypto_ERROR_INVALID_NONCE)); -} - -// Refresh keys should fail if the nonce is not in the table. -TEST_P(SessionTestRefreshKeyTest, RefreshBadNonceAPI11) { - Session s; - ASSERT_NO_FATAL_FAILURE(s.open()); - ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); - ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); - ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); - s.GenerateNonce(); - // License renewal message is signed by client and verified by the server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); - uint32_t nonce = s.get_nonce() ^ 42; + ASSERT_NO_FATAL_FAILURE(s.VerifyRenewalRequestSignature()); + uint32_t nonce = s.nonce() ^ 42; ASSERT_NO_FATAL_FAILURE( s.RefreshTestKeys(num_keys_, wvoec::kControlNonceEnabled, nonce, OEMCrypto_ERROR_INVALID_NONCE)); } // Refresh keys should handle the maximum message size. -TEST_P(SessionTestRefreshKeyTest, RefreshLargeBuffer) { +TEST_P(OEMCryptoSessionTestRefreshKeyTestAPI16, RefreshLargeBuffer) { Session s; s.set_message_size(kMaxMessageSize); ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(kDuration, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); - s.GenerateNonce(); // License renewal message is signed by client and verified by the server. // This uses a large buffer for the renewal message. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature(kMaxMessageSize)); - ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys(num_keys_, - wvoec::kControlNonceEnabled, - s.get_nonce(), OEMCrypto_SUCCESS)); + ASSERT_NO_FATAL_FAILURE(s.VerifyRenewalRequestSignature(kMaxMessageSize)); + ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( + num_keys_, wvoec::kControlNonceEnabled, s.nonce(), OEMCrypto_SUCCESS)); } +// TODO(b/140764295): Replace with proper signing tests. +#if 0 // This situation would occur if an app only uses one key in the license. When // that happens, SelectKey would be called before the first decrypt, and then // would not need to be called again, even if the license is refreshed. -TEST_P(SessionTestRefreshKeyTest, RefreshWithNoSelectKey) { +TEST_P(OEMCryptoSessionTestRefreshKeyTestAPI16, RefreshWithNoSelectKey) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(kDuration, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys("", new_mac_keys_)); // Call select key before the refresh. No calls below to TestDecryptCTR with // select key set to true. ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR(true)); - s.GenerateNonce(); // License renewal message is signed by client and verified by the server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyRenewalRequestSignature()); // Note: we store the message in encrypted_license_, but the refresh key // message is not actually encrypted. It is, however, signed. // FillRefreshMessage fills the message with a duration of kLongDuration. - ASSERT_NO_FATAL_FAILURE(s.FillRefreshMessage( - num_keys_, wvoec::kControlNonceEnabled, s.get_nonce())); + ASSERT_NO_FATAL_FAILURE( + s.FillRefreshMessage(num_keys_, wvoec::kControlNonceEnabled, s.nonce())); s.ServerSignBuffer(reinterpret_cast(&s.encrypted_license()), s.message_size(), &s.signature()); std::vector key_array(num_keys_); s.FillRefreshArray(key_array.data(), num_keys_); - ASSERT_EQ(OEMCrypto_SUCCESS, - OEMCrypto_RefreshKeys(s.session_id(), s.message_ptr(), - s.message_size(), s.signature().data(), - s.signature().size(), num_keys_, - key_array.data())); + ASSERT_EQ( + OEMCrypto_SUCCESS, + OEMCrypto_RefreshKeys(s.session_id(), s.message_ptr(), s.message_size(), + s.signature().data(), s.signature().size(), + num_keys_, key_array.data())); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR(false)); // This should still be valid key, even if the refresh failed, because this // is before the original license duration. @@ -1861,14 +1926,17 @@ TEST_P(SessionTestRefreshKeyTest, RefreshWithNoSelectKey) { sleep(kShortSleep + kLongSleep); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR(false)); } +#endif // If only one key control block in the refesh, we update all the keys. -INSTANTIATE_TEST_CASE_P(TestRefreshAllKeys, SessionTestRefreshKeyTest, +INSTANTIATE_TEST_CASE_P(TestRefreshAllKeys, + OEMCryptoSessionTestRefreshKeyTestAPI16, Values(std::make_pair(true, 1), std::make_pair(false, 1))); // If multiple key control blocks, we update each key separately. -INSTANTIATE_TEST_CASE_P(TestRefreshEachKeys, SessionTestRefreshKeyTest, +INSTANTIATE_TEST_CASE_P(TestRefreshEachKeys, + OEMCryptoSessionTestRefreshKeyTestAPI16, Values(std::make_pair(true, 4), std::make_pair(false, 4))); @@ -1930,42 +1998,9 @@ TEST_F(OEMCryptoSessionTests, SimultaneousDecrypt) { ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s[i])); } for (int i = 0; i < 8; i++) { + ASSERT_NO_FATAL_FAILURE(s[i].GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s[i].FillSimpleMessage(kLongDuration, 0, s[i].get_nonce())); - ASSERT_NO_FATAL_FAILURE(s[i].EncryptAndSign()); - } - for (int i = 0; i < 8; i++) { - ASSERT_NO_FATAL_FAILURE(s[i].LoadTestKeys()); - } - for (int i = 0; i < 8; i++) { - ASSERT_NO_FATAL_FAILURE(s[i].TestDecryptCTR()); - } - // Second call to decrypt for each session. - for (int i = 0; i < 8; i++) { - ASSERT_NO_FATAL_FAILURE(s[i].TestDecryptCTR()); - } -} - -// This test generates several test keys, as if a license request was lost. -// This is only valid for (obsolete) devices that use a keybox to talk to a -// license server. -TEST_F(OEMCryptoSessionTests, SimultaneousDecryptWithLostMessageKeyboxTest) { - vector s(8); - for (int i = 0; i < 8; i++) { - ASSERT_NO_FATAL_FAILURE(s[i].open()); - ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s[i])); - } - for (int i = 0; i < 8; i++) { - ASSERT_NO_FATAL_FAILURE(s[i].GenerateDerivedKeysFromKeybox(keybox_)); - ASSERT_NO_FATAL_FAILURE( - s[i].FillSimpleMessage(kLongDuration, 0, s[i].get_nonce())); - ASSERT_NO_FATAL_FAILURE(s[i].EncryptAndSign()); - } - // First set of messages are lost. Generate second set. - for (int i = 0; i < 8; i++) { - ASSERT_NO_FATAL_FAILURE(s[i].GenerateDerivedKeysFromKeybox(keybox_)); - ASSERT_NO_FATAL_FAILURE( - s[i].FillSimpleMessage(kLongDuration, 0, s[i].get_nonce())); + s[i].FillSimpleMessage(kLongDuration, 0, s[i].nonce())); ASSERT_NO_FATAL_FAILURE(s[i].EncryptAndSign()); } for (int i = 0; i < 8; i++) { @@ -2001,14 +2036,26 @@ struct SampleInitData { // buffers to be the same. class OEMCryptoSessionTestsDecryptTests : public OEMCryptoSessionTests, - public WithParamInterface > { + public WithParamInterface< + tuple > { protected: void SetUp() override { OEMCryptoSessionTests::SetUp(); pattern_ = ::testing::get<0>(GetParam()); cipher_mode_ = ::testing::get<1>(GetParam()); decrypt_inplace_ = ::testing::get<2>(GetParam()); + verify_crc_ = global_features.supports_crc; + // Pick a random key. + EXPECT_EQ(1, GetRandBytes(key_, AES_BLOCK_SIZE)); + // Pick a random starting iv. Some tests override this before using it. + starting_iv_.resize(AES_BLOCK_SIZE); + EXPECT_EQ(1, GetRandBytes(starting_iv_.data(), starting_iv_.size())); + total_size_ = -1; + } + + void TearDown() override { + ASSERT_NO_FATAL_FAILURE(session_.close()); + OEMCryptoSessionTests::TearDown(); } void FindTotalSize() { @@ -2019,24 +2066,47 @@ class OEMCryptoSessionTestsDecryptTests } } - void EncryptData(const vector& key, - const vector& starting_iv, - const vector& in_buffer, - vector* out_buffer) { + // Set up the input buffer and output buffer. + // This should be called after FindTotalSize(). + void MakeBuffers() { + ASSERT_GT(total_size_, 0u); + encrypted_buffer_.resize(total_size_); + truth_buffer_.resize(total_size_); + for (size_t i = 0; i < total_size_; i++) truth_buffer_[i] = i % 256; + output_descriptor_.type = OEMCrypto_BufferType_Clear; + if (decrypt_inplace_) { + output_descriptor_.buffer.clear.address = encrypted_buffer_.data(); + } else { + // Add some padding to verify there is no overrun. + clear_buffer_.resize(total_size_ + 16, 0xaa); + output_descriptor_.buffer.clear.address = clear_buffer_.data(); + } + output_descriptor_.buffer.clear.max_length = total_size_; + } + + void UpdateOutputOffset(size_t offset) { + if (decrypt_inplace_) { + output_descriptor_.buffer.clear.address = + encrypted_buffer_.data() + offset; + } else { + output_descriptor_.buffer.clear.address = clear_buffer_.data() + offset; + } + output_descriptor_.buffer.clear.max_length = total_size_ - offset; + } + + void EncryptData() { AES_KEY aes_key; - AES_set_encrypt_key(key.data(), AES_BLOCK_SIZE * 8, &aes_key); - out_buffer->resize(in_buffer.size()); + AES_set_encrypt_key(key_, AES_BLOCK_SIZE * 8, &aes_key); uint8_t iv[AES_BLOCK_SIZE]; // Current iv. - - memcpy(iv, starting_iv.data(), AES_BLOCK_SIZE); + memcpy(iv, starting_iv_.data(), AES_BLOCK_SIZE); size_t buffer_index = 0; // byte index into in and out. size_t block_offset = 0; // byte index into current block. for (size_t i = 0; i < subsample_size_.size(); i++) { // Copy clear content. if (subsample_size_[i].clear_size > 0) { - memcpy(&(*out_buffer)[buffer_index], &in_buffer[buffer_index], + memcpy(&encrypted_buffer_[buffer_index], &truth_buffer_[buffer_index], subsample_size_[i].clear_size); buffer_index += subsample_size_[i].clear_size; } @@ -2063,15 +2133,17 @@ class OEMCryptoSessionTestsDecryptTests // can put whatever we want in the output buffer. if (skip_block || ((cipher_mode_ == OEMCrypto_CipherMode_CBC) && (size < AES_BLOCK_SIZE))) { - memcpy(&(*out_buffer)[buffer_index], &in_buffer[buffer_index], size); + memcpy(&encrypted_buffer_[buffer_index], &truth_buffer_[buffer_index], + size); block_offset = 0; // Next block should be complete. } else { if (cipher_mode_ == OEMCrypto_CipherMode_CTR) { uint8_t aes_output[AES_BLOCK_SIZE]; AES_encrypt(iv, aes_output, &aes_key); for (size_t n = 0; n < size; n++) { - (*out_buffer)[buffer_index + n] = - aes_output[n + block_offset] ^ in_buffer[buffer_index + n]; + encrypted_buffer_[buffer_index + n] = + aes_output[n + block_offset] ^ + truth_buffer_[buffer_index + n]; } if (size + block_offset < AES_BLOCK_SIZE) { // Partial block. Don't increment iv. Compute next block offset. @@ -2086,10 +2158,10 @@ class OEMCryptoSessionTestsDecryptTests } else { uint8_t aes_input[AES_BLOCK_SIZE]; for (size_t n = 0; n < size; n++) { - aes_input[n] = in_buffer[buffer_index + n] ^ iv[n]; + aes_input[n] = truth_buffer_[buffer_index + n] ^ iv[n]; } - AES_encrypt(aes_input, &(*out_buffer)[buffer_index], &aes_key); - memcpy(iv, &(*out_buffer)[buffer_index], AES_BLOCK_SIZE); + AES_encrypt(aes_input, &encrypted_buffer_[buffer_index], &aes_key); + memcpy(iv, &encrypted_buffer_[buffer_index], AES_BLOCK_SIZE); // CBC mode should always start on block boundary. block_offset = 0; } @@ -2099,73 +2171,57 @@ class OEMCryptoSessionTestsDecryptTests } } - void TestDecryptCENC(const vector& key, - const vector& /* encryptionIv */, - const vector& encryptedData, - const vector& unencryptedData) { + void LoadLicense() { + // First we open a session and load a license. + ASSERT_NO_FATAL_FAILURE(session_.open()); + ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&session_)); + uint32_t control = 0; + if (verify_crc_) control |= kControlAllowHashVerification; + ASSERT_NO_FATAL_FAILURE(session_.FillSimpleMessage(kDuration, control, 0)); + memcpy(session_.license().keys[0].key_data, key_, sizeof(key_)); + session_.license().keys[0].cipher_mode = cipher_mode_; + ASSERT_NO_FATAL_FAILURE(session_.EncryptAndSign()); + ASSERT_NO_FATAL_FAILURE(session_.LoadTestKeys()); + ASSERT_EQ(OEMCrypto_SUCCESS, + OEMCrypto_SelectKey( + session_.session_id(), session_.license().keys[0].key_id, + session_.license().keys[0].key_id_length, cipher_mode_)); + } + + void TestDecryptCENC() { OEMCryptoResult sts; - Session s; - ASSERT_NO_FATAL_FAILURE(s.open()); - ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(kDuration, kControlAllowHashVerification, 0)); - memcpy(s.license().keys[0].key_data, key.data(), key.size()); - s.license().keys[0].cipher_mode = cipher_mode_; - ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); - ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); - if (global_features.supports_crc) { - uint32_t hash = - wvcrc32(unencryptedData.data(), unencryptedData.size()); + // If supported, initialize the decrypt hash. + if (verify_crc_) { + uint32_t hash = wvcrc32(truth_buffer_.data(), truth_buffer_.size()); ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_SetDecryptHash( - s.session_id(), 1, reinterpret_cast(&hash), - sizeof(hash))); - } - sts = OEMCrypto_SelectKey(s.session_id(), s.license().keys[0].key_id, - s.license().keys[0].key_id_length, - cipher_mode_); - ASSERT_EQ(OEMCrypto_SUCCESS, sts); - // We decrypt each subsample. - vector output_buffer(total_size_ + 16, 0xaa); - const uint8_t *input_buffer = NULL; - if (decrypt_inplace_) { // Use same buffer for input and output. - // Copy the useful data from encryptedData to output_buffer, which - // will be the same as input_buffer. Leave the 0xaa padding at the end. - for(size_t i=0; i < total_size_; i++) output_buffer[i] = encryptedData[i]; - // Now let input_buffer point to the same data. - input_buffer = output_buffer.data(); - } else { - input_buffer = encryptedData.data(); + session_.session_id(), 1, + reinterpret_cast(&hash), sizeof(hash))); } size_t buffer_offset = 0; for (size_t i = 0; i < subsample_size_.size(); i++) { OEMCrypto_CENCEncryptPatternDesc pattern = pattern_; pattern.offset = 0; // Final CENC spec says pattern offset always 0. bool is_encrypted = false; - OEMCrypto_DestBufferDesc destBuffer; size_t block_offset = 0; uint8_t subsample_flags = 0; if (subsample_size_[i].clear_size > 0) { - destBuffer.type = OEMCrypto_BufferType_Clear; - destBuffer.buffer.clear.address = &output_buffer[buffer_offset]; - destBuffer.buffer.clear.max_length = total_size_ - buffer_offset; + ASSERT_NO_FATAL_FAILURE(UpdateOutputOffset(buffer_offset)); if (i == 0) subsample_flags |= OEMCrypto_FirstSubsample; if ((i == subsample_size_.size() - 1) && (subsample_size_[i].encrypted_size == 0)) { subsample_flags |= OEMCrypto_LastSubsample; } - sts = - OEMCrypto_DecryptCENC(s.session_id(), input_buffer + buffer_offset, - subsample_size_[i].clear_size, is_encrypted, - sample_init_data_[i].iv, block_offset, - &destBuffer, &pattern, subsample_flags); + sts = OEMCrypto_DecryptCENC( + session_.session_id(), &encrypted_buffer_[buffer_offset], + subsample_size_[i].clear_size, is_encrypted, + sample_init_data_[i].iv, block_offset, &output_descriptor_, + &pattern, subsample_flags); ASSERT_EQ(OEMCrypto_SUCCESS, sts); buffer_offset += subsample_size_[i].clear_size; } if (subsample_size_[i].encrypted_size > 0) { - destBuffer.type = OEMCrypto_BufferType_Clear; - destBuffer.buffer.clear.address = &output_buffer[buffer_offset]; - destBuffer.buffer.clear.max_length = total_size_ - buffer_offset; + ASSERT_NO_FATAL_FAILURE(UpdateOutputOffset(buffer_offset)); is_encrypted = true; block_offset = sample_init_data_[i].block_offset; subsample_flags = 0; @@ -2176,10 +2232,10 @@ class OEMCryptoSessionTestsDecryptTests subsample_flags |= OEMCrypto_LastSubsample; } sts = OEMCrypto_DecryptCENC( - s.session_id(), input_buffer + buffer_offset, + session_.session_id(), &encrypted_buffer_[buffer_offset], subsample_size_[i].encrypted_size, is_encrypted, - sample_init_data_[i].iv, block_offset, &destBuffer, &pattern, - subsample_flags); + sample_init_data_[i].iv, block_offset, &output_descriptor_, + &pattern, subsample_flags); // CBC mode should not accept a block offset. if ((block_offset > 0) && (cipher_mode_ == OEMCrypto_CipherMode_CBC)) { ASSERT_EQ(OEMCrypto_ERROR_INVALID_CONTEXT, sts) @@ -2190,14 +2246,23 @@ class OEMCryptoSessionTestsDecryptTests buffer_offset += subsample_size_[i].encrypted_size; } } - EXPECT_EQ(0xaa, output_buffer[total_size_]) << "Buffer overrun."; - output_buffer.resize(total_size_); - EXPECT_EQ(unencryptedData, output_buffer); + if (output_descriptor_.type == OEMCrypto_BufferType_Clear) { + if (decrypt_inplace_) { + // We expect encrypted buffer to have been changed by OEMCrypto. + EXPECT_EQ(encrypted_buffer_, truth_buffer_); + } else { + // If we are not decrypting in place, then look at the one byte just + // after the data that was written. It should not have changed from the + // original 0xaa that we set in MakeBuffersession_. + EXPECT_EQ(0xaa, clear_buffer_[total_size_]) << "Buffer overrun."; + clear_buffer_.resize(total_size_); // Remove padding. + EXPECT_EQ(clear_buffer_, truth_buffer_); + } + } if (global_features.supports_crc) { uint32_t frame; ASSERT_EQ(OEMCrypto_SUCCESS, - OEMCrypto_GetHashErrorCode(s.session_id(), &frame)); - + OEMCrypto_GetHashErrorCode(session_.session_id(), &frame)); } } @@ -2206,7 +2271,17 @@ class OEMCryptoSessionTestsDecryptTests bool decrypt_inplace_; // If true, input and output buffers are the same. vector subsample_size_; size_t total_size_; + bool verify_crc_; vector sample_init_data_; + // Encrypted data -- this is input to OEMCrypto, and output from EncryptData. + std::vector encrypted_buffer_; + std::vector clear_buffer_; // OEMCrypto store clear output here. + void* secure_handle_; // OEMCrypto stores secure output here. + std::vector truth_buffer_; // Truth data for clear text. + OEMCrypto_DestBufferDesc output_descriptor_; + uint8_t key_[AES_BLOCK_SIZE]; // Encryption Key. + std::vector starting_iv_; // Starting IV. + Session session_; }; // Tests that generate partial ending blocks. These tests should not be used @@ -2220,15 +2295,10 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, SingleLargeSubsample) { // full patterns if we have more than 320 -- round up to 400. subsample_size_.push_back(SampleSize(0, 400)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // When the pattern length is 10 blocks, there is a discrepancy between the @@ -2238,30 +2308,20 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, SingleLargeSubsample) { TEST_P(OEMCryptoSessionTestsDecryptTests, PatternPlusOneBlock) { subsample_size_.push_back(SampleSize(0, 160 + 16)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // Test that a single block can be decrypted. TEST_P(OEMCryptoSessionTestsDecryptTests, OneBlock) { subsample_size_.push_back(SampleSize(0, 16)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // This tests the ability to decrypt multiple subsamples with no offset. @@ -2272,41 +2332,36 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, NoOffset) { subsample_size_.push_back(SampleSize(50, 256)); subsample_size_.push_back(SampleSize(25, 160)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // This tests an offset into the block for the second encrypted subsample. // This should only work for CTR mode, for CBC mode an error is expected in // the decrypt step. -// If this test fails for CTR mode, then it is probably handleing the +// If this test fails for CTR mode, then it is probably handling the // block_offset incorrectly. TEST_P(OEMCryptoSessionTestsPartialBlockTests, EvenOffset) { subsample_size_.push_back(SampleSize(25, 8)); subsample_size_.push_back(SampleSize(25, 32)); subsample_size_.push_back(SampleSize(25, 50)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); // CTR Mode is self-inverse -- i.e. We can pick the encrypted data and // compute the unencrypted data. By picking the encrypted data to be all 0, // it is easier to re-encrypt the data and debug problems. Similarly, we // pick an iv = 0. - EncryptData(key, encryptionIv, encryptedData, &unencryptedData); - // Run EncryptData again to correctly compute intermediate IV vectors. - // For CBC mode, this also computes the real encrypted data. - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + starting_iv_.assign(AES_BLOCK_SIZE, 0); + truth_buffer_.assign(total_size_, 0); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + truth_buffer_ = encrypted_buffer_; // truth_buffer_ = encrypted zero buffer. + // Run EncryptData to re-encrypt this buffer. For CTR mode, we should get + // back to zeros. + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // If the EvenOffset test passes, but this one doesn't, then DecryptCTR might @@ -2321,15 +2376,10 @@ TEST_P(OEMCryptoSessionTestsPartialBlockTests, OddOffset) { subsample_size_.push_back(SampleSize(10, 75)); subsample_size_.push_back(SampleSize(10, 25)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // This tests that the algorithm used to increment the counter for @@ -2343,17 +2393,13 @@ TEST_P(OEMCryptoSessionTestsPartialBlockTests, OddOffset) { // If you start with an IV of 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE, after you // increment twice, you should get 0xFFFFFFFFFFFFFFFF0000000000000000. TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptWithNearWrap) { + starting_iv_ = wvcdm::a2b_hex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"); subsample_size_.push_back(SampleSize(0, 256)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - encryptionIv = wvcdm::a2b_hex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE"); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // This tests the case where an encrypted sample is not an even number of @@ -2365,15 +2411,10 @@ TEST_P(OEMCryptoSessionTestsPartialBlockTests, PartialBlock) { // other tests, e.g. (7, 3). 3*16 < 50 and 7*16 > 50. subsample_size_.push_back(SampleSize(0, 50)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // Based on the resource rating, oemcrypto should handle at least @@ -2385,20 +2426,15 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptMaxSample) { if (num_subsamples * max_subsample_size > max_size) { max_subsample_size = max_size / num_subsamples; } - for(size_t i = 0; i < num_subsamples/2; i += 2) { + for (size_t i = 0; i < num_subsamples / 2; i += 2) { subsample_size_.push_back(SampleSize(max_subsample_size, 0)); subsample_size_.push_back(SampleSize(0, max_subsample_size)); } FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // This tests that we can decrypt the required maximum number of subsamples. @@ -2407,30 +2443,20 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptMaxSubsample) { subsample_size_.push_back(SampleSize(max_subsample_size, 0)); subsample_size_.push_back(SampleSize(0, max_subsample_size)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // There are probably no frames this small, but we should handle them anyway. TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptSmallBuffer) { subsample_size_.push_back(SampleSize(5, 5)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // Test the case where there is only a clear subsample and no encrypted @@ -2438,47 +2464,25 @@ TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptSmallBuffer) { TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptUnencrypted) { subsample_size_.push_back(SampleSize(256, 0)); FindTotalSize(); - vector unencryptedData(total_size_); - vector encryptedData(total_size_); - vector encryptionIv(AES_BLOCK_SIZE); - vector key(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - EXPECT_EQ(1, GetRandBytes(key.data(), AES_BLOCK_SIZE)); - for (size_t i = 0; i < total_size_; i++) unencryptedData[i] = i % 256; - EncryptData(key, encryptionIv, unencryptedData, &encryptedData); - TestDecryptCENC(key, encryptionIv, encryptedData, unencryptedData); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } -TEST_F(OEMCryptoSessionTests, DecryptUnencryptedNoKey) { - OEMCryptoResult sts; - Session s; - ASSERT_NO_FATAL_FAILURE(s.open()); - // Clear data should be copied even if there is no key selected. - // Set up our expected input and output - // This is dummy decrypted data. - vector in_buffer(256); - for (size_t i = 0; i < in_buffer.size(); i++) in_buffer[i] = i % 256; - vector encryptionIv(AES_BLOCK_SIZE); - EXPECT_EQ(1, GetRandBytes(encryptionIv.data(), AES_BLOCK_SIZE)); - // Describe the output - vector out_buffer(in_buffer.size()); - OEMCrypto_DestBufferDesc destBuffer; - destBuffer.type = OEMCrypto_BufferType_Clear; - destBuffer.buffer.clear.address = out_buffer.data(); - destBuffer.buffer.clear.max_length = out_buffer.size(); - OEMCrypto_CENCEncryptPatternDesc pattern; - pattern.encrypt = 0; - pattern.skip = 0; - pattern.offset = 0; - - // Decrypt the data - sts = - OEMCrypto_DecryptCENC(s.session_id(), in_buffer.data(), in_buffer.size(), - false, encryptionIv.data(), 0, &destBuffer, - &pattern, - OEMCrypto_FirstSubsample | OEMCrypto_LastSubsample); - ASSERT_EQ(OEMCrypto_SUCCESS, sts); - ASSERT_EQ(in_buffer, out_buffer); +TEST_P(OEMCryptoSessionTestsDecryptTests, DecryptUnencryptedNoKey) { + ASSERT_NO_FATAL_FAILURE(session_.open()); + // Single clear subsample + subsample_size_.push_back(SampleSize(400, 0)); + // Do not try to compute the CRC because we have not loaded a license. + verify_crc_ = false; + FindTotalSize(); + ASSERT_NO_FATAL_FAILURE(MakeBuffers()); + // Clear data should be copied even if there is no key selected, and no + // license loaded. + // ASSERT_NO_FATAL_FAILURE(LoadLicense()); + ASSERT_NO_FATAL_FAILURE(EncryptData()); + ASSERT_NO_FATAL_FAILURE(TestDecryptCENC()); } // Used to construct a specific pattern. @@ -2539,8 +2543,7 @@ TEST_F(OEMCryptoSessionTests, DecryptSecureToClear) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, - wvoec::kControlObserveDataPath | wvoec::kControlDataPathSecure, + kDuration, wvoec::kControlObserveDataPath | wvoec::kControlDataPathSecure, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); @@ -2553,8 +2556,8 @@ TEST_F(OEMCryptoSessionTests, DecryptNoAnalogToClearAPI13) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec::kControlDisableAnalogOutput, 0)); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(kDuration, wvoec::kControlDisableAnalogOutput, 0)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); ASSERT_NO_FATAL_FAILURE( @@ -2566,8 +2569,9 @@ TEST_F(OEMCryptoSessionTests, KeyDuration) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - kDuration, wvoec::kControlNonceEnabled, s.get_nonce())); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(kDuration, wvoec::kControlNonceEnabled, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys()); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR(true, OEMCrypto_SUCCESS)); @@ -2598,7 +2602,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvision) { CreateWrappedRSAKey(kSign_RSASSA_PSS, true); // We should not be able to find the rsa key in the wrapped key. It should // be encrypted. - ASSERT_EQ(NULL, find(wrapped_rsa_key_, encoded_rsa_key_)); + ASSERT_EQ(nullptr, find(wrapped_rsa_key_, encoded_rsa_key_)); } // Verify that RewrapDeviceRSAKey checks pointers are within the provisioning @@ -2607,7 +2611,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRange1KeyboxTest) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct RSAPrivateKeyMessage encrypted; std::vector signature; ASSERT_NO_FATAL_FAILURE(s.MakeRSACertificate(&encrypted, sizeof(encrypted), @@ -2621,7 +2625,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRange1KeyboxTest) { s.session_id(), message_ptr, sizeof(encrypted), signature.data(), signature.size(), &encrypted.nonce, encrypted.rsa_key, encrypted.rsa_key_length, - encrypted.rsa_key_iv, NULL, &wrapped_key_length)); + encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key.clear(); wrapped_key.assign(wrapped_key_length, 0); uint32_t nonce = encrypted.nonce; @@ -2640,7 +2644,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRange2KeyboxTest) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); // Provisioning request would be signed by client and verified by server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct RSAPrivateKeyMessage encrypted; std::vector signature; s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, @@ -2653,7 +2657,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRange2KeyboxTest) { s.session_id(), message_ptr, sizeof(encrypted), signature.data(), signature.size(), &encrypted.nonce, encrypted.rsa_key, encrypted.rsa_key_length, - encrypted.rsa_key_iv, NULL, &wrapped_key_length)); + encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key.clear(); wrapped_key.assign(wrapped_key_length, 0); vector bad_buffer(encrypted.rsa_key, @@ -2674,7 +2678,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRange3KeyboxTest) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); // Provisioning request would be signed by client and verified by server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct RSAPrivateKeyMessage encrypted; std::vector signature; s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, @@ -2688,7 +2692,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRange3KeyboxTest) { s.session_id(), message_ptr, sizeof(encrypted), signature.data(), signature.size(), &encrypted.nonce, encrypted.rsa_key, encrypted.rsa_key_length, - encrypted.rsa_key_iv, NULL, &wrapped_key_length)); + encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key.clear(); wrapped_key.assign(wrapped_key_length, 0); vector bad_buffer(encrypted.rsa_key, @@ -2708,7 +2712,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadSignatureKeyboxTest) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); // Provisioning request would be signed by client and verified by server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct RSAPrivateKeyMessage encrypted; std::vector signature; s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, @@ -2722,7 +2726,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadSignatureKeyboxTest) { s.session_id(), message_ptr, sizeof(encrypted), signature.data(), signature.size(), &encrypted.nonce, encrypted.rsa_key, encrypted.rsa_key_length, - encrypted.rsa_key_iv, NULL, &wrapped_key_length)); + encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key.clear(); wrapped_key.assign(wrapped_key_length, 0); signature[4] ^= 42; // bad signature. @@ -2740,7 +2744,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadNonceKeyboxTest) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); // Provisioning request would be signed by client and verified by server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct RSAPrivateKeyMessage encrypted; std::vector signature; s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, @@ -2754,7 +2758,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadNonceKeyboxTest) { s.session_id(), message_ptr, sizeof(encrypted), signature.data(), signature.size(), &encrypted.nonce, encrypted.rsa_key, encrypted.rsa_key_length, - encrypted.rsa_key_iv, NULL, &wrapped_key_length)); + encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key.clear(); wrapped_key.assign(wrapped_key_length, 0); encrypted.nonce ^= 42; // Almost surely a bad nonce. @@ -2772,7 +2776,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRSAKeyKeyboxTest) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); // Provisioning request would be signed by client and verified by server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct RSAPrivateKeyMessage encrypted; std::vector signature; s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, @@ -2786,7 +2790,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRSAKeyKeyboxTest) { s.session_id(), message_ptr, sizeof(encrypted), signature.data(), signature.size(), &encrypted.nonce, encrypted.rsa_key, encrypted.rsa_key_length, - encrypted.rsa_key_iv, NULL, &wrapped_key_length)); + encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); wrapped_key.clear(); wrapped_key.assign(wrapped_key_length, 0); encrypted.rsa_key[1] ^= 42; // Almost surely a bad key. @@ -2804,7 +2808,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionLargeBufferKeyboxTest) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.GenerateDerivedKeysFromKeybox(keybox_)); // Provisioning request would be signed by client and verified by server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyProvisioningRequestSignature()); struct LargeRSAPrivateKeyMessage : public RSAPrivateKeyMessage { uint8_t padding[kMaxMessageSize - sizeof(RSAPrivateKeyMessage)]; } encrypted; @@ -2816,7 +2820,7 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionLargeBufferKeyboxTest) { signature, &wrapped_key, true)); // Verify that the clear key is not contained in the wrapped key. // It should be encrypted. - ASSERT_EQ(NULL, find(wrapped_key, encoded_rsa_key_)); + ASSERT_EQ(nullptr, find(wrapped_key, encoded_rsa_key_)); } // Test that RewrapDeviceRSAKey30 verifies the nonce. @@ -2824,22 +2828,22 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadNonceProv30Test) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.LoadOEMCert()); - s.GenerateNonce(); - uint32_t bad_nonce = s.get_nonce() ^ 42; struct RSAPrivateKeyMessage encrypted; std::vector signature; std::vector message_key; std::vector encrypted_message_key; s.GenerateRSASessionKey(&message_key, &encrypted_message_key); + Encryptor encryptor(message_key); ASSERT_NO_FATAL_FAILURE(s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, kSign_RSASSA_PSS, - encoded_rsa_key_, &message_key)); + encoded_rsa_key_, &encryptor)); + uint32_t bad_nonce = s.nonce() ^ 42; size_t wrapped_key_length = 0; ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, OEMCrypto_RewrapDeviceRSAKey30( s.session_id(), &bad_nonce, encrypted_message_key.data(), encrypted_message_key.size(), encrypted.rsa_key, - encrypted.rsa_key_length, encrypted.rsa_key_iv, NULL, + encrypted.rsa_key_length, encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); vector wrapped_key(wrapped_key_length, 0); ASSERT_EQ(OEMCrypto_ERROR_INVALID_NONCE, @@ -2855,22 +2859,22 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateProvisionBadRSAKeyProv30Test) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(s.LoadOEMCert()); - s.GenerateNonce(); struct RSAPrivateKeyMessage encrypted; std::vector signature; std::vector message_key; std::vector encrypted_message_key; s.GenerateRSASessionKey(&message_key, &encrypted_message_key); + Encryptor encryptor(message_key); ASSERT_NO_FATAL_FAILURE(s.MakeRSACertificate(&encrypted, sizeof(encrypted), &signature, kSign_RSASSA_PSS, - encoded_rsa_key_, &message_key)); + encoded_rsa_key_, &encryptor)); size_t wrapped_key_length = 0; - uint32_t nonce = s.get_nonce(); + uint32_t nonce = s.nonce(); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, OEMCrypto_RewrapDeviceRSAKey30( s.session_id(), &nonce, encrypted_message_key.data(), encrypted_message_key.size(), encrypted.rsa_key, - encrypted.rsa_key_length, encrypted.rsa_key_iv, NULL, + encrypted.rsa_key_length, encrypted.rsa_key_iv, nullptr, &wrapped_key_length)); vector wrapped_key(wrapped_key_length, 0); encrypted.rsa_key[1] ^= 42; // Almost surely a bad key. @@ -3039,7 +3043,7 @@ TEST_F(OEMCryptoLoadsCertificate, RSAPerformance) { GetRandBytes(licenseRequest.data(), licenseRequest.size()); size_t signature_length = 0; sts = OEMCrypto_GenerateRSASignature(s.session_id(), licenseRequest.data(), - licenseRequest.size(), NULL, + licenseRequest.size(), nullptr, &signature_length, kSign_RSASSA_PSS); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); ASSERT_NE(static_cast(0), signature_length); @@ -3240,7 +3244,7 @@ class OEMCryptoLoadsCertificateAlternates : public OEMCryptoLoadsCertificate { GetRandBytes(licenseRequest.data(), licenseRequest.size()); size_t signature_length = 0; sts = OEMCrypto_GenerateRSASignature(s.session_id(), licenseRequest.data(), - licenseRequest.size(), NULL, + licenseRequest.size(), nullptr, &signature_length, scheme); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); ASSERT_NE(static_cast(0), signature_length); @@ -3525,8 +3529,8 @@ class OEMCryptoCastReceiverTest : public OEMCryptoLoadsCertificateAlternates { // OEMCrypto will apply the padding, and encrypt to generate the signature. size_t signature_length = 0; sts = OEMCrypto_GenerateRSASignature(s.session_id(), digest.data(), - digest.size(), NULL, &signature_length, - scheme); + digest.size(), nullptr, + &signature_length, scheme); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); ASSERT_NE(static_cast(0), signature_length); @@ -4254,11 +4258,11 @@ TEST_F(OEMCryptoCastReceiverTest, TestSignaturePKCS1_15_20) { } // This class is for testing the generic crypto functionality. -class GenericCryptoTest : public OEMCryptoSessionTests { +class OEMCryptoGenericCryptoTest : public OEMCryptoSessionTests { protected: // buffer_size_ must be a multiple of encryption block size, 16. We'll use a // reasonable number of blocks for most of the tests. - GenericCryptoTest() : buffer_size_(160) {} + OEMCryptoGenericCryptoTest() : buffer_size_(160) {} void SetUp() override { OEMCryptoSessionTests::SetUp(); @@ -4424,10 +4428,10 @@ class GenericCryptoTest : public OEMCryptoSessionTests { Session session_; }; -TEST_F(GenericCryptoTest, GenericKeyLoad) { EncryptAndLoadKeys(); } +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyLoad) { EncryptAndLoadKeys(); } // Test that the Generic_Encrypt function works correctly. -TEST_F(GenericCryptoTest, GenericKeyEncrypt) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyEncrypt) { EncryptAndLoadKeys(); unsigned int key_index = 0; vector expected_encrypted; @@ -4448,7 +4452,7 @@ TEST_F(GenericCryptoTest, GenericKeyEncrypt) { } // Test that the Generic_Encrypt function fails when not allowed. -TEST_F(GenericCryptoTest, GenericKeyBadEncrypt) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyBadEncrypt) { EncryptAndLoadKeys(); BadEncrypt(0, OEMCrypto_HMAC_SHA256, buffer_size_); // The buffer size must be a multiple of 16, so subtracting 10 is bad. @@ -4460,7 +4464,7 @@ TEST_F(GenericCryptoTest, GenericKeyBadEncrypt) { // Test that the Generic_Encrypt works if the input and output buffers are the // same. -TEST_F(GenericCryptoTest, GenericKeyEncryptSameBufferAPI12) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyEncryptSameBufferAPI12) { EncryptAndLoadKeys(); unsigned int key_index = 0; vector expected_encrypted; @@ -4481,7 +4485,7 @@ TEST_F(GenericCryptoTest, GenericKeyEncryptSameBufferAPI12) { } // Test Generic_Decrypt works correctly. -TEST_F(GenericCryptoTest, GenericKeyDecrypt) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyDecrypt) { EncryptAndLoadKeys(); unsigned int key_index = 1; vector encrypted; @@ -4502,7 +4506,7 @@ TEST_F(GenericCryptoTest, GenericKeyDecrypt) { // Test that Generic_Decrypt works correctly when the input and output buffers // are the same. -TEST_F(GenericCryptoTest, GenericKeyDecryptSameBufferAPI12) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyDecryptSameBufferAPI12) { EncryptAndLoadKeys(); unsigned int key_index = 1; vector encrypted; @@ -4523,7 +4527,7 @@ TEST_F(GenericCryptoTest, GenericKeyDecryptSameBufferAPI12) { // Test that Generic_Decrypt fails to decrypt to an insecure buffer if the key // requires a secure data path. -TEST_F(GenericCryptoTest, GenericSecureToClear) { +TEST_F(OEMCryptoGenericCryptoTest, GenericSecureToClear) { session_.license().keys[1].control.control_bits |= htonl( wvoec::kControlObserveDataPath | wvoec::kControlDataPathSecure); EncryptAndLoadKeys(); @@ -4545,7 +4549,7 @@ TEST_F(GenericCryptoTest, GenericSecureToClear) { } // Test that the Generic_Decrypt function fails when not allowed. -TEST_F(GenericCryptoTest, GenericKeyBadDecrypt) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyBadDecrypt) { EncryptAndLoadKeys(); BadDecrypt(1, OEMCrypto_HMAC_SHA256, buffer_size_); // The buffer size must be a multiple of 16, so subtracting 10 is bad. @@ -4555,7 +4559,7 @@ TEST_F(GenericCryptoTest, GenericKeyBadDecrypt) { BadDecrypt(3, OEMCrypto_AES_CBC_128_NO_PADDING, buffer_size_); } -TEST_F(GenericCryptoTest, GenericKeySign) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeySign) { EncryptAndLoadKeys(); unsigned int key_index = 2; vector expected_signature; @@ -4571,7 +4575,7 @@ TEST_F(GenericCryptoTest, GenericKeySign) { ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, OEMCrypto_Generic_Sign(session_.session_id(), clear_buffer_.data(), clear_buffer_.size(), OEMCrypto_HMAC_SHA256, - NULL, &gen_signature_length)); + nullptr, &gen_signature_length)); ASSERT_EQ(static_cast(SHA256_DIGEST_LENGTH), gen_signature_length); vector signature(SHA256_DIGEST_LENGTH); ASSERT_EQ(OEMCrypto_SUCCESS, @@ -4582,7 +4586,7 @@ TEST_F(GenericCryptoTest, GenericKeySign) { } // Test that the Generic_Sign function fails when not allowed. -TEST_F(GenericCryptoTest, GenericKeyBadSign) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyBadSign) { EncryptAndLoadKeys(); BadSign(0, OEMCrypto_HMAC_SHA256); // Can't sign with encrypt key. BadSign(1, OEMCrypto_HMAC_SHA256); // Can't sign with decrypt key. @@ -4590,7 +4594,7 @@ TEST_F(GenericCryptoTest, GenericKeyBadSign) { BadSign(2, OEMCrypto_AES_CBC_128_NO_PADDING); // Bad signing algorithm. } -TEST_F(GenericCryptoTest, GenericKeyVerify) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyVerify) { EncryptAndLoadKeys(); unsigned int key_index = 3; vector signature; @@ -4610,7 +4614,7 @@ TEST_F(GenericCryptoTest, GenericKeyVerify) { } // Test that the Generic_Verify function fails when not allowed. -TEST_F(GenericCryptoTest, GenericKeyBadVerify) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyBadVerify) { EncryptAndLoadKeys(); BadVerify(0, OEMCrypto_HMAC_SHA256, SHA256_DIGEST_LENGTH, false); BadVerify(1, OEMCrypto_HMAC_SHA256, SHA256_DIGEST_LENGTH, false); @@ -4622,7 +4626,7 @@ TEST_F(GenericCryptoTest, GenericKeyBadVerify) { } // Test Generic_Encrypt with the maximum buffer size. -TEST_F(GenericCryptoTest, GenericKeyEncryptLargeBuffer) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyEncryptLargeBuffer) { buffer_size_ = GetResourceValue(kMaxGenericBuffer); EncryptAndLoadKeys(); unsigned int key_index = 0; @@ -4644,7 +4648,7 @@ TEST_F(GenericCryptoTest, GenericKeyEncryptLargeBuffer) { } // Test Generic_Decrypt with the maximum buffer size. -TEST_F(GenericCryptoTest, GenericKeyDecryptLargeBuffer) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyDecryptLargeBuffer) { // Some applications are known to pass in a block that is almost 400k. buffer_size_ = GetResourceValue(kMaxGenericBuffer); EncryptAndLoadKeys(); @@ -4666,7 +4670,7 @@ TEST_F(GenericCryptoTest, GenericKeyDecryptLargeBuffer) { } // Test Generic_Sign with the maximum buffer size. -TEST_F(GenericCryptoTest, GenericKeySignLargeBuffer) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeySignLargeBuffer) { buffer_size_ = GetResourceValue(kMaxGenericBuffer); EncryptAndLoadKeys(); unsigned int key_index = 2; @@ -4683,7 +4687,7 @@ TEST_F(GenericCryptoTest, GenericKeySignLargeBuffer) { ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, OEMCrypto_Generic_Sign(session_.session_id(), clear_buffer_.data(), clear_buffer_.size(), OEMCrypto_HMAC_SHA256, - NULL, &gen_signature_length)); + nullptr, &gen_signature_length)); ASSERT_EQ(static_cast(SHA256_DIGEST_LENGTH), gen_signature_length); vector signature(SHA256_DIGEST_LENGTH); ASSERT_EQ(OEMCrypto_SUCCESS, @@ -4694,7 +4698,7 @@ TEST_F(GenericCryptoTest, GenericKeySignLargeBuffer) { } // Test Generic_Verify with the maximum buffer size. -TEST_F(GenericCryptoTest, GenericKeyVerifyLargeBuffer) { +TEST_F(OEMCryptoGenericCryptoTest, GenericKeyVerifyLargeBuffer) { buffer_size_ = GetResourceValue(kMaxGenericBuffer); EncryptAndLoadKeys(); unsigned int key_index = 3; @@ -4715,7 +4719,7 @@ TEST_F(GenericCryptoTest, GenericKeyVerifyLargeBuffer) { } // Test Generic_Encrypt when the key duration has expired. -TEST_F(GenericCryptoTest, KeyDurationEncrypt) { +TEST_F(OEMCryptoGenericCryptoTest, KeyDurationEncrypt) { EncryptAndLoadKeys(); vector expected_encrypted; EncryptBuffer(0, clear_buffer_, &expected_encrypted); @@ -4750,7 +4754,7 @@ TEST_F(GenericCryptoTest, KeyDurationEncrypt) { } // Test Generic_Decrypt when the key duration has expired. -TEST_F(GenericCryptoTest, KeyDurationDecrypt) { +TEST_F(OEMCryptoGenericCryptoTest, KeyDurationDecrypt) { EncryptAndLoadKeys(); unsigned int key_index = 1; @@ -4785,7 +4789,7 @@ TEST_F(GenericCryptoTest, KeyDurationDecrypt) { } // Test Generic_Sign when the key duration has expired. -TEST_F(GenericCryptoTest, KeyDurationSign) { +TEST_F(OEMCryptoGenericCryptoTest, KeyDurationSign) { EncryptAndLoadKeys(); unsigned int key_index = 2; @@ -4822,7 +4826,7 @@ TEST_F(GenericCryptoTest, KeyDurationSign) { } // Test Generic_Verify when the key duration has expired. -TEST_F(GenericCryptoTest, KeyDurationVerify) { +TEST_F(OEMCryptoGenericCryptoTest, KeyDurationVerify) { EncryptAndLoadKeys(); unsigned int key_index = 3; @@ -4857,10 +4861,11 @@ TEST_F(GenericCryptoTest, KeyDurationVerify) { const unsigned int kLongKeyId = 2; // Test that short key ids are allowed. -class GenericCryptoKeyIdLengthTest : public GenericCryptoTest { +class OEMCryptoGenericCryptoKeyIdLengthTest + : public OEMCryptoGenericCryptoTest { protected: void SetUp() override { - GenericCryptoTest::SetUp(); + OEMCryptoGenericCryptoTest::SetUp(); const uint32_t kNoNonce = 0; session_.set_num_keys(5); ASSERT_NO_FATAL_FAILURE(session_.FillSimpleMessage( @@ -4913,32 +4918,52 @@ class GenericCryptoKeyIdLengthTest : public GenericCryptoTest { } }; -TEST_F(GenericCryptoKeyIdLengthTest, MediumKeyId) { TestWithKey(0); } +TEST_F(OEMCryptoGenericCryptoKeyIdLengthTest, MediumKeyId) { TestWithKey(0); } -TEST_F(GenericCryptoKeyIdLengthTest, ShortKeyId) { TestWithKey(1); } +TEST_F(OEMCryptoGenericCryptoKeyIdLengthTest, ShortKeyId) { TestWithKey(1); } -TEST_F(GenericCryptoKeyIdLengthTest, LongKeyId) { TestWithKey(2); } +TEST_F(OEMCryptoGenericCryptoKeyIdLengthTest, LongKeyId) { TestWithKey(2); } -TEST_F(GenericCryptoKeyIdLengthTest, FourteenByteKeyId) { TestWithKey(3); } +TEST_F(OEMCryptoGenericCryptoKeyIdLengthTest, FourteenByteKeyId) { + TestWithKey(3); +} -TEST_F(GenericCryptoKeyIdLengthTest, VeryShortKeyId) { TestWithKey(4); } +TEST_F(OEMCryptoGenericCryptoKeyIdLengthTest, VeryShortKeyId) { + TestWithKey(4); +} -TEST_F(GenericCryptoKeyIdLengthTest, UniformShortKeyId) { +TEST_F(OEMCryptoGenericCryptoKeyIdLengthTest, UniformShortKeyId) { SetUniformKeyIdLength(5); TestWithKey(2); } -TEST_F(GenericCryptoKeyIdLengthTest, UniformLongKeyId) { +TEST_F(OEMCryptoGenericCryptoKeyIdLengthTest, UniformLongKeyId) { SetUniformKeyIdLength(kTestKeyIdMaxLength); TestWithKey(2); } // Test usage table functionality. -class UsageTableTest : public GenericCryptoTest { +class OEMCryptoUsageTableTest : public OEMCryptoGenericCryptoTest { public: void SetUp() override { - GenericCryptoTest::SetUp(); + OEMCryptoGenericCryptoTest::SetUp(); new_mac_keys_ = true; + did_change_system_time_ = false; + test_start_steady_ = steady_clock_.now(); +#ifdef _WIN32 + GetSystemTime(&test_start_wall_); +#else + ASSERT_EQ(0, gettimeofday(&test_start_wall_, nullptr)); +#endif + } + + void TearDown() override { + if (did_change_system_time_) { + const auto delta = steady_clock_.now() - test_start_steady_; + const int64_t delta_sec = delta / std::chrono::seconds(1); + ASSERT_NO_FATAL_FAILURE(SetWallTimeDelta(delta_sec)); + } + OEMCryptoGenericCryptoTest::TearDown(); } virtual void ShutDown() { @@ -4956,8 +4981,9 @@ class UsageTableTest : public GenericCryptoTest { void LoadOfflineLicense(Session& s, const std::string& pst) { ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s.nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -4969,10 +4995,10 @@ class UsageTableTest : public GenericCryptoTest { void PrintDotsWhileSleep(time_t total_seconds, time_t interval_seconds) { time_t dot_time = interval_seconds; time_t elapsed_time = 0; - time_t start_time = time(NULL); + time_t start_time = time(nullptr); do { sleep(1); - elapsed_time = time(NULL) - start_time; + elapsed_time = time(nullptr) - start_time; if (elapsed_time >= dot_time) { cout << "."; cout.flush(); @@ -4983,7 +5009,26 @@ class UsageTableTest : public GenericCryptoTest { } protected: + /** + * Sets the current wall-clock time to a delta based on the start of the + * test. + */ + void SetWallTimeDelta(int64_t delta_seconds) { + did_change_system_time_ = true; + NativeTime time = test_start_wall_; + ASSERT_NO_FATAL_FAILURE(AddNativeTime(delta_seconds, &time)); +#ifdef _WIN32 + ASSERT_TRUE(SetSystemTime(&time)); +#else + ASSERT_EQ(0, settimeofday(&time, nullptr)); +#endif + } + bool new_mac_keys_; + bool did_change_system_time_; + std::chrono::steady_clock steady_clock_; + std::chrono::time_point test_start_steady_; + NativeTime test_start_wall_; }; // Some usage tables we want to check a license either with or without a @@ -4991,25 +5036,26 @@ class UsageTableTest : public GenericCryptoTest { // the license is loaded. // This test is parameterized by a boolean which determines if the license // installs new mac keys in LoadKeys. -class UsageTableTestWithMAC : public UsageTableTest, - public WithParamInterface { +class OEMCryptoUsageTableTestWithMAC : public OEMCryptoUsageTableTest, + public WithParamInterface { public: void SetUp() override { - UsageTableTest::SetUp(); + OEMCryptoUsageTableTest::SetUp(); new_mac_keys_ = GetParam(); } }; // Test an online or streaming license with PST. This license requires a valid // nonce and can only be loaded once. -TEST_P(UsageTableTestWithMAC, OnlineLicense) { +TEST_P(OEMCryptoUsageTableTestWithMAC, OnlineLicense) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -5040,14 +5086,15 @@ TEST_P(UsageTableTestWithMAC, OnlineLicense) { // Test the usage report when the license is loaded but the keys are never used // for decryption. -TEST_P(UsageTableTestWithMAC, OnlineLicenseUnused) { +TEST_P(OEMCryptoUsageTableTestWithMAC, OnlineLicenseUnused) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -5072,14 +5119,15 @@ TEST_P(UsageTableTestWithMAC, OnlineLicenseUnused) { // Test that the usage table has been updated and saved before a report can be // generated. -TEST_P(UsageTableTestWithMAC, ForbidReportWithNoUpdate) { +TEST_P(OEMCryptoUsageTableTestWithMAC, ForbidReportWithNoUpdate) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -5103,27 +5151,26 @@ TEST_P(UsageTableTestWithMAC, ForbidReportWithNoUpdate) { } // Test an online license with a license renewal. -TEST_P(UsageTableTestWithMAC, OnlineLicenseWithRefresh) { +TEST_P(OEMCryptoUsageTableTestWithMAC, OnlineLicenseWithRefreshAPI16) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); - time_t loaded = time(NULL); + time_t loaded = time(nullptr); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR()); - s.GenerateNonce(); // License renewal message is signed by client and verified by the server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyRenewalRequestSignature()); size_t kAllKeys = 1; ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( - kAllKeys, - wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), OEMCrypto_SUCCESS)); + kAllKeys, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, + s.nonce(), OEMCrypto_SUCCESS)); ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE( s.GenerateVerifyReport(pst, kActive, @@ -5133,14 +5180,15 @@ TEST_P(UsageTableTestWithMAC, OnlineLicenseWithRefresh) { } // Verify that a streaming license cannot be reloaded. -TEST_F(UsageTableTest, RepeatOnlineLicense) { +TEST_F(OEMCryptoUsageTableTest, RepeatOnlineLicense) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -5163,13 +5211,14 @@ TEST_F(UsageTableTest, RepeatOnlineLicense) { } // A license with non-zero replay control bits needs a valid pst. -TEST_F(UsageTableTest, OnlineEmptyPST) { +TEST_F(OEMCryptoUsageTableTest, OnlineEmptyPST) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce())); + s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); OEMCryptoResult sts = OEMCrypto_LoadKeys( @@ -5182,14 +5231,15 @@ TEST_F(UsageTableTest, OnlineEmptyPST) { } // A license with non-zero replay control bits needs a valid pst. -TEST_F(UsageTableTest, OnlineMissingEntry) { +TEST_F(OEMCryptoUsageTableTest, OnlineMissingEntry) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); // ENTRY NOT CREATED: ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); OEMCryptoResult sts = OEMCrypto_LoadKeys( @@ -5202,9 +5252,10 @@ TEST_F(UsageTableTest, OnlineMissingEntry) { } // Test generic encrypt when the license uses a PST. -TEST_P(UsageTableTestWithMAC, GenericCryptoEncrypt) { +TEST_P(OEMCryptoUsageTableTestWithMAC, GenericCryptoEncrypt) { std::string pst = "A PST"; - uint32_t nonce = session_.get_nonce(); + ASSERT_NO_FATAL_FAILURE(session_.GenerateNonce()); + uint32_t nonce = session_.nonce(); MakeFourKeys(0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); ASSERT_NO_FATAL_FAILURE(session_.EncryptAndSign()); @@ -5239,9 +5290,10 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoEncrypt) { } // Test generic decrypt when the license uses a PST. -TEST_P(UsageTableTestWithMAC, GenericCryptoDecrypt) { +TEST_P(OEMCryptoUsageTableTestWithMAC, GenericCryptoDecrypt) { std::string pst = "my_pst"; - uint32_t nonce = session_.get_nonce(); + ASSERT_NO_FATAL_FAILURE(session_.GenerateNonce()); + uint32_t nonce = session_.nonce(); MakeFourKeys( 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); @@ -5277,9 +5329,10 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoDecrypt) { } // Test generic sign when the license uses a PST. -TEST_P(UsageTableTestWithMAC, GenericCryptoSign) { +TEST_P(OEMCryptoUsageTableTestWithMAC, GenericCryptoSign) { std::string pst = "my_pst"; - uint32_t nonce = session_.get_nonce(); + ASSERT_NO_FATAL_FAILURE(session_.GenerateNonce()); + uint32_t nonce = session_.nonce(); MakeFourKeys( 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); @@ -5301,7 +5354,7 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoSign) { size_t gen_signature_length = 0; sts = OEMCrypto_Generic_Sign(session_.session_id(), clear_buffer_.data(), clear_buffer_.size(), OEMCrypto_HMAC_SHA256, - NULL, &gen_signature_length); + nullptr, &gen_signature_length); ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); ASSERT_EQ(static_cast(SHA256_DIGEST_LENGTH), gen_signature_length); vector signature(SHA256_DIGEST_LENGTH); @@ -5326,9 +5379,10 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoSign) { } // Test generic verify when the license uses a PST. -TEST_P(UsageTableTestWithMAC, GenericCryptoVerify) { +TEST_P(OEMCryptoUsageTableTestWithMAC, GenericCryptoVerify) { std::string pst = "my_pst"; - uint32_t nonce = session_.get_nonce(); + ASSERT_NO_FATAL_FAILURE(session_.GenerateNonce()); + uint32_t nonce = session_.nonce(); MakeFourKeys( 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, nonce, pst); @@ -5362,7 +5416,7 @@ TEST_P(UsageTableTestWithMAC, GenericCryptoVerify) { } // Test that an offline license can be loaded. -TEST_P(UsageTableTestWithMAC, OfflineLicense) { +TEST_P(OEMCryptoUsageTableTestWithMAC, OfflineLicense) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); @@ -5370,21 +5424,21 @@ TEST_P(UsageTableTestWithMAC, OfflineLicense) { // Test that an offline license can be loaded and that the license can be // renewed. -TEST_P(UsageTableTestWithMAC, OfflineLicenseRefresh) { +TEST_P(OEMCryptoUsageTableTestWithMAC, OfflineLicenseRefresh) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s.nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); - time_t loaded = time(NULL); + time_t loaded = time(nullptr); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR()); - s.GenerateNonce(); // License renewal message is signed by client and verified by the server. - ASSERT_NO_FATAL_FAILURE(s.VerifyClientSignature()); + ASSERT_NO_FATAL_FAILURE(s.VerifyRenewalRequestSignature()); size_t kAllKeys = 1; ASSERT_NO_FATAL_FAILURE(s.RefreshTestKeys( kAllKeys, wvoec::kControlNonceOrEntry, 0, OEMCrypto_SUCCESS)); @@ -5398,7 +5452,7 @@ TEST_P(UsageTableTestWithMAC, OfflineLicenseRefresh) { } // Test that an offline license can be reloaded in a new session. -TEST_P(UsageTableTestWithMAC, ReloadOfflineLicense) { +TEST_P(OEMCryptoUsageTableTestWithMAC, ReloadOfflineLicense) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); @@ -5419,11 +5473,11 @@ TEST_P(UsageTableTestWithMAC, ReloadOfflineLicense) { // Test that an offline license can be reloaded in a new session, and then // refreshed. -TEST_P(UsageTableTestWithMAC, ReloadOfflineLicenseWithRefresh) { +TEST_P(OEMCryptoUsageTableTestWithMAC, ReloadOfflineLicenseWithRefresh) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); - time_t loaded = time(NULL); + time_t loaded = time(nullptr); ASSERT_NO_FATAL_FAILURE(s.open()); // We will reuse the encrypted and signed message, so we don't call @@ -5434,7 +5488,7 @@ TEST_P(UsageTableTestWithMAC, ReloadOfflineLicenseWithRefresh) { ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s.GenerateVerifyReport(pst, kUnused, loaded, 0, 0)); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR()); - time_t decrypt_time = time(NULL); + time_t decrypt_time = time(nullptr); ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE( s.GenerateVerifyReport(pst, kActive, @@ -5456,7 +5510,7 @@ TEST_P(UsageTableTestWithMAC, ReloadOfflineLicenseWithRefresh) { // Verify that we can still reload an offline license after OEMCrypto_Terminate // and Initialize are called. This is as close to a reboot as we can do in a // unit test. -TEST_P(UsageTableTestWithMAC, ReloadOfflineLicenseWithTerminate) { +TEST_P(OEMCryptoUsageTableTestWithMAC, ReloadOfflineLicenseWithTerminate) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); @@ -5483,18 +5537,19 @@ TEST_P(UsageTableTestWithMAC, ReloadOfflineLicenseWithTerminate) { // If we attempt to load a second license with the same usage entry as the // first, but it has different mac keys, then the attempt should fail. This is // how we verify that we are reloading the same license. -TEST_P(UsageTableTestWithMAC, BadReloadOfflineLicense) { +TEST_P(OEMCryptoUsageTableTestWithMAC, BadReloadOfflineLicense) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); - time_t loaded = time(NULL); + time_t loaded = time(nullptr); // Offline license with new mac keys should fail. Session s2; ASSERT_NO_FATAL_FAILURE(s2.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); - ASSERT_NO_FATAL_FAILURE(s2.FillSimpleMessage( - 0, wvoec::kControlNonceOrEntry, s2.get_nonce(), pst)); + ASSERT_NO_FATAL_FAILURE(s2.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s2.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s2.nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s2.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s2.LoadUsageEntry(s)); ASSERT_NE( @@ -5519,12 +5574,13 @@ TEST_P(UsageTableTestWithMAC, BadReloadOfflineLicense) { } // An offline license should not load on the first call if the nonce is bad. -TEST_P(UsageTableTestWithMAC, OfflineBadNonce) { +TEST_P(OEMCryptoUsageTableTestWithMAC, OfflineBadNonce) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, 42, pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); @@ -5538,13 +5594,14 @@ TEST_P(UsageTableTestWithMAC, OfflineBadNonce) { } // An offline license needs a valid pst. -TEST_P(UsageTableTestWithMAC, OfflineEmptyPST) { +TEST_P(OEMCryptoUsageTableTestWithMAC, OfflineEmptyPST) { Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE( - s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s.get_nonce())); + s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s.nonce())); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); OEMCryptoResult sts = OEMCrypto_LoadKeys( s.session_id(), s.message_ptr(), s.message_size(), s.signature().data(), @@ -5556,7 +5613,7 @@ TEST_P(UsageTableTestWithMAC, OfflineEmptyPST) { } // If we try to reload a license with a different PST, the attempt should fail. -TEST_P(UsageTableTestWithMAC, ReloadOfflineWrongPST) { +TEST_P(OEMCryptoUsageTableTestWithMAC, ReloadOfflineWrongPST) { std::string pst = "my_pst1"; Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); @@ -5577,7 +5634,7 @@ TEST_P(UsageTableTestWithMAC, ReloadOfflineWrongPST) { // Once a license has been deactivated, the keys can no longer be used for // decryption. However, we can still generate a usage report. -TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicense) { +TEST_P(OEMCryptoUsageTableTestWithMAC, DeactivateOfflineLicense) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); @@ -5626,7 +5683,7 @@ TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicense) { // The usage report should indicate that the keys were never used for // decryption. -TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicenseUnused) { +TEST_P(OEMCryptoUsageTableTestWithMAC, DeactivateOfflineLicenseUnused) { std::string pst = "my_pst"; Session s1; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s1, pst)); @@ -5675,14 +5732,15 @@ TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicenseUnused) { // If the PST pointers are not contained in the message, then LoadKeys should // reject the attempt. -TEST_P(UsageTableTestWithMAC, BadRange) { +TEST_P(OEMCryptoUsageTableTestWithMAC, BadRange) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); ASSERT_NO_FATAL_FAILURE(session_.CreateNewUsageEntry()); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s.nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); std::string double_message = DuplicateMessage(s.encrypted_license()); OEMCrypto_Substring wrong_pst = s.pst_substr(); @@ -5698,14 +5756,15 @@ TEST_P(UsageTableTestWithMAC, BadRange) { } // Test update usage table fails when passed a null pointer. -TEST_F(UsageTableTest, UpdateFailsWithNullPtr) { +TEST_F(OEMCryptoUsageTableTest, UpdateFailsWithNullPtr) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -5714,28 +5773,26 @@ TEST_F(UsageTableTest, UpdateFailsWithNullPtr) { size_t entry_buffer_length = s.encrypted_usage_entry().size(); vector buffer(entry_buffer_length); // Now try to pass in null pointers for the buffers. This should fail. - ASSERT_NE(OEMCrypto_SUCCESS, - OEMCrypto_UpdateUsageEntry( - s.session_id(), NULL, &header_buffer_length, - buffer.data(), &entry_buffer_length)); + ASSERT_NE( + OEMCrypto_SUCCESS, + OEMCrypto_UpdateUsageEntry(s.session_id(), nullptr, &header_buffer_length, + buffer.data(), &entry_buffer_length)); ASSERT_NE(OEMCrypto_SUCCESS, OEMCrypto_UpdateUsageEntry( s.session_id(), encrypted_usage_header_.data(), - &header_buffer_length, NULL, &entry_buffer_length)); + &header_buffer_length, nullptr, &entry_buffer_length)); } // Class used to test usage table defragmentation. -class UsageTableDefragTest : public UsageTableTest { +class OEMCryptoUsageTableDefragTest : public OEMCryptoUsageTableTest { protected: void LoadFirstLicense(Session* s, uint32_t index) { ASSERT_NO_FATAL_FAILURE(s->open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(s)); - std::string pst = "pst "; - char c1 = 'A' + (index / 26); - char c2 = 'A' + (index % 26); - pst = pst + c1 + c2; - ASSERT_NO_FATAL_FAILURE(s->FillSimpleMessage( - 0, wvoec::kControlNonceOrEntry, s->get_nonce(), pst)); + std::string pst = "pst " + std::to_string(index); + ASSERT_NO_FATAL_FAILURE(s->GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s->FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s->nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s->EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s->CreateNewUsageEntry()); ASSERT_EQ(s->usage_entry_number(), index); @@ -5779,8 +5836,8 @@ class UsageTableDefragTest : public UsageTableTest { void ShrinkHeader(uint32_t new_size, OEMCryptoResult expected_result = OEMCrypto_SUCCESS) { size_t header_buffer_length = 0; - OEMCryptoResult sts = - OEMCrypto_ShrinkUsageTableHeader(new_size, NULL, &header_buffer_length); + OEMCryptoResult sts = OEMCrypto_ShrinkUsageTableHeader( + new_size, nullptr, &header_buffer_length); if (expected_result == OEMCrypto_SUCCESS) { ASSERT_EQ(OEMCrypto_ERROR_SHORT_BUFFER, sts); } else { @@ -5797,14 +5854,14 @@ class UsageTableDefragTest : public UsageTableTest { }; // Verify that usage table entries can be moved around in the table. -TEST_F(UsageTableDefragTest, MoveUsageEntries) { +TEST_F(OEMCryptoUsageTableDefragTest, MoveUsageEntries) { const size_t ENTRY_COUNT = 10; vector sessions(ENTRY_COUNT); vector start(ENTRY_COUNT); for (size_t i = 0; i < ENTRY_COUNT; i++) { ASSERT_NO_FATAL_FAILURE(LoadFirstLicense(&sessions[i], i)) << "On license " << i << " pst=" << sessions[i].pst(); - start[i] = time(NULL); + start[i] = time(nullptr); } for (size_t i = 0; i < ENTRY_COUNT; i++) { ASSERT_NO_FATAL_FAILURE(ReloadLicense(&sessions[i], start[i])) @@ -5834,7 +5891,7 @@ TEST_F(UsageTableDefragTest, MoveUsageEntries) { // A usage table entry cannot be moved into an entry where an open session is // currently using the entry. -TEST_F(UsageTableDefragTest, MoveUsageEntriesToOpenSession) { +TEST_F(OEMCryptoUsageTableDefragTest, MoveUsageEntriesToOpenSession) { Session s0; Session s1; LoadFirstLicense(&s0, 0); @@ -5848,7 +5905,7 @@ TEST_F(UsageTableDefragTest, MoveUsageEntriesToOpenSession) { // The usage table cannot be shrunk if any session is using an entry that would // be deleted. -TEST_F(UsageTableDefragTest, ShrinkOverOpenSessions) { +TEST_F(OEMCryptoUsageTableDefragTest, ShrinkOverOpenSessions) { Session s0; Session s1; LoadFirstLicense(&s0, 0); @@ -5864,7 +5921,7 @@ TEST_F(UsageTableDefragTest, ShrinkOverOpenSessions) { } // Verify the usage table size can be increased. -TEST_F(UsageTableDefragTest, EnlargeHeader) { +TEST_F(OEMCryptoUsageTableDefragTest, EnlargeHeader) { Session s0; Session s1; LoadFirstLicense(&s0, 0); @@ -5874,7 +5931,7 @@ TEST_F(UsageTableDefragTest, EnlargeHeader) { } // A new header can only be created while no entries are in use. -TEST_F(UsageTableDefragTest, CreateNewHeaderWhileUsingOldOne) { +TEST_F(OEMCryptoUsageTableDefragTest, CreateNewHeaderWhileUsingOldOne) { Session s0; Session s1; LoadFirstLicense(&s0, 0); @@ -5887,7 +5944,7 @@ TEST_F(UsageTableDefragTest, CreateNewHeaderWhileUsingOldOne) { // Verify that a usage table entry can only be loaded into the correct index of // the table. -TEST_F(UsageTableDefragTest, ReloadUsageEntryWrongIndex) { +TEST_F(OEMCryptoUsageTableDefragTest, ReloadUsageEntryWrongIndex) { Session s0; Session s1; LoadFirstLicense(&s0, 0); @@ -5898,7 +5955,7 @@ TEST_F(UsageTableDefragTest, ReloadUsageEntryWrongIndex) { } // Verify that a usage table entry cannot be loaded if it has been altered. -TEST_F(UsageTableDefragTest, ReloadUsageEntryBadData) { +TEST_F(OEMCryptoUsageTableDefragTest, ReloadUsageEntryBadData) { Session s; LoadFirstLicense(&s, 0); ASSERT_NO_FATAL_FAILURE(s.open()); @@ -5913,13 +5970,11 @@ TEST_F(UsageTableDefragTest, ReloadUsageEntryBadData) { } static std::string MakePST(size_t n) { - std::stringstream stream; - stream << "pst-" << n; - return stream.str(); + return "pst-" + std::to_string(n); } // This verifies we can actually create two hundered usage table entries. -TEST_F(UsageTableDefragTest, TwoHundredEntries) { +TEST_F(OEMCryptoUsageTableDefragTest, TwoHundredEntries) { // OEMCrypto is required to store at least 200 entries in the usage table // header, but it is allowed to store more. This test verifies that if we keep // adding entries, the error indicates a resource limit. It then verifies @@ -5933,8 +5988,9 @@ TEST_F(UsageTableDefragTest, TwoHundredEntries) { ASSERT_NO_FATAL_FAILURE(sessions[i].open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&sessions[i])); std::string pst = MakePST(i); + ASSERT_NO_FATAL_FAILURE(sessions[i].GenerateNonce()); ASSERT_NO_FATAL_FAILURE(sessions[i].FillSimpleMessage( - 0, wvoec::kControlNonceOrEntry, sessions[i].get_nonce(), pst)); + 0, wvoec::kControlNonceOrEntry, sessions[i].nonce(), pst)); ASSERT_NO_FATAL_FAILURE(sessions[i].EncryptAndSign()); // We attempt to create a new usage table entry for this session. OEMCryptoResult status; @@ -6002,60 +6058,9 @@ TEST_F(UsageTableDefragTest, TwoHundredEntries) { } } -// This verifies that copying the old usage table to the new one works. -TEST_F(UsageTableTest, CopyOldEntries) { - // First create three old entries. We open sessions first to force creation - // of the mac keys. - - Session s1; - ASSERT_NO_FATAL_FAILURE(s1.open()); - ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); - ASSERT_NO_FATAL_FAILURE(s1.FillSimpleMessage(0, 0, 0, "pst number 1")); - ASSERT_NO_FATAL_FAILURE(s1.EncryptAndSign()); - - Test_PST_Report report1(s1.pst(), kUnused); - report1.seconds_since_license_received = 30; - report1.seconds_since_first_decrypt = 20; - report1.seconds_since_last_decrypt = 10; - ASSERT_NO_FATAL_FAILURE(s1.CreateOldEntry(report1)); - - Session s2; - ASSERT_NO_FATAL_FAILURE(s2.open()); - ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); - ASSERT_NO_FATAL_FAILURE(s2.FillSimpleMessage(0, 0, 0, "pst number 2")); - ASSERT_NO_FATAL_FAILURE(s2.EncryptAndSign()); - - Test_PST_Report report2(s2.pst(), kActive); - report2.seconds_since_license_received = 60; - report2.seconds_since_first_decrypt = 50; - report2.seconds_since_last_decrypt = 40; - ASSERT_NO_FATAL_FAILURE(s2.CreateOldEntry(report2)); - - Session s3; - ASSERT_NO_FATAL_FAILURE(s3.open()); - ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s3)); - ASSERT_NO_FATAL_FAILURE(s3.FillSimpleMessage(0, 0, 0, "pst number 3")); - ASSERT_NO_FATAL_FAILURE(s3.EncryptAndSign()); - - Test_PST_Report report3(s3.pst(), kInactive); - report3.seconds_since_license_received = 90; - report3.seconds_since_first_decrypt = 80; - report3.seconds_since_last_decrypt = 70; - ASSERT_NO_FATAL_FAILURE(s3.CreateOldEntry(report3)); - - // Now we copy and verify each one. The order is changed to make - // sure there are no order dependecies. - ASSERT_NO_FATAL_FAILURE( - s2.CopyAndVerifyOldEntry(report2, &encrypted_usage_header_)); - ASSERT_NO_FATAL_FAILURE( - s1.CopyAndVerifyOldEntry(report1, &encrypted_usage_header_)); - ASSERT_NO_FATAL_FAILURE( - s3.CopyAndVerifyOldEntry(report3, &encrypted_usage_header_)); -} - // This verifies that the usage table header can be loaded if the generation // number is off by one, but not off by two. -TEST_F(UsageTableTest, ReloadUsageTableWithSkew) { +TEST_F(OEMCryptoUsageTableTest, ReloadUsageTableWithSkew) { // This also tests a few other error conditions with usage table headers. std::string pst = "my_pst"; Session s; @@ -6078,11 +6083,10 @@ TEST_F(UsageTableTest, ReloadUsageTableWithSkew) { ShutDown(); Restart(); // Null pointer generates error. - ASSERT_NE(OEMCrypto_SUCCESS, - OEMCrypto_LoadUsageTableHeader(NULL, - old_usage_header_2_.size())); + ASSERT_NE(OEMCrypto_SUCCESS, OEMCrypto_LoadUsageTableHeader( + nullptr, old_usage_header_2_.size())); ASSERT_NO_FATAL_FAILURE(s.open()); - // Cannot load an entry with if header didn't load. + // Cannot load an entry if header didn't load. ASSERT_EQ( OEMCrypto_ERROR_UNKNOWN_FAILURE, OEMCrypto_LoadUsageEntry(s.session_id(), s.usage_entry_number(), @@ -6098,7 +6102,7 @@ TEST_F(UsageTableTest, ReloadUsageTableWithSkew) { OEMCrypto_LoadUsageTableHeader(bad_header.data(), bad_header.size())); ASSERT_NO_FATAL_FAILURE(s.open()); - // Cannot load an entry with if header didn't load. + // Cannot load an entry if header didn't load. ASSERT_EQ( OEMCrypto_ERROR_UNKNOWN_FAILURE, OEMCrypto_LoadUsageEntry(s.session_id(), s.usage_entry_number(), @@ -6112,7 +6116,7 @@ TEST_F(UsageTableTest, ReloadUsageTableWithSkew) { OEMCrypto_LoadUsageTableHeader(old_usage_header_2_.data(), old_usage_header_2_.size())); ASSERT_NO_FATAL_FAILURE(s.open()); - // Cannot load an entry with if header didn't load. + // Cannot load an entry if header didn't load. ASSERT_NE( OEMCrypto_SUCCESS, OEMCrypto_LoadUsageEntry(s.session_id(), s.usage_entry_number(), @@ -6139,13 +6143,14 @@ TEST_F(UsageTableTest, ReloadUsageTableWithSkew) { } // A usage report with the wrong pst should fail. -TEST_F(UsageTableTest, GenerateReportWrongPST) { +TEST_F(OEMCryptoUsageTableTest, GenerateReportWrongPST) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); - ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceOrEntry, s.get_nonce(), pst)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); + ASSERT_NO_FATAL_FAILURE( + s.FillSimpleMessage(0, wvoec::kControlNonceOrEntry, s.nonce(), pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); @@ -6155,7 +6160,7 @@ TEST_F(UsageTableTest, GenerateReportWrongPST) { } // Test usage table timing. -TEST_F(UsageTableTest, TimingTest) { +TEST_F(OEMCryptoUsageTableTest, TimingTest) { std::string pst1 = "my_pst_1"; std::string pst2 = "my_pst_2"; std::string pst3 = "my_pst_3"; @@ -6163,29 +6168,29 @@ TEST_F(UsageTableTest, TimingTest) { Session s2; Session s3; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s1, pst1)); - time_t loaded1 = time(NULL); + time_t loaded1 = time(nullptr); ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s2, pst2)); - time_t loaded2 = time(NULL); + time_t loaded2 = time(nullptr); ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s3, pst3)); - time_t loaded3 = time(NULL); + time_t loaded3 = time(nullptr); sleep(kLongSleep); ASSERT_NO_FATAL_FAILURE(s1.open()); ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); ASSERT_NO_FATAL_FAILURE(s1.LoadTestKeys(pst1, new_mac_keys_)); - time_t first_decrypt1 = time(NULL); + time_t first_decrypt1 = time(nullptr); ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s2.open()); ASSERT_NO_FATAL_FAILURE(s2.ReloadUsageEntry()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); ASSERT_NO_FATAL_FAILURE(s2.LoadTestKeys(pst2, new_mac_keys_)); - time_t first_decrypt2 = time(NULL); + time_t first_decrypt2 = time(nullptr); ASSERT_NO_FATAL_FAILURE(s2.TestDecryptCTR()); sleep(kLongSleep); - time_t second_decrypt = time(NULL); + time_t second_decrypt = time(nullptr); ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s2.TestDecryptCTR()); @@ -6207,7 +6212,7 @@ TEST_F(UsageTableTest, TimingTest) { // After a reboot, we should be able to reload keys, and generate reports. sleep(kLongSleep); - time_t third_decrypt = time(NULL); + time_t third_decrypt = time(nullptr); ASSERT_NO_FATAL_FAILURE(s2.open()); ASSERT_NO_FATAL_FAILURE(s2.ReloadUsageEntry()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s2)); @@ -6242,18 +6247,19 @@ TEST_F(UsageTableTest, TimingTest) { // is 10 seconds. This acceptable error is called slop. This test needs to run // long enough that the reported values are distinct, even after accounting for // this slop. -TEST_F(UsageTableTest, VerifyUsageTimes) { +TEST_F(OEMCryptoUsageTableTest, VerifyUsageTimes) { std::string pst = "my_pst"; Session s; ASSERT_NO_FATAL_FAILURE(s.open()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s)); + ASSERT_NO_FATAL_FAILURE(s.GenerateNonce()); ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage( - 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, - s.get_nonce(), pst)); + 0, wvoec::kControlNonceEnabled | wvoec::kControlNonceRequired, s.nonce(), + pst)); ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign()); ASSERT_NO_FATAL_FAILURE(s.CreateNewUsageEntry()); ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys(pst, new_mac_keys_)); - time_t load_time = time(NULL); + time_t load_time = time(nullptr); ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s.GenerateVerifyReport(pst, kUnused)); @@ -6278,7 +6284,7 @@ TEST_F(UsageTableTest, VerifyUsageTimes) { time_t dot_time = kDotIntervalInSeconds; time_t playback_time = 0; - time_t start_time = time(NULL); + time_t start_time = time(nullptr); do { ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); @@ -6286,7 +6292,7 @@ TEST_F(UsageTableTest, VerifyUsageTimes) { load_time, start_time, 0)); // last decrypt = now. - playback_time = time(NULL) - start_time; + playback_time = time(nullptr) - start_time; ASSERT_LE(0, playback_time); if (playback_time >= dot_time) { cout << "."; @@ -6338,29 +6344,25 @@ TEST_F(UsageTableTest, VerifyUsageTimes) { // We don't test roll-forward protection or instances where the user rolls back // the time to the last decrypt call since this requires hardware-secure clocks // to guarantee. -TEST_F(UsageTableTest, TimeRollbackPrevention) { +TEST_F(OEMCryptoUsageTableTest, TimeRollbackPrevention) { std::string pst = "my_pst"; Session s1; cout << "This test temporarily rolls back the system time in order to verify " << "that the usage report accounts for the change. It then rolls " << "the time back forward to the absolute time." << endl; - // We use clock_gettime(CLOCK_REALTIME, ...) over time(...) so we can easily - // set the time using clock_settime. - timespec current_time; - ASSERT_EQ(0, clock_gettime(CLOCK_REALTIME, ¤t_time)); - time_t loaded = current_time.tv_sec; + std::chrono::system_clock wall_clock; + std::chrono::steady_clock monotonic_clock; + const auto loaded = wall_clock.now(); ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s1, pst)); ASSERT_NO_FATAL_FAILURE(s1.open()); ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); ASSERT_NO_FATAL_FAILURE(s1.LoadTestKeys(pst, new_mac_keys_)); - ASSERT_EQ(0, clock_gettime(CLOCK_REALTIME, ¤t_time)); - time_t first_decrypt = current_time.tv_sec; + const auto first_decrypt = wall_clock.now(); // Monotonic clock can't be changed. We use this since system clock will be // unreliable. - ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, ¤t_time)); - time_t first_decrypt_monotonic = current_time.tv_sec; + const auto first_decrypt_monotonic = monotonic_clock.now(); ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s1.close()); @@ -6376,20 +6378,17 @@ TEST_F(UsageTableTest, TimeRollbackPrevention) { ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s1.close()); - ASSERT_EQ(0, clock_gettime(CLOCK_REALTIME, ¤t_time)); // Rollback the wall clock time. cout << "Rolling the system time back..." << endl; - timeval current_time_of_day = {}; - current_time_of_day.tv_sec = current_time.tv_sec - kLongDuration * 10; - ASSERT_EQ(0, settimeofday(¤t_time_of_day, NULL)); + ASSERT_NO_FATAL_FAILURE(SetWallTimeDelta( + -static_cast(kLongDuration) * 10)); // Try to playback again. ASSERT_NO_FATAL_FAILURE(s1.open()); ASSERT_NO_FATAL_FAILURE(s1.ReloadUsageEntry()); ASSERT_NO_FATAL_FAILURE(InstallTestSessionKeys(&s1)); ASSERT_NO_FATAL_FAILURE(s1.LoadTestKeys(pst, new_mac_keys_)); - ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, ¤t_time)); - time_t third_decrypt = current_time.tv_sec; + const auto third_decrypt_monotonic = monotonic_clock.now(); ASSERT_NO_FATAL_FAILURE(s1.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s1.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s1.GenerateReport(pst)); @@ -6397,23 +6396,23 @@ TEST_F(UsageTableTest, TimeRollbackPrevention) { // Restore wall clock to its original position to verify that OEMCrypto does // not report negative times. - ASSERT_EQ(0, clock_gettime(CLOCK_MONOTONIC, ¤t_time)); - current_time_of_day.tv_sec = - first_decrypt + current_time.tv_sec - first_decrypt_monotonic; + const auto test_duration = third_decrypt_monotonic - first_decrypt_monotonic; cout << "Rolling the system time forward to the absolute time..." << endl; - ASSERT_EQ(0, settimeofday(¤t_time_of_day, NULL)); + ASSERT_NO_FATAL_FAILURE(SetWallTimeDelta( + test_duration / std::chrono::seconds(1))); // Need to update time created since the verification checks the time of PST // report creation. - expected.time_created = current_time_of_day.tv_sec; + expected.time_created = UnixTime(wall_clock.now()); + const auto end_time = first_decrypt + test_duration; ASSERT_NO_FATAL_FAILURE( - s1.VerifyReport(expected, loaded, first_decrypt, - first_decrypt + third_decrypt - first_decrypt_monotonic)); + s1.VerifyReport(expected, UnixTime(loaded), UnixTime(first_decrypt), + UnixTime(end_time))); ASSERT_NO_FATAL_FAILURE(s1.close()); } // Verify that a large PST can be used with usage table entries. -TEST_F(UsageTableTest, PSTLargeBuffer) { +TEST_F(OEMCryptoUsageTableTest, PSTLargeBuffer) { std::string pst(kMaxPSTLength, 'a'); // A large PST. Session s; ASSERT_NO_FATAL_FAILURE(LoadOfflineLicense(s, pst)); @@ -6454,6 +6453,6 @@ TEST_F(UsageTableTest, PSTLargeBuffer) { EXPECT_EQ(kInactiveUsed, s3.pst_report().status()); } -INSTANTIATE_TEST_CASE_P(TestUsageTables, UsageTableTestWithMAC, +INSTANTIATE_TEST_CASE_P(TestUsageTables, OEMCryptoUsageTableTestWithMAC, Values(true, false)); // With and without new_mac_keys. } // namespace wvoec diff --git a/oemcrypto/test/oemcrypto_test_android.cpp b/oemcrypto/test/oemcrypto_test_android.cpp index e0739ea..1a4de9b 100644 --- a/oemcrypto/test/oemcrypto_test_android.cpp +++ b/oemcrypto/test/oemcrypto_test_android.cpp @@ -61,37 +61,40 @@ TEST_F(OEMCryptoAndroidLMPTest, ValidKeyboxTest) { TEST_F(OEMCryptoAndroidLMPTest, RewrapDeviceRSAKeyImplemented) { if (OEMCrypto_Keybox == OEMCrypto_GetProvisioningMethod()) { - ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_RewrapDeviceRSAKey(0, NULL, 0, NULL, 0, NULL, NULL, 0, - NULL, NULL, NULL)); + ASSERT_NE( + OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_RewrapDeviceRSAKey(0, nullptr, 0, nullptr, 0, nullptr, + nullptr, 0, nullptr, nullptr, nullptr)); } else { ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_RewrapDeviceRSAKey30(0, NULL, NULL, 0, NULL, 0, NULL, - NULL, NULL)); + OEMCrypto_RewrapDeviceRSAKey30(0, nullptr, nullptr, 0, nullptr, 0, + nullptr, nullptr, nullptr)); } } // This verifies that the device can load a DRM Certificate. TEST_F(OEMCryptoAndroidLMPTest, RSASignatureImplemented) { - ASSERT_NE( - OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_GenerateRSASignature(0, NULL, 0, NULL, NULL, kSign_RSASSA_PSS)); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_GenerateRSASignature(0, nullptr, 0, nullptr, nullptr, + kSign_RSASSA_PSS)); } // The Generic Crypto API functions are required for Android. TEST_F(OEMCryptoAndroidLMPTest, GenericCryptoImplemented) { - ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_Generic_Encrypt(0, NULL, 0, NULL, - OEMCrypto_AES_CBC_128_NO_PADDING, NULL)); - ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_Generic_Decrypt(0, NULL, 0, NULL, - OEMCrypto_AES_CBC_128_NO_PADDING, NULL)); ASSERT_NE( OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_Generic_Sign(0, NULL, 0, OEMCrypto_HMAC_SHA256, NULL, NULL)); + OEMCrypto_Generic_Encrypt(0, nullptr, 0, nullptr, + OEMCrypto_AES_CBC_128_NO_PADDING, nullptr)); ASSERT_NE( OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_Generic_Verify(0, NULL, 0, OEMCrypto_HMAC_SHA256, NULL, 0)); + OEMCrypto_Generic_Decrypt(0, nullptr, 0, nullptr, + OEMCrypto_AES_CBC_128_NO_PADDING, nullptr)); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_Generic_Sign(0, nullptr, 0, OEMCrypto_HMAC_SHA256, + nullptr, nullptr)); + ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, + OEMCrypto_Generic_Verify(0, nullptr, 0, OEMCrypto_HMAC_SHA256, + nullptr, 0)); } // Android requires support of usage table. The usage table is used for Secure @@ -134,15 +137,15 @@ TEST_F(OEMCryptoAndroidMNCTest, LoadsTestKeyboxImplemented) { // Android requires implementation of these functions. TEST_F(OEMCryptoAndroidMNCTest, NumberOfSessionsImplemented) { ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_GetNumberOfOpenSessions(NULL)); + OEMCrypto_GetNumberOfOpenSessions(nullptr)); ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_GetMaxNumberOfSessions(NULL)); + OEMCrypto_GetMaxNumberOfSessions(nullptr)); } // Android requires implementation of these functions. TEST_F(OEMCryptoAndroidMNCTest, QueryKeyControlImplemented) { ASSERT_NE(OEMCrypto_ERROR_NOT_IMPLEMENTED, - OEMCrypto_QueryKeyControl(0, NULL, 0, NULL, NULL)); + OEMCrypto_QueryKeyControl(0, nullptr, 0, nullptr, nullptr)); } // These tests are required for N Android devices. diff --git a/oemcrypto/test/oemcrypto_test_main.cpp b/oemcrypto/test/oemcrypto_test_main.cpp index baf839b..2b5f40c 100644 --- a/oemcrypto/test/oemcrypto_test_main.cpp +++ b/oemcrypto/test/oemcrypto_test_main.cpp @@ -17,22 +17,27 @@ static void acknowledge_cast() { // Also, the test filter is updated based on the feature list. int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); - wvcdm::g_cutoff = wvcdm::LOG_INFO; bool is_cast_receiver = false; bool force_load_test_keybox = false; bool filter_tests = true; - for (int i = 0; i < argc; i++) { - if (!strcmp(argv[i], "--cast")) { + int verbosity = 0; + // Skip the first element, which is the program name. + const std::vector args(argv + 1, argv + argc); + for (const std::string& arg : args) { + if (arg == "--verbose" || arg == "-v") { + ++verbosity; + } else if (arg == "--cast") { acknowledge_cast(); is_cast_receiver = true; } - if (!strcmp(argv[i], "--force_load_test_keybox")) { + if (arg == "--force_load_test_keybox") { force_load_test_keybox = true; } - if (!strcmp(argv[i], "--no_filter")) { + if (arg == "--no_filter") { filter_tests = false; } } + wvcdm::g_cutoff = static_cast(verbosity); wvoec::global_features.Initialize(is_cast_receiver, force_load_test_keybox); // If the user requests --no_filter, we don't change the filter, otherwise, we // filter out features that are not supported. diff --git a/oemcrypto/test/oemcrypto_unittests.gyp b/oemcrypto/test/oemcrypto_unittests.gyp deleted file mode 100644 index 714aa93..0000000 --- a/oemcrypto/test/oemcrypto_unittests.gyp +++ /dev/null @@ -1,38 +0,0 @@ -# This is a gyp file for building the OEMCrypto unit tests with the reference -# code from the stand-alone source code. -{ - 'variables': { - # Override the variables below for the location of various gyp files. - # Alternatively, set the environment variable CDM_DIR to point to a recent - # version of the source CDM. - 'boringssl_dependency%': ' + +namespace wvcdm { + +// Returns the size of a fixed-length array. +template +constexpr size_t ArraySize(const T (&)[N]) { + return N; +} + +} // namespace wvcdm + +#endif // WVCDM_UTIL_ARRAYSIZE_H_ diff --git a/util/include/cdm_random.h b/util/include/cdm_random.h new file mode 100644 index 0000000..dd3767c --- /dev/null +++ b/util/include/cdm_random.h @@ -0,0 +1,109 @@ +// Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. +#ifndef WVCDM_CORE_CDM_RANDOM_H_ +#define WVCDM_CORE_CDM_RANDOM_H_ + +#include +#include +#include + +namespace wvcdm { + +// CdmRandomGenerator is a thread safe, pseudo-random number generator. +// It's purpose is to simplified interface for C++11's library. +// Some of the methods use a "device specific" random seed, if the +// compiler/device does not support device specific randomizers, then the +// actual value supplied may not be random. +class CdmRandomGenerator { + public: + // The maximum number of bytes that can be generated at once for + // `RandomData()`. + static constexpr size_t kMaxRandomDataLength = 8192; // 8 kB + + // Initializes the pseudo-random generator with a value from a device + // specific random number generator. + CdmRandomGenerator(); + + // Initializes the pseudo-random generator with the specified seed value. + explicit CdmRandomGenerator(unsigned int seed) : generator_(seed) {} + + // All of these methods are thread-safe. + + // Seeds the pseudo-random generator with a value from a device specific + // random number generator. + void Seed(); + + // Seeds the pseudo-random generator with the specified seed value. + // This is somewhat similar to `srand()` from the C standard library; + // except that the sequence generated from successive calls to `Rand()` + // will not necessarily be the same as they would be from the + // standard library `rand()`. This is due to the underlying pseudo-random + // generator that is used. + void Seed(unsigned int seed); + + // Returns a pseudo-random integer. + // This is similar to `rand()` from the C standard library. The integer + // returned is in the range of [0, RAND_MAX]. + int Rand(); + + // Allows for RNG to be callable, this is to make it similar to the + // C++11 generator interfaces. + int operator()() { return Rand(); } + + // Returns a pseudo-random integer within the provided inclusive range. + uint64_t RandomInRange(uint64_t lower, uint64_t upper); + uint64_t RandomInRange(uint64_t upper) { return RandomInRange(0, upper); } + + // Returns a byte string containing randomized bytes of the specified + // length. + // If |length| is greater than |CdmRandomGenerator::kMaxRandomDataLength|, + // then an error is logged and an empty string is returned. + std::string RandomData(size_t length); + + // Random true/false using Bernoulli distribution of equal probability. + bool RandomBool(); + + private: + // Mutex is used to lock the object, and allowing it to be used + // concurrently in different threads. + std::mutex generator_lock_; + + // The `default_random_engine` depends on the compiler used and + // potentially its version. This is important to know if you need to + // create reproducible tests between platforms. + std::default_random_engine generator_; +}; + +// Provides a static interface to a process-wide instance of +// CdmRandomGenerator. +class CdmRandom { + public: + static int Rand() { return GetInstance()->Rand(); } + static uint64_t RandomInRange(uint64_t lower, uint64_t upper) { + return GetInstance()->RandomInRange(lower, upper); + } + static uint64_t RandomInRange(uint64_t upper) { + return GetInstance()->RandomInRange(upper); + } + + static std::string RandomData(size_t length) { + return GetInstance()->RandomData(length); + } + + static bool RandomBool() { return GetInstance()->RandomBool(); } + + private: + // These are intended to be used by tests if needed. + static void Seed(unsigned int seed) { GetInstance()->Seed(seed); } + static void Seed() { GetInstance()->Seed(); } + + // Returns the process-wide instance of CdmRandomGenerator. + // It the global instance has not yet been created, then a new instance + // is created using a device-specific random seed. + static CdmRandomGenerator* GetInstance(); +}; + +} // namespace wvcdm + +#endif // WVCDM_CORE_CDM_RANDOM_H_ diff --git a/util/include/disallow_copy_and_assign.h b/util/include/disallow_copy_and_assign.h index 0aefbc3..abc1048 100644 --- a/util/include/disallow_copy_and_assign.h +++ b/util/include/disallow_copy_and_assign.h @@ -11,7 +11,6 @@ namespace wvcdm { TypeName(const TypeName&); \ void operator=(const TypeName&) - } // namespace wvcdm #endif // WVCDM_UTIL_DISALLOW_COPY_AND_ASSIGN_H_ diff --git a/util/include/log.h b/util/include/log.h index d79ff00..37706fa 100644 --- a/util/include/log.h +++ b/util/include/log.h @@ -33,22 +33,21 @@ extern LogPriority g_cutoff; // unit tests. CORE_UTIL_EXPORT void InitLogging(); -CORE_UTIL_EXPORT void Log( - const char* file, const char* function, int line, LogPriority level, - const char* fmt, ...); +CORE_UTIL_EXPORT void Log(const char* file, const char* function, int line, + LogPriority level, const char* fmt, ...); // Log APIs #ifndef LOGE -#define LOGE(...) Log(__FILE__, __func__, __LINE__, \ - wvcdm::LOG_ERROR, __VA_ARGS__) -#define LOGW(...) Log(__FILE__, __func__, __LINE__, \ - wvcdm::LOG_WARN, __VA_ARGS__) -#define LOGI(...) Log(__FILE__, __func__, __LINE__, \ - wvcdm::LOG_INFO, __VA_ARGS__) -#define LOGD(...) Log(__FILE__, __func__, __LINE__, \ - wvcdm::LOG_DEBUG, __VA_ARGS__) -#define LOGV(...) Log(__FILE__, __func__, __LINE__, \ - wvcdm::LOG_VERBOSE, __VA_ARGS__) +# define LOGE(...) \ + Log(__FILE__, __func__, __LINE__, wvcdm::LOG_ERROR, __VA_ARGS__) +# define LOGW(...) \ + Log(__FILE__, __func__, __LINE__, wvcdm::LOG_WARN, __VA_ARGS__) +# define LOGI(...) \ + Log(__FILE__, __func__, __LINE__, wvcdm::LOG_INFO, __VA_ARGS__) +# define LOGD(...) \ + Log(__FILE__, __func__, __LINE__, wvcdm::LOG_DEBUG, __VA_ARGS__) +# define LOGV(...) \ + Log(__FILE__, __func__, __LINE__, wvcdm::LOG_VERBOSE, __VA_ARGS__) #endif } // namespace wvcdm diff --git a/util/include/platform.h b/util/include/platform.h index ad2325d..4168e44 100644 --- a/util/include/platform.h +++ b/util/include/platform.h @@ -10,24 +10,22 @@ #include "util_common.h" #ifdef _WIN32 -# include -# include -# include // For htonl and ntohl. -# define __PRETTY_FUNCTION__ __FUNCTION__ -# undef NO_ERROR -# undef GetCurrentTime -# undef DeleteFile +# include +# include // For htonl and ntohl. +# include +# define __PRETTY_FUNCTION__ __FUNCTION__ +# undef NO_ERROR +# undef GetCurrentTime +# undef DeleteFile using ssize_t = SSIZE_T; -inline void sleep(int seconds) { - Sleep(seconds * 1000); -} +inline void sleep(int seconds) { Sleep(seconds * 1000); } CORE_UTIL_EXPORT int setenv(const char* key, const char* value, int overwrite); #else -# include -# include -# include +# include +# include +# include #endif #endif // WVCDM_UTIL_PLATFORM_H_ diff --git a/util/include/string_conversions.h b/util/include/string_conversions.h index 3bb73dc..cb6c9ee 100644 --- a/util/include/string_conversions.h +++ b/util/include/string_conversions.h @@ -7,6 +7,7 @@ #include #include + #include #include @@ -35,6 +36,8 @@ CORE_UTIL_EXPORT std::string IntToString(int value); CORE_UTIL_EXPORT int64_t htonll64(int64_t x); CORE_UTIL_EXPORT inline int64_t ntohll64(int64_t x) { return htonll64(x); } CORE_UTIL_EXPORT std::string BytesToString(const uint8_t* bytes, unsigned size); +// Encode unsigned integer into a big endian formatted string +CORE_UTIL_EXPORT std::string EncodeUint32(unsigned int u); } // namespace wvcdm diff --git a/util/include/util_common.h b/util/include/util_common.h index 9a1f309..100e138 100644 --- a/util/include/util_common.h +++ b/util/include/util_common.h @@ -6,17 +6,17 @@ #define WVCDM_UTIL_UTIL_COMMON_H_ #ifdef _WIN32 -# ifdef CORE_UTIL_IMPLEMENTATION -# define CORE_UTIL_EXPORT __declspec(dllexport) -# else -# define CORE_UTIL_EXPORT __declspec(dllimport) -# endif +# ifdef CORE_UTIL_IMPLEMENTATION +# define CORE_UTIL_EXPORT __declspec(dllexport) +# else +# define CORE_UTIL_EXPORT __declspec(dllimport) +# endif #else -# ifdef CORE_UTIL_IMPLEMENTATION -# define CORE_UTIL_EXPORT __attribute__((visibility("default"))) -# else -# define CORE_UTIL_EXPORT -# endif +# ifdef CORE_UTIL_IMPLEMENTATION +# define CORE_UTIL_EXPORT __attribute__((visibility("default"))) +# else +# define CORE_UTIL_EXPORT +# endif #endif #endif // WVCDM_UTIL_UTIL_COMMON_H_ diff --git a/util/src/cdm_random.cpp b/util/src/cdm_random.cpp new file mode 100644 index 0000000..591ac5f --- /dev/null +++ b/util/src/cdm_random.cpp @@ -0,0 +1,107 @@ +// Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + +#include "cdm_random.h" + +#include + +#include + +#include "log.h" + +// This type alias is for convenience. +using CdmRandomLock = std::unique_lock; + +namespace wvcdm { + +namespace { +// More information about C++11's random number generators can be found +// from the introductory paper https://isocpp.org/files/papers/n3551.pdf + +// Attemps to get random data in a device specific manner. If the device +// does not support true random data, then a pseudo-random sequence might +// be used instead. The exact behaviour depends on the compiler and +// platform combination. +unsigned int GetDeviceRandomSeed() { + static std::random_device rdev; + static std::mutex rdev_mutex; + CdmRandomLock rdev_lock(rdev_mutex); + return rdev(); +} + +} // namespace + +// CdmRandomGenerator. + +CdmRandomGenerator::CdmRandomGenerator() : generator_(GetDeviceRandomSeed()) {} + +void CdmRandomGenerator::Seed() { + CdmRandomLock lock(generator_lock_); + generator_.seed(GetDeviceRandomSeed()); +} + +void CdmRandomGenerator::Seed(unsigned int s) { + CdmRandomLock lock(generator_lock_); + generator_.seed(s); +} + +int CdmRandomGenerator::Rand() { + CdmRandomLock lock(generator_lock_); + std::uniform_int_distribution dist(0, RAND_MAX); + return dist(generator_); +} + +uint64_t CdmRandomGenerator::RandomInRange(uint64_t lower, uint64_t upper) { + if (lower == upper) { + return lower; + } + CdmRandomLock lock(generator_lock_); + if (lower > upper) { + LOGW( + "Lower bound is larger than upper bound, swapping bounds: " + "lower = %llu, upper = %llu", + // Casting to insure this will work on 32-bit systems. + static_cast(lower), + static_cast(upper)); + std::swap(lower, upper); + } + std::uniform_int_distribution dist(lower, upper); + return dist(generator_); +} + +std::string CdmRandomGenerator::RandomData(size_t length) { + if (length > kMaxRandomDataLength) { + LOGE("Maximum random data length exceeded: length = %zu, max_length = %zu", + length, kMaxRandomDataLength); + return std::string(); + } + CdmRandomLock lock(generator_lock_); + std::uniform_int_distribution dist; // Range of [0, 255]. + std::string random_data(length, '\0'); + std::generate(random_data.begin(), random_data.end(), + [&]() { return dist(generator_); }); + return random_data; +} + +bool CdmRandomGenerator::RandomBool() { + CdmRandomLock lock(generator_lock_); + std::bernoulli_distribution dist; // 50/50. + return dist(generator_); +} + +// CdmRandom. + +// static +CdmRandomGenerator* CdmRandom::GetInstance() { + static std::mutex g_instance_lock; + static CdmRandomGenerator* g_instance = nullptr; + CdmRandomLock lock(g_instance_lock); + if (g_instance == nullptr) { + LOGV("Initalizing CDM random number generator"); + g_instance = new CdmRandomGenerator(GetDeviceRandomSeed()); + } + return g_instance; +} + +} // namespace wvcdm diff --git a/util/src/dllmain.cpp b/util/src/dllmain.cpp index f559b10..8edea4a 100644 --- a/util/src/dllmain.cpp +++ b/util/src/dllmain.cpp @@ -6,7 +6,6 @@ // #include -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, - LPVOID lpReserved) { +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { return TRUE; } \ No newline at end of file diff --git a/util/src/string_conversions.cpp b/util/src/string_conversions.cpp index db92f08..828b92f 100644 --- a/util/src/string_conversions.cpp +++ b/util/src/string_conversions.cpp @@ -8,6 +8,7 @@ #include #include #include + #include #include @@ -24,12 +25,11 @@ static const char kBase64Codes[] = // Gets the given (zero-indexed) bits [a, b) of |in|. #define GET_BITS(in, a, b) GET_LOW_BITS((in) >> (a), (b) - (a)) // Calculates a/b using round-up division (only works for positive numbers). -#define CEIL_DIVIDE(a, b) ((((a) - 1) / (b)) + 1) +#define CEIL_DIVIDE(a, b) ((((a)-1) / (b)) + 1) int DecodeBase64Char(char c) { const char* it = strchr(kBase64Codes, c); - if (it == NULL) - return -1; + if (it == nullptr) return -1; return it - kBase64Codes; } @@ -121,8 +121,8 @@ std::string Base64Encode(const std::vector& bin_input) { if (i % 3 == 2) { result[out_index++] = kBase64Codes[GET_BITS(temp, 18, 24)]; result[out_index++] = kBase64Codes[GET_BITS(temp, 12, 18)]; - result[out_index++] = kBase64Codes[GET_BITS(temp, 6, 12)]; - result[out_index++] = kBase64Codes[GET_BITS(temp, 0, 6)]; + result[out_index++] = kBase64Codes[GET_BITS(temp, 6, 12)]; + result[out_index++] = kBase64Codes[GET_BITS(temp, 0, 6)]; temp = 0; } } @@ -135,7 +135,7 @@ std::string Base64Encode(const std::vector& bin_input) { } else if (bin_input.size() % 3 == 2) { result[out_index++] = kBase64Codes[GET_BITS(temp, 18, 24)]; result[out_index++] = kBase64Codes[GET_BITS(temp, 12, 18)]; - result[out_index++] = kBase64Codes[GET_BITS(temp, 6, 12)]; + result[out_index++] = kBase64Codes[GET_BITS(temp, 6, 12)]; result[out_index++] = '='; } @@ -208,8 +208,8 @@ std::vector Base64Decode(const std::string& b64_input) { if (i % 4 == 3) { result[out_index++] = GET_BITS(temp, 16, 24); - result[out_index++] = GET_BITS(temp, 8, 16); - result[out_index++] = GET_BITS(temp, 0, 8); + result[out_index++] = GET_BITS(temp, 8, 16); + result[out_index++] = GET_BITS(temp, 0, 8); temp = 0; } } @@ -223,7 +223,7 @@ std::vector Base64Decode(const std::string& b64_input) { break; case 3: result[out_index++] = GET_BITS(temp, 16, 24); - result[out_index++] = GET_BITS(temp, 8, 16); + result[out_index++] = GET_BITS(temp, 8, 16); break; } result.resize(out_index); @@ -298,4 +298,14 @@ std::string BytesToString(const uint8_t* bytes, unsigned size) { return std::string(char_bytes, char_bytes + size); } +// Encode unsigned integer into a big endian formatted string +std::string EncodeUint32(unsigned int u) { + std::string s; + s.append(1, (u >> 24) & 0xFF); + s.append(1, (u >> 16) & 0xFF); + s.append(1, (u >> 8) & 0xFF); + s.append(1, (u >> 0) & 0xFF); + return s; +} + } // namespace wvcdm diff --git a/util/test/cdm_random_unittest.cpp b/util/test/cdm_random_unittest.cpp new file mode 100644 index 0000000..22706e5 --- /dev/null +++ b/util/test/cdm_random_unittest.cpp @@ -0,0 +1,147 @@ +// Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine Master +// License Agreement. + +#include + +#include +#include +#include +#include + +#include +#include + +#include "cdm_random.h" + +namespace wvcdm { + +namespace { +// Random data vector lengths. +constexpr size_t kVectorLength = 1024; +constexpr size_t kMaxRandomDataLength = + CdmRandomGenerator::kMaxRandomDataLength; +constexpr size_t kAboveMaxRandomDataLength = std::numeric_limits::max(); + +constexpr size_t kRandomTrialCount = 100; +constexpr size_t kThreadCount = 16; +constexpr unsigned int kSeeds[] = {0, 1337, 1565904109, 776964657}; + +class CdmRandomGeneratorTest : public testing::TestWithParam {}; +} // namespace + +TEST_P(CdmRandomGeneratorTest, AllMethods) { + const unsigned int seed = GetParam(); + CdmRandomGenerator rng; + rng.Seed(); + rng.Seed(seed); + + rng.Rand(); + rng(); + + rng.RandomInRange(1234, 1000000); + rng.RandomInRange(1000000); + + rng.RandomData(kVectorLength); + + rng.RandomBool(); +} + +TEST_P(CdmRandomGeneratorTest, RandomInRange) { + const unsigned int seed = GetParam(); + CdmRandomGenerator rng(seed); + + for (size_t i = 0; i < kRandomTrialCount; ++i) { + const int rand_int = rng.Rand(); + EXPECT_GE(rand_int, 0); + EXPECT_LE(rand_int, RAND_MAX); + } + + // Range size of 1. + const uint64_t rand_u64_1 = rng.RandomInRange(100, 100); + EXPECT_EQ(rand_u64_1, 100ul); + + // Range size of 2. + const uint64_t rand_u64_2 = rng.RandomInRange(1234, 1235); + EXPECT_GE(rand_u64_2, 1234ul); + EXPECT_LE(rand_u64_2, 1235ul); + + // Small range. + const uint64_t rand_u64_3 = rng.RandomInRange(10); + EXPECT_LE(rand_u64_3, 10ul); + + // Max range, mainly checking that nothing crashes. + rng.RandomInRange(0, std::numeric_limits::max()); + + // Invalid range representation. Should swap the bounds. + const uint64_t rand_u64_4 = rng.RandomInRange(1235, 1234); + EXPECT_GE(rand_u64_4, 1234ul); + EXPECT_LE(rand_u64_4, 1235ul); +} + +TEST_P(CdmRandomGeneratorTest, RandomDataLength) { + const unsigned int seed = GetParam(); + CdmRandomGenerator rng(seed); + + const std::string empty_data = rng.RandomData(0); + EXPECT_EQ(empty_data.size(), 0ul); + + const std::string data = rng.RandomData(kVectorLength); + EXPECT_EQ(data.size(), kVectorLength); + + const std::string max_data = rng.RandomData(kMaxRandomDataLength); + EXPECT_EQ(max_data.size(), kMaxRandomDataLength); + + // Requesting data above the maximum length will result in an error, + // returning an empty string. + const std::string error_data = rng.RandomData(kAboveMaxRandomDataLength); + EXPECT_EQ(error_data.size(), 0ul); +} + +TEST_P(CdmRandomGeneratorTest, Reproducibility) { + const unsigned int seed = GetParam(); + CdmRandomGenerator rng(seed); + const std::string random_data_1 = rng.RandomData(kVectorLength); + // Reset generator. + rng.Seed(seed); + const std::string random_data_2 = rng.RandomData(kVectorLength); + EXPECT_EQ(random_data_1, random_data_2); +} + +TEST_P(CdmRandomGeneratorTest, ThreadSafety) { + const unsigned int seed = GetParam(); + CdmRandomGenerator rng(seed); + bool barrier = true; + + auto thread_job = [&]() { + while (barrier) { + std::this_thread::sleep_for(std::chrono::microseconds(1)); + } + for (size_t i = 0; i < kRandomTrialCount; ++i) { + rng.Rand(); + } + }; + + std::vector threads; + for (size_t i = 0; i < kThreadCount; ++i) { + threads.push_back(std::thread(thread_job)); + } + std::this_thread::sleep_for(std::chrono::microseconds(100)); + barrier = false; + for (auto& thread : threads) { + thread.join(); + } +} + +INSTANTIATE_TEST_CASE_P(VariousSeeds, CdmRandomGeneratorTest, + testing::ValuesIn(kSeeds)); + +TEST(CdmRandomTest, AllMethods) { + CdmRandom::Rand(); + CdmRandom::RandomInRange(1234, 1000000); + CdmRandom::RandomInRange(1000000); + CdmRandom::RandomData(kVectorLength); + CdmRandom::RandomBool(); +} + +} // namespace wvcdm