Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/tvbin/tivosh
- ######################################################################
- #
- # File: debundle
- #
- # Description: Create a few fake keys for each head-end, for use
- # during testing - modified to search /State/Keyring
- # for encryption keys and to be callable from shell
- #
- # Copyright (c) 2001 TiVo Inc.
- #
- ######################################################################
- source $tcl_library/tv/Inc.itcl
- tvsource $tcl_library/tv/mfslib.tcl
- tvsource $tcl_library/tv/setup.tcl
- namespace import Inc::*
- ########
- #
- # UnBundle
- #
- ########
- proc unbundle { sourcefile } {
- if ![file exists /tmp/unbundle] {
- file mkdir /tmp/unbundle
- }
- catch {
- foreach i [glob /tmp/unbundle/*] {
- file delete -force $i
- }
- }
- set srcSize [file size $sourcefile]
- if {$srcSize == 0} {
- return
- }
- set currentdir [pwd]
- if {[string first "/" $sourcefile] == -1} {
- set targetdir $currentdir
- set sourcefile "$currentdir/$sourcefile"
- } else {
- set targetdir [file dirname $sourcefile]
- }
- set namebase [file tail $sourcefile]
- cd /tmp/unbundle
- putlog "Unbundling $sourcefile"
- eval exec cpio -i -I $sourcefile 2>/dev/null
- set keyfiles [glob *$Inc::TS_SKEY_EXT]
- set mykeys ""
- set db [dbopen]
- set foundkey 0
- ForeachMfsFile fsid name type "/State/Keyring/" "" {
- # set mykeys "$mykeys $name"
- RetryTransaction {
- set key [db $db openidconstruction $fsid]
- try {set keytype [dbobj $key get Type]} catch errCode { set keytype "" }
- if {$keytype == "1"} {
- set keyid [dbobj $key get Name]
- set keyval [dbobj $key get Value]
- set keymatch "$keyid$Inc::TS_SKEY_EXT"
- if {[lsearch $keyfiles $keymatch] != -1} {
- putlog "Using type-1 Blowfish key $keyid"
- set sessionkey [eval exec $Inc::TS_DECRYPT_PROG $keyval < $keymatch]
- if {[string first 0x $sessionkey] != 0} {
- putlog "Session key did not decrypt properly!"
- } else {
- putlog "Session key decrypted successfully"
- set foundkey 1
- }
- }
- }
- if {$keytype == "2"} {
- set keyid [dbobj $key get Name]
- set keyval [dbobj $key get Value]
- set keymatch "$keyid$Inc::TS_SKEY_EXT"
- if {[lsearch $keyfiles $keymatch] != -1} {
- putlog "Using type-2 ElGamal master key $keyid"
- if {[catch {set sessionkey [eval exec $Inc::TS_KEY_PROG -x -ddm $keyval $keymatch]} oops]} {
- putlog "Session key did not decrypt: $oops"
- } else {
- putlog "Session key $sessionkey decrypted successfully"
- set foundkey 1
- }
- }
- }
- if {$foundkey} {
- break;
- }
- }
- }
- if {!$foundkey} {
- putlog "No key match!"
- putlog "Bundle keylist is $keyfiles"
- set havekeys "My keyring holds "
- ForeachMfsFile fsid name type "/State/Keyring/" "" {
- set havekeys "$havekeys\n$name"
- }
- # foreach key $mykeys {
- # set comma [string first "," $key]
- # if {$comma != 1} {
- # set keyid [string range $key 0 [expr $comma-1]]
- # set havekeys "$havekeys $keyid"
- # }
- # }
- putlog $havekeys
- cd $currentdir
- error "Can't find a suitable key for this bundle"
- }
- putlog "Session unlocked"
- foreach file [glob *$Inc::TS_CRYPT_EXT] {
- set basefile [file rootname $file]
- putlog "Decrypting $file to $basefile"
- eval exec $Inc::TS_DECRYPT_PROG $sessionkey < $file > $basefile
- file delete $file
- }
- foreach file [glob -nocomplain *$Inc::TS_BZIP_EXT] {
- set basefile [file rootname $file]
- set basepath "$targetdir/$basefile"
- putlog "Decompressing $file to $basepath"
- eval exec $Inc::TS_BUZIP_PROG < $file > $basepath
- file delete $file
- }
- foreach file [glob -nocomplain *$Inc::TS_ZIP_EXT] {
- set basefile [file rootname $file]
- set basepath "$targetdir/$basefile"
- putlog "Decompressing $file to $basepath"
- eval exec $Inc::TS_UZIP_PROG < $file > $basepath
- file delete $file
- }
- foreach file [glob -nocomplain *$Inc::TS_SIG_EXT] {
- set basefile [file rootname $file]
- set basepath "$targetdir/$basefile"
- putlog "Moving $file to $basepath"
- file copy $file $basepath
- file delete $file
- }
- cd $currentdir
- dbclose $db
- }
- if [llength $argv] {set bnd [lindex $argv 0]}
- if {![info exists bnd] || $bnd==""} {
- puts stderr "Please specify a file to unbundle"
- exit 1
- }
- unbundle $bnd
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement