如何确定客户端支持的功能

从 PlayReady 设备移植工具包版本 4.4 开始,客户端会在许可证获取挑战过程中向许可证服务器发送有关它支持的功能的信息。 这包括富执行环境 (REE) 功能和受信任的执行环境 (TEE) 功能。

从 PlayReady Server SDK 版本 4.4 开始,此信息通过 LicenseChallenge 类公开提供给应用程序。 (PlayReady Server SDK 的早期版本在许可证获取质询中存在时将忽略此信息。) 此页面介绍了如何使用此功能根据客户端实现的功能在服务器应用程序中做出决策。

功能通过 LicenseChallenge 类在三种不同的分类中公开:TEE 属性、TEE API 和 REE 功能。 若要访问单个类别的客户端功能,可以使用许可证质询的属性获取对应于每个功能的枚举列表,或访问原始 XML,其中包含在许可证质询中发送的功能信息。 从版本 4.4 开始,LicenseChallenge 类中公开的功能下面列出了相应的枚举值。

TeePropertyList:
SUPPORTS_HEVC_HW_DECODING
SUPPORTS_REMOTE_PROVISIONING
SUPPORTS_PRE_PROCESS_ENCRYPTED_DATA
REQUIRES_PRE_PROCESS_ENCRYPTED_DATA_WITH_FULL_FRAMES
REQUIRES_SAMPLE_PROTECTION
SUPPORTS_SECURE_CLOCK
SUPPORTS_SECURE_STOP
SUPPORTS_SECURE_HDCP_TYPE_1
REQUIRES_PREPARE_POLICY_INFO
SUPPORTS_DEBUG_TRACING
REQUIRES_MINIMAL_REVOCATION_DATA
SUPPORTS_OPTIMIZED_CONTENT_KEY2

TeeApiList:
DRM_TEE_BASE_AllocTEEContext
DRM_TEE_BASE_FreeTEEContext
DRM_TEE_BASE_SignDataWithSecureStoreKey
DRM_TEE_BASE_CheckDeviceKeys
DRM_TEE_BASE_GetDebugInformation
DRM_TEE_BASE_GenerateNonce
DRM_TEE_BASE_GetSystemTime
DRM_TEE_LPROV_GenerateDeviceKeys
DRM_TEE_RPROV_GenerateBootstrapChallenge
DRM_TEE_RPROV_ProcessBootstrapResponse
DRM_TEE_RPROV_GenerateProvisioningRequest
DRM_TEE_RPROV_ProcessProvisioningResponse
DRM_TEE_LICPREP_PackageKey
DRM_TEE_SAMPLEPROT_PrepareSampleProtectionKey
DRM_TEE_DECRYPT_PreparePolicyInfo
DRM_TEE_DECRYPT_PrepareToDecrypt
DRM_TEE_DECRYPT_CreateOEMBlobFromCDKB
DRM_TEE_AES128CTR_DecryptContent
DRM_TEE_SIGN_SignHash
DRM_TEE_DOM_PackageKeys
DRM_TEE_RESERVED_20
DRM_TEE_RESERVED_21
DRM_TEE_RESERVED_22
DRM_TEE_RESERVED_23
DRM_TEE_REVOCATION_IngestRevocationInfo
DRM_TEE_LICGEN_CompleteLicense
DRM_TEE_LICGEN_AES128CTR_EncryptContent
DRM_TEE_RESERVED_27
DRM_TEE_RESERVED_28
DRM_TEE_RESERVED_29
DRM_TEE_RESERVED_30
DRM_TEE_RESERVED_31
DRM_TEE_RESERVED_32
DRM_TEE_RESERVED_33
DRM_TEE_H264_PreProcessEncryptedData
DRM_TEE_SECURESTOP_GetGenerationID
DRM_TEE_AES128CTR_DecryptAudioContentMultiple
DRM_TEE_SECURETIME_GenerateChallengeData
DRM_TEE_SECURETIME_ProcessResponseData
DRM_TEE_AES128CTR_DecryptContentMultiple
DRM_TEE_AES128CBC_DecryptContentMultiple
DRM_TEE_SECURESTOP2_GetSigningKeyBlob
DRM_TEE_SECURESTOP2_SignChallenge
DRM_TEE_BASE_GetFeatureInformation

ReeFeatureList:
程序集
PersistentStorePrealloc
ECCProfiling
ForceAlign
InlineDwordCopy
FileLocking
多线程
Native64BitTypes
PrecomputedECCGlobalTable
跟踪
PersistentStoreWriteThrough
AddLicenseWriteThrough
NoOptimizations
DebugBuild
分析
激活
AntirollbackClock
CDMI
CleanStore
ErrorCodeContract
PKCRT
DeviceAssets

EmbeddedLicenseStore
PersistentStore
PersistentStoreBlockHeaderCache
CDMIPersistentStore
ContentKeyGeneration
LocalLicenseGeneration
MeteringCertificateRevocation
计费
ModelCertificateRevocation
InMemoryOnlyLicenses
性能
复活
撤销
SecureDelete
SecureStop
SecureStop2
SecureTime
StructuredSerialization
XmlParsingCache
LicenseAcquisition
LegacyXmlCertificates
AESCBCS

有几个常见状态,LicenseChallenge 类可以针对公开的客户端功能集。

  • 如果 TeePropertyList、TeeApiList 和 ReeFeatureList 均为空,则表示客户端运行的 PK 版本早于 4.4。
  • 如果 ReeFeatureList 为非空,并且 TeePropertyList 和 TeeApiList 均为空,则表示两项内容之一。
    • 在Windows客户端上,客户端要么在软件 DRM 中运行,要么客户端的 TEE 早于 PK 版本 4.4。
    • 在非Windows客户端上,客户端的 REE 运行 PK 版本 4.4+ 但客户端的 TEE 早于 PK 版本 4.4。
  • 如果 TeePropertyList、TeeApiList 和 ReeFeatureList 均为非空,则客户端对所有组件运行 PK 版本 4.4+ 。
    • 注意:TeePropertyList 和 TeeApiList 由客户端的 TEE 提供,可以信任其安全级别。