Skip to content

Commit

Permalink
refs bug #467
Browse files Browse the repository at this point in the history
whitelist dm7025 from tpm test and add beta warning to the documentation
  • Loading branch information
Stefan Pluecken committed Oct 6, 2010
1 parent 4a4b395 commit 6e6b1b3
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 31 deletions.
5 changes: 4 additions & 1 deletion doc/TPM
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
The TPM check is currently to be considered a beta version. So please expect
code changes in the future.

If you'd like to write your own plugins and honor the efforts, Dream Multimedia
puts into developing Enigma 2, you can protect your plugin against execution
on Non-Dream Multimedia Hardware by implementing a TPM (Trusted Platform Module)
Expand All @@ -21,4 +24,4 @@ TPM check each time the plugin is called) or directly use it in the
Plugins(**kwargs) function and not return the Plugins-list if the TPM check failes
(which will prevent the plugin from showing up at all). You can also implement
a warning message for all possible TPM failure scenarios.


63 changes: 33 additions & 30 deletions lib/python/Plugins/DemoPlugins/TPMDemo/plugin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from Screens.Screen import Screen
from Plugins.Plugin import PluginDescriptor
from Tools.HardwareInfo import HardwareInfo
from enigma import eTPM
import sha

Expand Down Expand Up @@ -43,38 +44,40 @@ def read_random():
return None

def main(session, **kwargs):
rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
device = HardwareInfo().get_device_name()
if device != "dm7025":
rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']

etpm = eTPM()
l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
if l2cert is None:
print "l2cert not found"
return

etpm = eTPM()
l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT)
if l2cert is None:
print "l2cert not found"
return

l2key = validate_cert(l2cert, rootkey)
if l2key is None:
print "l2cert invalid"
return

l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
if l3cert is None:
print "l3cert not found (can be fixed by running the genuine dreambox plugin and running the offered update)"
return

l3key = validate_cert(l3cert, l2key)
if l3key is None:
print "l3cert invalid"
return

rnd = read_random()
if rnd is None:
print "random error"
return
val = etpm.challenge(rnd)
result = decrypt_block(val, l3key)
if result[80:88] == rnd:
l2key = validate_cert(l2cert, rootkey)
if l2key is None:
print "l2cert invalid"
return

l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT)
if l3cert is None:
print "l3cert not found (can be fixed by running the genuine dreambox plugin and running the offered update)"
return

l3key = validate_cert(l3cert, l2key)
if l3key is None:
print "l3cert invalid"
return

rnd = read_random()
if rnd is None:
print "random error"
return
val = etpm.challenge(rnd)
result = decrypt_block(val, l3key)
if device == "dm7025" or result[80:88] == rnd:
print "successfully finished the tpm test"
# would start your plugin here
# would start your plugin here

def Plugins(**kwargs):
return [PluginDescriptor(name = "TPM Demo", description = _("A demo plugin for TPM usage."), where = PluginDescriptor.WHERE_EXTENSIONSMENU, fnc = main),
Expand Down

0 comments on commit 6e6b1b3

Please sign in to comment.