60 lines
2.6 KiB
Python
60 lines
2.6 KiB
Python
|
from vinetrimmer.utils.MSL import EntityAuthenticationSchemes
|
||
|
from vinetrimmer.utils.MSL.MSLObject import MSLObject
|
||
|
|
||
|
|
||
|
# noinspection PyPep8Naming
|
||
|
class EntityAuthentication(MSLObject):
|
||
|
def __init__(self, scheme, authdata):
|
||
|
"""
|
||
|
Data used to identify and authenticate the entity associated with a message.
|
||
|
https://github.com/Netflix/msl/wiki/Entity-Authentication-%28Configuration%29
|
||
|
|
||
|
:param scheme: Entity Authentication Scheme identifier
|
||
|
:param authdata: Entity Authentication data
|
||
|
"""
|
||
|
self.scheme = str(scheme)
|
||
|
self.authdata = authdata
|
||
|
|
||
|
@classmethod
|
||
|
def Unauthenticated(cls, identity):
|
||
|
"""
|
||
|
The unauthenticated entity authentication scheme does not provide encryption or authentication and only
|
||
|
identifies the entity. Therefore entity identities can be harvested and spoofed. The benefit of this
|
||
|
authentication scheme is that the entity has control over its identity. This may be useful if the identity is
|
||
|
derived from or related to other data, or if retaining the identity is desired across state resets or in the
|
||
|
event of MSL errors requiring entity re-authentication.
|
||
|
"""
|
||
|
return cls(
|
||
|
scheme=EntityAuthenticationSchemes.Unauthenticated,
|
||
|
authdata={"identity": identity}
|
||
|
)
|
||
|
|
||
|
@classmethod
|
||
|
def Widevine(cls, devtype, keyrequest):
|
||
|
"""
|
||
|
The Widevine entity authentication scheme is used by devices with the Widevine CDM. It does not provide
|
||
|
encryption or authentication and only identifies the entity. Therefore entity identities can be harvested
|
||
|
and spoofed. The entity identity is composed from the provided device type and Widevine key request data. The
|
||
|
Widevine CDM properties can be extracted from the key request data.
|
||
|
|
||
|
When coupled with the Widevine key exchange scheme, the entity identity can be cryptographically validated by
|
||
|
comparing the entity authentication key request data against the key exchange key request data.
|
||
|
|
||
|
Note that the local entity will not know its entity identity when using this scheme.
|
||
|
|
||
|
> Devtype
|
||
|
|
||
|
An arbitrary value identifying the device type the local entity wishes to assume. The data inside the Widevine
|
||
|
key request may be optionally used to validate the claimed device type.
|
||
|
|
||
|
:param devtype: Local entity device type
|
||
|
:param keyrequest: Widevine key request
|
||
|
"""
|
||
|
return cls(
|
||
|
scheme=EntityAuthenticationSchemes.Widevine,
|
||
|
authdata={
|
||
|
"devtype": devtype,
|
||
|
"keyrequest": keyrequest
|
||
|
}
|
||
|
)
|