Merge branch 'develop'
This commit is contained in:
commit
e69690d0b0
|
|
@ -0,0 +1,128 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# $1 update package
|
||||||
|
# $2 output directory
|
||||||
|
# $3 pub key to verify sig
|
||||||
|
# $4 pri key to decrypt data key
|
||||||
|
|
||||||
|
SIG_FILE="$2/sig.dat"
|
||||||
|
AES256_KEY="$2/aes256.key"
|
||||||
|
IV="$2/iv"
|
||||||
|
|
||||||
|
ANIM_SIG_FILE="$2/anim_sig.dat"
|
||||||
|
ANIM_PID=0
|
||||||
|
|
||||||
|
|
||||||
|
epd_cmd()
|
||||||
|
{
|
||||||
|
epd_fb_test $@ >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# file header check
|
||||||
|
########################################
|
||||||
|
HEAD_MARK=`head -c 4 $1`
|
||||||
|
if [ $HEAD_MARK != "DPUP" ]
|
||||||
|
then
|
||||||
|
echo "Invalid file"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
DATA_OFFSET=`dd if=$1 bs=4 skip=1 count=1 2>/dev/null | od -A n -t d4 -v`
|
||||||
|
BODY_SIZE=`dd if=$1 bs=4 skip=2 count=1 2>/dev/null | od -A n -t d4 -v`
|
||||||
|
########################################
|
||||||
|
# start animation for package check
|
||||||
|
########################################
|
||||||
|
ANIM_HEADER_OFFSET=$(( $DATA_OFFSET + $BODY_SIZE ))
|
||||||
|
if [ -z "$ANIM_HEADER_OFFSET" ]
|
||||||
|
then
|
||||||
|
ANIM_HEADER_OFFSET=0
|
||||||
|
fi
|
||||||
|
ANIM_HEADER_SIZE=`dd if=$1 bs=1 skip=$ANIM_HEADER_OFFSET count=4 2>/dev/null | od -A n -t d4 -v`
|
||||||
|
if [ -z "$ANIM_HEADER_SIZE" ]
|
||||||
|
then
|
||||||
|
ANIM_HEADER_SIZE=0
|
||||||
|
fi
|
||||||
|
ANIM_ARCH_SIZE=`dd if=$1 bs=1 skip=$(($ANIM_HEADER_OFFSET + 4)) count=4 2>/dev/null | od -A n -t d4 -v`
|
||||||
|
ANIM_SIG_SIZE=`dd if=$1 bs=1 skip=$(($ANIM_HEADER_OFFSET + 8)) count=4 2>/dev/null | od -A n -t d4 -v`
|
||||||
|
dd if=$1 of=$ANIM_SIG_FILE bs=1 skip=$(($ANIM_HEADER_OFFSET + 12)) count=$(($ANIM_SIG_SIZE)) 2>/dev/null
|
||||||
|
ANIM_ARCH_OFFSET=$(($ANIM_HEADER_OFFSET + $ANIM_HEADER_SIZE))
|
||||||
|
dd if=$1 bs=$ANIM_ARCH_OFFSET skip=1 2>/dev/null | head -c $(($ANIM_ARCH_SIZE)) | openssl dgst -sha256 -verify $3 -signature $ANIM_SIG_FILE 1>/dev/null
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
start_prepare_animation.sh $1 $2 $ANIM_ARCH_OFFSET $(($ANIM_ARCH_SIZE)) &
|
||||||
|
ANIM_PID=$!
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# extract sig
|
||||||
|
########################################
|
||||||
|
SIG_SIZE=`dd if=$1 bs=4 skip=4 count=1 2>/dev/null | od -A n -t d4 -v`
|
||||||
|
dd if=$1 of=$SIG_FILE bs=1 skip=20 count=$(($SIG_SIZE)) 2>/dev/null
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# verify sig
|
||||||
|
########################################
|
||||||
|
# dd if=$1 bs=$(($DATA_OFFSET)) skip=1 2>/dev/null | head -c $(($BODY_SIZE)) | openssl dgst -sha256 -verify $3 -signature $SIG_FILE 1>/dev/null
|
||||||
|
#if [ $? -ne 0 ]
|
||||||
|
#then
|
||||||
|
# echo "Verify failed."
|
||||||
|
# exit 0
|
||||||
|
#fi
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# decrypt data key
|
||||||
|
########################################
|
||||||
|
ENC_KEY_OFFSET=$((20 + $SIG_SIZE))
|
||||||
|
PAD_SIZE=$((16 - $SIG_SIZE % 16 ))
|
||||||
|
if [ $PAD_SIZE -ne 16 ]
|
||||||
|
then
|
||||||
|
ENC_KEY_OFFSET=$(( $ENC_KEY_OFFSET + $PAD_SIZE ))
|
||||||
|
fi
|
||||||
|
|
||||||
|
ENC_KEY_SIZE=`dd if=$1 bs=1 skip=${ENC_KEY_OFFSET} count=4 2>/dev/null | od -A n -t d4 -v`
|
||||||
|
ENC_KEY_OFFSET=$(( $ENC_KEY_OFFSET + 4 ))
|
||||||
|
dd if=$1 bs=1 skip=${ENC_KEY_OFFSET} count=$(($ENC_KEY_SIZE)) 2>/dev/null | openssl rsautl -decrypt -inkey $4 > ${AES256_KEY}
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# extract iv
|
||||||
|
########################################
|
||||||
|
IV_OFFSET=$(($ENC_KEY_OFFSET + $ENC_KEY_SIZE))
|
||||||
|
dd if=$1 of=$IV bs=1 skip=${IV_OFFSET} count=32 2>/dev/null
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# decrypt data and extract directory tree
|
||||||
|
########################################
|
||||||
|
dd if=$1 bs=$(($DATA_OFFSET)) skip=1 2>/dev/null | head -c $(($BODY_SIZE)) | openssl enc -d -aes-256-cbc -K `cat ${AES256_KEY}` -iv `cat ${IV}` | tar -xz -C $2
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# stop animation for package check
|
||||||
|
########################################
|
||||||
|
if [ $ANIM_PID -ne 0 ]
|
||||||
|
then
|
||||||
|
kill $ANIM_PID
|
||||||
|
epd_cmd gray DU PART 0
|
||||||
|
epd_cmd wait 300000
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# start updater
|
||||||
|
########################################
|
||||||
|
if [ -f ${2}/FwUpdater/eufwupdater.sh ]
|
||||||
|
then
|
||||||
|
${2}/FwUpdater/eufwupdater.sh
|
||||||
|
exit $? # tentative
|
||||||
|
else
|
||||||
|
echo "Invalid archive (No updater script)."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
ROOTPWD=/etc/passwd
|
ROOTPWD=/etc/passwd
|
||||||
DIAGFUNC=/usr/local/bin/diag_functions
|
DIAGFUNC=/usr/local/bin/diag_functions
|
||||||
UPDATER=/usr/local/bin/updater_check.sh
|
UPDATER=/usr/local/bin/updater_check.sh
|
||||||
|
FWUPDATER=/usr/local/bin/start_eufwupdater.sh
|
||||||
KEY_DETECTION_TMPF=/tmp/key_pressed.log
|
KEY_DETECTION_TMPF=/tmp/key_pressed.log
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -108,6 +109,7 @@ echo "======================================="
|
||||||
echo " Patching customized updater script.."
|
echo " Patching customized updater script.."
|
||||||
echo "======================================="
|
echo "======================================="
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "== Original ${UPDATER} (30 lines):"
|
echo "== Original ${UPDATER} (30 lines):"
|
||||||
tail -n 30 ${UPDATER}
|
tail -n 30 ${UPDATER}
|
||||||
echo "== Backing up..."
|
echo "== Backing up..."
|
||||||
|
|
@ -118,6 +120,16 @@ cat updater_check.sh > ${UPDATER}
|
||||||
echo "== New ${UPDATER} (30 lines):"
|
echo "== New ${UPDATER} (30 lines):"
|
||||||
tail -n 30 ${UPDATER}
|
tail -n 30 ${UPDATER}
|
||||||
|
|
||||||
|
echo "== Original ${FWUPDATER} (30 lines):"
|
||||||
|
tail -n 30 ${FWUPDATER}
|
||||||
|
echo "== Backing up..."
|
||||||
|
cp ${FWUPDATER} ${FWUPDATER}_bak
|
||||||
|
echo "== Enabling..."
|
||||||
|
# use cat to prevent permission change
|
||||||
|
cat start_eufwupdater.sh > ${FWUPDATER}
|
||||||
|
echo "== New ${FWUPDATER} (30 lines):"
|
||||||
|
tail -n 30 ${FWUPDATER}
|
||||||
|
|
||||||
# validation
|
# validation
|
||||||
echo "== Looking fine?"
|
echo "== Looking fine?"
|
||||||
echo "==== If YES, do nothing, or press HOME to continue (default)..."
|
echo "==== If YES, do nothing, or press HOME to continue (default)..."
|
||||||
|
|
@ -129,8 +141,11 @@ then
|
||||||
echo "== Rolling back..."
|
echo "== Rolling back..."
|
||||||
# use cat to prevent permission change
|
# use cat to prevent permission change
|
||||||
cat ${UPDATER}_bak > ${UPDATER}
|
cat ${UPDATER}_bak > ${UPDATER}
|
||||||
|
cat ${FWUPDATER}_bak > ${FWUPDATER}
|
||||||
echo "== Current ${UPDATER} (30 lines):"
|
echo "== Current ${UPDATER} (30 lines):"
|
||||||
tail -n 30 ${UPDATER}
|
tail -n 30 ${UPDATER}
|
||||||
|
echo "== Current ${FWUPDATER} (30 lines):"
|
||||||
|
tail -n 30 ${FWUPDATER}
|
||||||
echo "== Done. No modifications were made."
|
echo "== Done. No modifications were made."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue