bbfdm/libbbfdm-api/scripts/bbf.secure

73 lines
No EOL
1.9 KiB
Bash
Executable file

#!/bin/sh
. /usr/share/libubox/jshn.sh
# Path to the private key certificate
PRIVATE_KEY_CERT="/etc/bbfdm/certificates/private_key.pem"
case "$1" in
list)
echo '{ "encode" : { "data": "str" }, "decode" : { "data": "str" } }'
;;
call)
# Read the arguments from standard input
read -r input
# Parse the input JSON
json_load "${input}"
# Get the 'data' value from the input JSON
json_get_var data data
# Check if 'data' is provided
if [ -z "${data}" ]; then
echo '{ "error": "Data should be defined !!!" }'
return
fi
# Check if private key exists
if [ -f "${PRIVATE_KEY_CERT}" ]; then
case "$2" in
encode)
# Path to the public key certificate
PUBLIC_KEY_CERT="/etc/bbfdm/certificates/public_key.pem"
# Generate public key if not exists
if [ ! -f "${PUBLIC_KEY_CERT}" ]; then
openssl rsa -pubout -in "${PRIVATE_KEY_CERT}" -out "${PUBLIC_KEY_CERT}" || {
echo '{ "error": "Cannot generate public key !!!" }'
return
}
fi
res=$(echo -n "${data}" | openssl pkeyutl -encrypt -pubin -inkey "${PUBLIC_KEY_CERT}" | openssl base64)
echo "{ \"value\": \"${res}\" }"
;;
decode)
# Decrypt the data with private key
res=$(echo -n "${data}" | openssl base64 -d | openssl pkeyutl -decrypt -inkey "${PRIVATE_KEY_CERT}")
echo "{ \"value\": \"${res}\" }"
;;
esac
else
# Read the BBF_HASH from the secure hash file(/etc/bbfdm/.secure_hash)
BBF_HASH=$(cat /etc/bbfdm/.secure_hash)
if [ -z "${BBF_HASH}" ]; then
echo '{ "error": "bbf hash should not be blank !!!" }'
return
fi
case "$2" in
encode)
res=$(echo "${data}" | openssl enc -base64 -e -aes-256-cbc -salt -pass pass:${BBF_HASH} -pbkdf2)
echo "{ \"value\": \"${res}\" }"
;;
decode)
res=$(echo "${data}" | openssl enc -base64 -d -aes-256-cbc -salt -pass pass:${BBF_HASH} -pbkdf2)
echo "{ \"value\": \"${res}\" }"
;;
esac
fi
;;
esac