Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. #!/tvbin/tivosh
  2. ######################################################################
  3. #
  4. # File: debundle
  5. #
  6. # Description: Create a few fake keys for each head-end, for use
  7. # during testing - modified to search /State/Keyring
  8. # for encryption keys and to be callable from shell
  9. #
  10. # Copyright (c) 2001 TiVo Inc.
  11. #
  12. ######################################################################
  13.  
  14. source $tcl_library/tv/Inc.itcl
  15. tvsource $tcl_library/tv/mfslib.tcl
  16. tvsource $tcl_library/tv/setup.tcl
  17.  
  18. namespace import Inc::*
  19.  
  20. ########
  21. #
  22. # UnBundle
  23. #
  24. ########
  25.  
  26. proc unbundle { sourcefile } {
  27. if ![file exists /tmp/unbundle] {
  28. file mkdir /tmp/unbundle
  29. }
  30. catch {
  31. foreach i [glob /tmp/unbundle/*] {
  32. file delete -force $i
  33. }
  34. }
  35. set srcSize [file size $sourcefile]
  36. if {$srcSize == 0} {
  37. return
  38. }
  39. set currentdir [pwd]
  40. if {[string first "/" $sourcefile] == -1} {
  41. set targetdir $currentdir
  42. set sourcefile "$currentdir/$sourcefile"
  43. } else {
  44. set targetdir [file dirname $sourcefile]
  45. }
  46. set namebase [file tail $sourcefile]
  47. cd /tmp/unbundle
  48. putlog "Unbundling $sourcefile"
  49. eval exec cpio -i -I $sourcefile 2>/dev/null
  50. set keyfiles [glob *$Inc::TS_SKEY_EXT]
  51. set mykeys ""
  52. set db [dbopen]
  53. set foundkey 0
  54. ForeachMfsFile fsid name type "/State/Keyring/" "" {
  55. # set mykeys "$mykeys $name"
  56. RetryTransaction {
  57. set key [db $db openidconstruction $fsid]
  58. try {set keytype [dbobj $key get Type]} catch errCode { set keytype "" }
  59. if {$keytype == "1"} {
  60. set keyid [dbobj $key get Name]
  61. set keyval [dbobj $key get Value]
  62. set keymatch "$keyid$Inc::TS_SKEY_EXT"
  63. if {[lsearch $keyfiles $keymatch] != -1} {
  64. putlog "Using type-1 Blowfish key $keyid"
  65. set sessionkey [eval exec $Inc::TS_DECRYPT_PROG $keyval < $keymatch]
  66. if {[string first 0x $sessionkey] != 0} {
  67. putlog "Session key did not decrypt properly!"
  68. } else {
  69. putlog "Session key decrypted successfully"
  70. set foundkey 1
  71. }
  72. }
  73. }
  74. if {$keytype == "2"} {
  75. set keyid [dbobj $key get Name]
  76. set keyval [dbobj $key get Value]
  77. set keymatch "$keyid$Inc::TS_SKEY_EXT"
  78. if {[lsearch $keyfiles $keymatch] != -1} {
  79. putlog "Using type-2 ElGamal master key $keyid"
  80. if {[catch {set sessionkey [eval exec $Inc::TS_KEY_PROG -x -ddm $keyval $keymatch]} oops]} {
  81. putlog "Session key did not decrypt: $oops"
  82. } else {
  83. putlog "Session key $sessionkey decrypted successfully"
  84. set foundkey 1
  85. }
  86. }
  87. }
  88. if {$foundkey} {
  89. break;
  90. }
  91. }
  92. }
  93. if {!$foundkey} {
  94. putlog "No key match!"
  95. putlog "Bundle keylist is $keyfiles"
  96. set havekeys "My keyring holds "
  97.  
  98. ForeachMfsFile fsid name type "/State/Keyring/" "" {
  99. set havekeys "$havekeys\n$name"
  100. }
  101. # foreach key $mykeys {
  102. # set comma [string first "," $key]
  103. # if {$comma != 1} {
  104. # set keyid [string range $key 0 [expr $comma-1]]
  105. # set havekeys "$havekeys $keyid"
  106. # }
  107. # }
  108. putlog $havekeys
  109. cd $currentdir
  110. error "Can't find a suitable key for this bundle"
  111. }
  112. putlog "Session unlocked"
  113. foreach file [glob *$Inc::TS_CRYPT_EXT] {
  114. set basefile [file rootname $file]
  115. putlog "Decrypting $file to $basefile"
  116. eval exec $Inc::TS_DECRYPT_PROG $sessionkey < $file > $basefile
  117. file delete $file
  118. }
  119. foreach file [glob -nocomplain *$Inc::TS_BZIP_EXT] {
  120. set basefile [file rootname $file]
  121. set basepath "$targetdir/$basefile"
  122. putlog "Decompressing $file to $basepath"
  123. eval exec $Inc::TS_BUZIP_PROG < $file > $basepath
  124. file delete $file
  125. }
  126. foreach file [glob -nocomplain *$Inc::TS_ZIP_EXT] {
  127. set basefile [file rootname $file]
  128. set basepath "$targetdir/$basefile"
  129. putlog "Decompressing $file to $basepath"
  130. eval exec $Inc::TS_UZIP_PROG < $file > $basepath
  131. file delete $file
  132. }
  133. foreach file [glob -nocomplain *$Inc::TS_SIG_EXT] {
  134. set basefile [file rootname $file]
  135. set basepath "$targetdir/$basefile"
  136. putlog "Moving $file to $basepath"
  137. file copy $file $basepath
  138. file delete $file
  139. }
  140. cd $currentdir
  141. dbclose $db
  142. }
  143.  
  144.  
  145. if [llength $argv] {set bnd [lindex $argv 0]}
  146. if {![info exists bnd] || $bnd==""} {
  147. puts stderr "Please specify a file to unbundle"
  148. exit 1
  149. }
  150.  
  151. unbundle $bnd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement