feat(coreos-resign-swu-file.sh): add resigner for swu files
this script allows resigning of swu files
This commit is contained in:
parent
9cf698f318
commit
25d363debd
|
|
@ -0,0 +1,62 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#title :coreos-resign-swu-file.sh
|
||||||
|
#description :This script signs/resigns an already existent swu file with a
|
||||||
|
# provided private key and a certificate
|
||||||
|
#author :Patrick Vogelaar
|
||||||
|
#date :20240325
|
||||||
|
#version :0.1
|
||||||
|
#usage :coreos-resign-swu-file.sh -i <in>.swu -k <key> -c <cert>
|
||||||
|
# -o <output_file>
|
||||||
|
#notes :openssl and cpio are required
|
||||||
|
#==============================================================================
|
||||||
|
|
||||||
|
SW_DESC_FILE_NAME="sw-description"
|
||||||
|
SW_DESC_SIG_FILE_NAME="sw-description.sig"
|
||||||
|
FIRMWARE_TMP_DIR="firmware_tmp"
|
||||||
|
CPIO_ORDER_FILE="cpio_order"
|
||||||
|
|
||||||
|
while getopts i:k:c:o flag
|
||||||
|
do
|
||||||
|
case "${flag}" in
|
||||||
|
i) swupdate_in_file=${OPTARG};;
|
||||||
|
k) key_file=${OPTARG};;
|
||||||
|
c) certificate=${OPTARG};;
|
||||||
|
o) output_file=${OPTARG};;
|
||||||
|
*);; # TODO: error handling -> unknown flag
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
### Some basic checks
|
||||||
|
if [[ -d $FIRMWARE_TMP_DIR ]]; then
|
||||||
|
echo "ERROR: $FIRMWARE_TMP_DIR directory alread exists in this directory"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v openssl &> /dev/null
|
||||||
|
then
|
||||||
|
echo "openssl could not be found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v cpio &> /dev/null
|
||||||
|
then
|
||||||
|
echo "cpio could not be found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
mkdir -p $FIRMWARE_TMP_DIR
|
||||||
|
cd $FIRMWARE_TMP_DIR || exit 1
|
||||||
|
|
||||||
|
# store the exact order in a file
|
||||||
|
cpio --quiet --list < "../$swupdate_in_file" > $CPIO_ORDER_FILE
|
||||||
|
|
||||||
|
cpio --quiet -id < "../$swupdate_in_file"
|
||||||
|
|
||||||
|
# resign
|
||||||
|
openssl cms -sign -in $SW_DESC_FILE_NAME -out $SW_DESC_SIG_FILE_NAME -signer\
|
||||||
|
"$certificate" -inkey "$key_file" -outform DER -nosmimecap -binary
|
||||||
|
|
||||||
|
# recreate the swu file
|
||||||
|
echo "cat < $CPIO_ORDER_FILE | cpio --quiet -ov > $output_file"
|
||||||
|
cat < $CPIO_ORDER_FILE | cpio --quiet -ov > "$output_file"
|
||||||
Loading…
Reference in New Issue