@@ -92,6 +92,41 @@ download() {
9292 fi
9393}
9494
95+ # Verify SHA256 checksum
96+ verify_checksum () {
97+ local file=$1
98+ local checksum_file=$2
99+
100+ if [ ! -f " $checksum_file " ]; then
101+ error " Checksum file not found: $checksum_file "
102+ return 1
103+ fi
104+
105+ # Extract expected hash from checksum file (format: "hash filename")
106+ local expected_hash
107+ expected_hash=$( awk ' {print $1}' " $checksum_file " )
108+
109+ # Calculate actual hash
110+ local actual_hash
111+ if command -v sha256sum & > /dev/null; then
112+ actual_hash=$( sha256sum " $file " | awk ' {print $1}' )
113+ elif command -v shasum & > /dev/null; then
114+ actual_hash=$( shasum -a 256 " $file " | awk ' {print $1}' )
115+ else
116+ warning " Neither sha256sum nor shasum found - skipping checksum verification"
117+ return 0
118+ fi
119+
120+ if [ " $expected_hash " != " $actual_hash " ]; then
121+ error " Checksum verification failed!"
122+ error " Expected: $expected_hash "
123+ error " Actual: $actual_hash "
124+ return 1
125+ fi
126+
127+ return 0
128+ }
129+
95130main () {
96131 echo " "
97132 echo -e " ${BLUE} ========================================${NC} "
@@ -138,7 +173,7 @@ main() {
138173
139174 # Create temporary directory
140175 TMP_DIR=$( mktemp -d)
141- trap " rm -rf $TMP_DIR " EXIT
176+ trap ' rm -rf $TMP_DIR' EXIT
142177
143178 # Download archive
144179 info " Downloading dtvem..."
@@ -152,6 +187,24 @@ main() {
152187
153188 success " Downloaded successfully"
154189
190+ # Download and verify checksum
191+ CHECKSUM_URL=" ${DOWNLOAD_URL} .sha256"
192+ CHECKSUM_PATH=" $TMP_DIR /${ARCHIVE_NAME} .sha256"
193+
194+ info " Downloading checksum..."
195+ if ! download " $CHECKSUM_URL " " $CHECKSUM_PATH " ; then
196+ error " Failed to download checksum file"
197+ error " URL: $CHECKSUM_URL "
198+ exit 1
199+ fi
200+
201+ info " Verifying checksum..."
202+ if ! verify_checksum " $ARCHIVE_PATH " " $CHECKSUM_PATH " ; then
203+ error " Archive integrity check failed - aborting installation"
204+ exit 1
205+ fi
206+ success " Checksum verified"
207+
155208 # Extract archive
156209 info " Extracting archive..."
157210 tar -xzf " $ARCHIVE_PATH " -C " $TMP_DIR "
@@ -213,9 +266,11 @@ main() {
213266 if [ -n " $SHELL_CONFIG " ]; then
214267 # Check if already in config
215268 if ! grep -q " $INSTALL_DIR " " $SHELL_CONFIG " 2> /dev/null; then
216- echo " " >> " $SHELL_CONFIG "
217- echo " # Added by dtvem installer" >> " $SHELL_CONFIG "
218- echo " $EXPORT_CMD " >> " $SHELL_CONFIG "
269+ {
270+ echo " "
271+ echo " # Added by dtvem installer"
272+ echo " $EXPORT_CMD "
273+ } >> " $SHELL_CONFIG "
219274 success " Added to $SHELL_CONFIG "
220275 else
221276 info " Already in $SHELL_CONFIG "
0 commit comments