Move SS_CalculateShaFile() to the SS_Common.c file 22/270422/3
authorMateusz Moscicki <m.moscicki2@partner.samsung.com>
Tue, 1 Feb 2022 15:21:10 +0000 (16:21 +0100)
committerMateusz Moscicki <m.moscicki2@partner.samsung.com>
Mon, 21 Feb 2022 14:59:47 +0000 (15:59 +0100)
Change-Id: Ice1492bc24ef1c62e43991b0784018c311602def

ss_engine/SS_Common.c
ss_engine/SS_Common.h
ss_engine/SS_UPI.c

index 42a444e..0dc38af 100755 (executable)
@@ -24,6 +24,7 @@
 #include <sys/types.h>
 #include <stdarg.h>
 #include <fcntl.h>
+#include <string.h>
 
 #include "SS_ImageUpdate.h"
 #include "SS_Engine_Errors.h"
@@ -32,6 +33,7 @@
 #include "ua_types.h"
 #include "fota_tar.h"
 #include "fota_common.h"
+#include "sha1.h"
 
 void SS_Progress(void *pbUserData, SS_UINT32 uPercent)
 {
@@ -114,3 +116,65 @@ long SS_GetDelta(void *pbUserData, unsigned char *pbBuffer, SS_UINT32 dwStartAdd
 
        return ret;
 }
+
+int SS_CalculateFileSha(char *filename, long int filesize, unsigned char calculated_sha1[SHA_DIGEST_SIZE])
+{
+
+       FILE *fp = NULL;
+       int ulResult = S_SS_SUCCESS;
+       long int chunk = 20*1024*1024;
+       char buf[256];
+       uint8_t *buffer = NULL;
+
+       fp = fopen(filename, "rb");
+       if (fp == NULL) {
+               strerror_r(errno, buf, sizeof(buf));
+               LOGE("failed to open \"%s\": %s\n", filename, buf);
+               ulResult = E_SS_FAILURE;
+               goto Cleanup;
+       }
+
+       buffer = SS_Malloc(chunk);
+       if (!buffer) {
+               strerror_r(errno, buf, sizeof(buf));
+               LOGE("failed to allocate memory for \"%s\": %s\n", filename, buf);
+               ulResult = E_SS_FAILURE;
+               goto Cleanup;
+       }
+
+       ssize_t bytes_read = 0;
+       sha1_ctx_t sha_ctx;
+       sha1_init(&sha_ctx);
+
+       while (filesize > 0) {
+               if (filesize < chunk) {
+                       bytes_read = fread(buffer, 1, filesize, fp);
+                       if (bytes_read != filesize) {
+                               LOGE("short read of \"%s\" (%ld bytes of %ld)\n", filename, (long)bytes_read, filesize);
+                               ulResult = E_SS_FAILURE;
+                               goto Cleanup;
+                       }
+                       sha1_update(&sha_ctx, buffer, filesize);
+                       break;
+               } else {
+                       bytes_read = fread(buffer, 1, chunk, fp);
+                       if (bytes_read != chunk) {
+                               LOGE("short read of \"%s\" (%ld bytes of %ld)\n", filename, (long)bytes_read, filesize);
+                               ulResult = E_SS_FAILURE;
+                               goto Cleanup;
+                       }
+                       sha1_update(&sha_ctx, buffer, chunk);
+                       filesize -= chunk;
+               }
+       }
+
+       sha1_final(&sha_ctx, (uint32_t *) &calculated_sha1[0]);
+
+Cleanup:
+       if (fp)
+               fclose(fp);
+       if (buffer)
+               SS_Free(buffer);
+       return ulResult;
+}
+
index 7fb5311..50868b7 100755 (executable)
@@ -63,3 +63,8 @@ struct status_header_page {
 };
 
 void SS_unicode_to_char(const char *src, char *dest, int size);
+
+#ifndef SHA_DIGEST_SIZE
+#define SHA_DIGEST_SIZE 20  // To avoid creating dependencies on sha1.h
+#endif
+int SS_CalculateFileSha(char *filename, long int filesize, unsigned char calculated_sha1[SHA_DIGEST_SIZE]);
index 5224ea6..b2baf5e 100755 (executable)
@@ -241,66 +241,6 @@ long SS_GetUPIVersion(unsigned char *ver_str)
                return E_SS_FAILURE;
 }
 
-int SS_CalculateFileSha(char *filename, long int filesize, FileInfo * file)
-{
-
-       FILE *fp = NULL;
-       int ulResult = S_SS_SUCCESS;
-       long int chunk = 20*1024*1024;
-       char buf[256];
-
-       fp = fopen(filename, "rb");
-       if (fp == NULL) {
-               strerror_r(errno, buf, sizeof(buf));
-               LOGE("failed to open \"%s\": %s\n", filename, buf);
-               ulResult = E_SS_FAILURE;
-               goto Cleanup;
-       }
-
-       file->data = SS_Malloc(chunk);
-       if (!file->data) {
-               strerror_r(errno, buf, sizeof(buf));
-               LOGE("failed to allocate memory for \"%s\": %s\n", filename, buf);
-               ulResult = E_SS_FAILURE;
-               goto Cleanup;
-       }
-
-       ssize_t bytes_read = 0;
-       sha1_ctx_t sha_ctx;
-       sha1_init(&sha_ctx);
-
-       while (filesize > 0) {
-               if (filesize < chunk) {
-                       bytes_read = fread(file->data, 1, filesize, fp);
-                       if (bytes_read != filesize) {
-                               LOGE("short read of \"%s\" (%ld bytes of %ld)\n", filename, (long)bytes_read, (long)file->size);
-                               ulResult = E_SS_FAILURE;
-                               goto Cleanup;
-                       }
-                       sha1_update(&sha_ctx, file->data, filesize);
-                       break;
-               } else {
-                       bytes_read = fread(file->data, 1, chunk, fp);
-                       if (bytes_read != chunk) {
-                               LOGE("short read of \"%s\" (%ld bytes of %ld)\n", filename, (long)bytes_read, (long)file->size);
-                               ulResult = E_SS_FAILURE;
-                               goto Cleanup;
-                       }
-                       sha1_update(&sha_ctx, file->data, chunk);
-                       filesize -= chunk;
-               }
-       }
-
-       sha1_final(&sha_ctx, (uint32_t *) &file->sha1);
-
-Cleanup:
-       if (fp)
-               fclose(fp);
-       if (file->data)
-               SS_Free(file->data);
-       return ulResult;
-}
-
 int SS_verify_DELTA_image(char *filename)
 {
 
@@ -379,7 +319,8 @@ int SS_verify_DELTA_image(char *filename)
                goto Cleanup;
        }
 
-       ulResult = SS_CalculateFileSha(filename, udelta_size, &file);
+       unsigned char calcualted_sha1[SHA_DIGEST_SIZE];
+       ulResult = SS_CalculateFileSha(filename, udelta_size, calcualted_sha1);
        if (ulResult != S_SS_SUCCESS)
                goto Cleanup;