#!/bin/sh

if [ $# -ne 1 ]; then
  echo ""
  echo "Warning!! The number of input parameters must be 1."
  echo "Parm(#1): filename with signature"
  echo ""
  exit 1
fi

filename_sign=$1
folder_name="verify_tool"
#/* QB: G#1046, 2020/04/17 */
failFlag=0
#/* QE: G#1046 */

if [ ! -e $filename_sign ]; then
  echo "Error!! Image with signature does not exist!!"
  echo ""
  exit 1
fi


echo "Downloading firmware"

filename_nosign="$(echo $filename_sign | sed 's/_sign//g')"

if [ "$filename_sign" = "$filename_nosign" ]; then
  echo "Error!! Type(deb or onie) may be wrong or Filename may be wrong!!"
  exit 1
fi
SIZE=$(ls -l $filename_sign | awk '{print $5}')
if [ $SIZE -eq 0 ]; then
  echo "Error!! File size is 0!! Cannot verify file!!"
  exit 1
fi

#/* QB: E#317302, 2020/04/07 */
key_size="451"
division=`expr $SIZE - $key_size`
if [ $division -le 0 ]; then
  echo "Error!! The size of signed file may be less than or equal to 0!! Cannot verify file!!"
  exit 1
fi

dd if=$filename_sign of=image_sign bs=$division count=1 >/dev/null 2>&1
dd if=$filename_sign of=public_key.pem bs=$division skip=1 >/dev/null 2>&1

SIZE=$division
#/* QE: E#317302 */

dgst_size="256"
division=`expr $SIZE - $dgst_size`
if [ $division -le 0 ]; then
  echo "Error!! The size of new file may be less than or equal to 0!! Cannot verify file!!"
  #/* QB: E#317302, 2020/04/07 */
  rm image_sign >/dev/null 2>&1
  rm public_key.pem >/dev/null 2>&1
  #/* QE: E#317302 */
  exit 1
fi

#/* QB: E#317302, 2020/04/07 */
dd if=image_sign of=$filename_nosign bs=$division count=1 >/dev/null 2>&1
dd if=image_sign of=output_dgst bs=$division skip=1 >/dev/null 2>&1
#/* QE: E#317302 */

#/* QB: E#317302, 2020/04/07 */
if [ ! -e public_key.pem ]; then
#/* QE: E#317302 */
  echo "Error! Public key does not exist !!"
  rm $filename_nosign >/dev/null 2>&1
  rm output_dgst >/dev/null 2>&1
  #/* QB: E#317302, 2020/04/07 */
  rm image_sign >/dev/null 2>&1
  #/* QE: E#317302 */
  exit 1
fi

#/* QB: E#317302, 2020/04/07 */
/usr/bin/openssl dgst -sha256 -verify public_key.pem -signature output_dgst $filename_nosign >/dev/null 2>&1
#/* QE: E#317302 */
#/* QB: G#1046, 2020/04/17 */
if [ $? -ne 0 ]; then
  failFlag=1
  if file $filename_sign | grep -q "POSIX shell script executable"; then
    head -n 15 $filename_sign | grep "#Start_check" >/dev/null 2>&1
    if [ $? -eq 0 ]; then
      cp $filename_sign $filename_nosign >/dev/null 2>&1
      failFlag=0
    fi
  fi
fi
#/* QE: G#1046 */

#/* QB: G#1046, 2020/04/17 */
if [ "$failFlag" -ne 0 ]; then
#/* QE: G#1046 */
  echo "Firmware signature verification status: failed"
  rm $filename_nosign >/dev/null 2>&1
  rm output_dgst >/dev/null 2>&1
  #/* QB: E#317302, 2020/04/07 */
  rm image_sign >/dev/null 2>&1
  rm public_key.pem >/dev/null 2>&1
  #/* QE: E#317302 */
  exit 1
else
  echo "Firmware signature verification status: passed"
fi

rm output_dgst >/dev/null 2>&1
#/* QB: E#317302, 2020/04/07 */
rm image_sign >/dev/null 2>&1
rm public_key.pem >/dev/null 2>&1
#/* QE: E#317302 */

