Loading applypatch/Android.mk +4 −4 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ LOCAL_SRC_FILES := applypatch.cpp bspatch.cpp freecache.cpp imgpatch.cpp utils.c LOCAL_MODULE := libapplypatch LOCAL_MODULE_TAGS := eng LOCAL_C_INCLUDES += bootable/recovery LOCAL_STATIC_LIBRARIES += libbase libmtdutils libmincrypt libbz libz LOCAL_STATIC_LIBRARIES += libbase libmtdutils libcrypto_static libbz libz include $(BUILD_STATIC_LIBRARY) Loading @@ -32,7 +32,7 @@ LOCAL_SRC_FILES := bspatch.cpp imgpatch.cpp utils.cpp LOCAL_MODULE := libimgpatch LOCAL_C_INCLUDES += bootable/recovery LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_STATIC_LIBRARIES += libmincrypt libbz libz LOCAL_STATIC_LIBRARIES += libcrypto_static libbz libz include $(BUILD_STATIC_LIBRARY) Loading @@ -44,7 +44,7 @@ LOCAL_SRC_FILES := bspatch.cpp imgpatch.cpp utils.cpp LOCAL_MODULE := libimgpatch LOCAL_C_INCLUDES += bootable/recovery LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_STATIC_LIBRARIES += libmincrypt libbz libz LOCAL_STATIC_LIBRARIES += libcrypto_static libbz libz include $(BUILD_HOST_STATIC_LIBRARY) endif # HOST_OS == linux Loading @@ -55,7 +55,7 @@ LOCAL_CLANG := true LOCAL_SRC_FILES := main.cpp LOCAL_MODULE := applypatch LOCAL_C_INCLUDES += bootable/recovery LOCAL_STATIC_LIBRARIES += libapplypatch libbase libmtdutils libmincrypt libbz LOCAL_STATIC_LIBRARIES += libapplypatch libbase libmtdutils libcrypto_static libbz LOCAL_SHARED_LIBRARIES += libz libcutils libc include $(BUILD_EXECUTABLE) Loading applypatch/applypatch.cpp +23 −24 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ #include <android-base/strings.h> #include "mincrypt/sha.h" #include "openssl/sha.h" #include "applypatch.h" #include "mtdutils/mtdutils.h" #include "edify/expr.h" Loading @@ -41,7 +41,7 @@ static int GenerateTarget(FileContents* source_file, const Value* copy_patch_value, const char* source_filename, const char* target_filename, const uint8_t target_sha1[SHA_DIGEST_SIZE], const uint8_t target_sha1[SHA_DIGEST_LENGTH], size_t target_size, const Value* bonus_data); Loading Loading @@ -86,7 +86,7 @@ int LoadFileContents(const char* filename, FileContents* file) { } fclose(f); SHA_hash(file->data, file->size, file->sha1); SHA1(file->data, file->size, file->sha1); return 0; } Loading Loading @@ -181,8 +181,8 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { } SHA_CTX sha_ctx; SHA_init(&sha_ctx); uint8_t parsed_sha[SHA_DIGEST_SIZE]; SHA1_Init(&sha_ctx); uint8_t parsed_sha[SHA_DIGEST_LENGTH]; // Allocate enough memory to hold the largest size. file->data = reinterpret_cast<unsigned char*>(malloc(size[index[pairs-1]])); Loading Loading @@ -212,7 +212,7 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { file->data = NULL; return -1; } SHA_update(&sha_ctx, p, read); SHA1_Update(&sha_ctx, p, read); file->size += read; } Loading @@ -220,7 +220,8 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { // check it against this pair's expected hash. SHA_CTX temp_ctx; memcpy(&temp_ctx, &sha_ctx, sizeof(SHA_CTX)); const uint8_t* sha_so_far = SHA_final(&temp_ctx); uint8_t sha_so_far[SHA_DIGEST_LENGTH]; SHA1_Final(sha_so_far, &temp_ctx); if (ParseSha1(sha1sum[index[i]].c_str(), parsed_sha) != 0) { printf("failed to parse sha1 %s in %s\n", sha1sum[index[i]].c_str(), filename); Loading @@ -229,7 +230,7 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { return -1; } if (memcmp(sha_so_far, parsed_sha, SHA_DIGEST_SIZE) == 0) { if (memcmp(sha_so_far, parsed_sha, SHA_DIGEST_LENGTH) == 0) { // we have a match. stop reading the partition; we'll return // the data we've read so far. printf("partition read matched size %zu sha %s\n", Loading Loading @@ -260,10 +261,7 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { return -1; } const uint8_t* sha_final = SHA_final(&sha_ctx); for (size_t i = 0; i < SHA_DIGEST_SIZE; ++i) { file->sha1[i] = sha_final[i]; } SHA1_Final(file->sha1, &sha_ctx); // Fake some stat() info. file->st.st_mode = 0644; Loading Loading @@ -494,7 +492,7 @@ int WriteToPartition(unsigned char* data, size_t len, const char* target) { int ParseSha1(const char* str, uint8_t* digest) { const char* ps = str; uint8_t* pd = digest; for (int i = 0; i < SHA_DIGEST_SIZE * 2; ++i, ++ps) { for (int i = 0; i < SHA_DIGEST_LENGTH * 2; ++i, ++ps) { int digit; if (*ps >= '0' && *ps <= '9') { digit = *ps - '0'; Loading @@ -521,10 +519,10 @@ int ParseSha1(const char* str, uint8_t* digest) { // found. int FindMatchingPatch(uint8_t* sha1, char* const * const patch_sha1_str, int num_patches) { uint8_t patch_sha1[SHA_DIGEST_SIZE]; uint8_t patch_sha1[SHA_DIGEST_LENGTH]; for (int i = 0; i < num_patches; ++i) { if (ParseSha1(patch_sha1_str[i], patch_sha1) == 0 && memcmp(patch_sha1, sha1, SHA_DIGEST_SIZE) == 0) { memcmp(patch_sha1, sha1, SHA_DIGEST_LENGTH) == 0) { return i; } } Loading Loading @@ -670,7 +668,7 @@ int applypatch(const char* source_filename, target_filename = source_filename; } uint8_t target_sha1[SHA_DIGEST_SIZE]; uint8_t target_sha1[SHA_DIGEST_LENGTH]; if (ParseSha1(target_sha1_str, target_sha1) != 0) { printf("failed to parse tgt-sha1 \"%s\"\n", target_sha1_str); return 1; Loading @@ -685,7 +683,7 @@ int applypatch(const char* source_filename, // We try to load the target file into the source_file object. if (LoadFileContents(target_filename, &source_file) == 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_SIZE) == 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_LENGTH) == 0) { // The early-exit case: the patch was already applied, this file // has the desired hash, nothing for us to do. printf("already %s\n", short_sha1(target_sha1).c_str()); Loading Loading @@ -756,7 +754,7 @@ int applypatch_flash(const char* source_filename, const char* target_filename, const char* target_sha1_str, size_t target_size) { printf("flash %s: ", target_filename); uint8_t target_sha1[SHA_DIGEST_SIZE]; uint8_t target_sha1[SHA_DIGEST_LENGTH]; if (ParseSha1(target_sha1_str, target_sha1) != 0) { printf("failed to parse tgt-sha1 \"%s\"\n", target_sha1_str); return 1; Loading @@ -777,7 +775,7 @@ int applypatch_flash(const char* source_filename, const char* target_filename, pieces.push_back(target_sha1_str); std::string fullname = android::base::Join(pieces, ':'); if (LoadPartitionContents(fullname.c_str(), &source_file) == 0 && memcmp(source_file.sha1, target_sha1, SHA_DIGEST_SIZE) == 0) { memcmp(source_file.sha1, target_sha1, SHA_DIGEST_LENGTH) == 0) { // The early-exit case: the image was already applied, this partition // has the desired hash, nothing for us to do. printf("already %s\n", short_sha1(target_sha1).c_str()); Loading @@ -786,7 +784,7 @@ int applypatch_flash(const char* source_filename, const char* target_filename, } if (LoadFileContents(source_filename, &source_file) == 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_SIZE) != 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_LENGTH) != 0) { // The source doesn't have desired checksum. printf("source \"%s\" doesn't have expected sha1 sum\n", source_filename); printf("expected: %s, found: %s\n", short_sha1(target_sha1).c_str(), Loading @@ -812,7 +810,7 @@ static int GenerateTarget(FileContents* source_file, const Value* copy_patch_value, const char* source_filename, const char* target_filename, const uint8_t target_sha1[SHA_DIGEST_SIZE], const uint8_t target_sha1[SHA_DIGEST_LENGTH], size_t target_size, const Value* bonus_data) { int retry = 1; Loading Loading @@ -957,7 +955,7 @@ static int GenerateTarget(FileContents* source_file, char* header = patch->data; ssize_t header_bytes_read = patch->size; SHA_init(&ctx); SHA1_Init(&ctx); int result; Loading Loading @@ -1001,8 +999,9 @@ static int GenerateTarget(FileContents* source_file, } } while (retry-- > 0); const uint8_t* current_target_sha1 = SHA_final(&ctx); if (memcmp(current_target_sha1, target_sha1, SHA_DIGEST_SIZE) != 0) { uint8_t current_target_sha1[SHA_DIGEST_LENGTH]; SHA1_Final(current_target_sha1, &ctx); if (memcmp(current_target_sha1, target_sha1, SHA_DIGEST_LENGTH) != 0) { printf("patch did not produce expected sha1\n"); return 1; } else { Loading applypatch/applypatch.h +3 −3 Original line number Diff line number Diff line Loading @@ -18,16 +18,16 @@ #define _APPLYPATCH_H #include <sys/stat.h> #include "mincrypt/sha.h" #include "openssl/sha.h" #include "edify/expr.h" typedef struct _Patch { uint8_t sha1[SHA_DIGEST_SIZE]; uint8_t sha1[SHA_DIGEST_LENGTH]; const char* patch_filename; } Patch; typedef struct _FileContents { uint8_t sha1[SHA_DIGEST_SIZE]; uint8_t sha1[SHA_DIGEST_LENGTH]; unsigned char* data; ssize_t size; struct stat st; Loading applypatch/bspatch.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <bzlib.h> #include "mincrypt/sha.h" #include "openssl/sha.h" #include "applypatch.h" void ShowBSDiffLicense() { Loading Loading @@ -114,7 +114,7 @@ int ApplyBSDiffPatch(const unsigned char* old_data, ssize_t old_size, printf("short write of output: %d (%s)\n", errno, strerror(errno)); return 1; } if (ctx) SHA_update(ctx, new_data, new_size); if (ctx) SHA1_Update(ctx, new_data, new_size); free(new_data); return 0; Loading applypatch/imgpatch.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ #include <string.h> #include "zlib.h" #include "mincrypt/sha.h" #include "openssl/sha.h" #include "applypatch.h" #include "imgdiff.h" #include "utils.h" Loading Loading @@ -109,7 +109,7 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, printf("failed to read chunk %d raw data\n", i); return -1; } if (ctx) SHA_update(ctx, patch->data + pos, data_len); if (ctx) SHA1_Update(ctx, patch->data + pos, data_len); if (sink((unsigned char*)patch->data + pos, data_len, token) != data_len) { printf("failed to write chunk %d raw data\n", i); Loading Loading @@ -236,7 +236,7 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, (long)have); return -1; } if (ctx) SHA_update(ctx, temp_data, have); if (ctx) SHA1_Update(ctx, temp_data, have); } while (ret != Z_STREAM_END); deflateEnd(&strm); Loading Loading
applypatch/Android.mk +4 −4 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ LOCAL_SRC_FILES := applypatch.cpp bspatch.cpp freecache.cpp imgpatch.cpp utils.c LOCAL_MODULE := libapplypatch LOCAL_MODULE_TAGS := eng LOCAL_C_INCLUDES += bootable/recovery LOCAL_STATIC_LIBRARIES += libbase libmtdutils libmincrypt libbz libz LOCAL_STATIC_LIBRARIES += libbase libmtdutils libcrypto_static libbz libz include $(BUILD_STATIC_LIBRARY) Loading @@ -32,7 +32,7 @@ LOCAL_SRC_FILES := bspatch.cpp imgpatch.cpp utils.cpp LOCAL_MODULE := libimgpatch LOCAL_C_INCLUDES += bootable/recovery LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_STATIC_LIBRARIES += libmincrypt libbz libz LOCAL_STATIC_LIBRARIES += libcrypto_static libbz libz include $(BUILD_STATIC_LIBRARY) Loading @@ -44,7 +44,7 @@ LOCAL_SRC_FILES := bspatch.cpp imgpatch.cpp utils.cpp LOCAL_MODULE := libimgpatch LOCAL_C_INCLUDES += bootable/recovery LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include LOCAL_STATIC_LIBRARIES += libmincrypt libbz libz LOCAL_STATIC_LIBRARIES += libcrypto_static libbz libz include $(BUILD_HOST_STATIC_LIBRARY) endif # HOST_OS == linux Loading @@ -55,7 +55,7 @@ LOCAL_CLANG := true LOCAL_SRC_FILES := main.cpp LOCAL_MODULE := applypatch LOCAL_C_INCLUDES += bootable/recovery LOCAL_STATIC_LIBRARIES += libapplypatch libbase libmtdutils libmincrypt libbz LOCAL_STATIC_LIBRARIES += libapplypatch libbase libmtdutils libcrypto_static libbz LOCAL_SHARED_LIBRARIES += libz libcutils libc include $(BUILD_EXECUTABLE) Loading
applypatch/applypatch.cpp +23 −24 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ #include <android-base/strings.h> #include "mincrypt/sha.h" #include "openssl/sha.h" #include "applypatch.h" #include "mtdutils/mtdutils.h" #include "edify/expr.h" Loading @@ -41,7 +41,7 @@ static int GenerateTarget(FileContents* source_file, const Value* copy_patch_value, const char* source_filename, const char* target_filename, const uint8_t target_sha1[SHA_DIGEST_SIZE], const uint8_t target_sha1[SHA_DIGEST_LENGTH], size_t target_size, const Value* bonus_data); Loading Loading @@ -86,7 +86,7 @@ int LoadFileContents(const char* filename, FileContents* file) { } fclose(f); SHA_hash(file->data, file->size, file->sha1); SHA1(file->data, file->size, file->sha1); return 0; } Loading Loading @@ -181,8 +181,8 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { } SHA_CTX sha_ctx; SHA_init(&sha_ctx); uint8_t parsed_sha[SHA_DIGEST_SIZE]; SHA1_Init(&sha_ctx); uint8_t parsed_sha[SHA_DIGEST_LENGTH]; // Allocate enough memory to hold the largest size. file->data = reinterpret_cast<unsigned char*>(malloc(size[index[pairs-1]])); Loading Loading @@ -212,7 +212,7 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { file->data = NULL; return -1; } SHA_update(&sha_ctx, p, read); SHA1_Update(&sha_ctx, p, read); file->size += read; } Loading @@ -220,7 +220,8 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { // check it against this pair's expected hash. SHA_CTX temp_ctx; memcpy(&temp_ctx, &sha_ctx, sizeof(SHA_CTX)); const uint8_t* sha_so_far = SHA_final(&temp_ctx); uint8_t sha_so_far[SHA_DIGEST_LENGTH]; SHA1_Final(sha_so_far, &temp_ctx); if (ParseSha1(sha1sum[index[i]].c_str(), parsed_sha) != 0) { printf("failed to parse sha1 %s in %s\n", sha1sum[index[i]].c_str(), filename); Loading @@ -229,7 +230,7 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { return -1; } if (memcmp(sha_so_far, parsed_sha, SHA_DIGEST_SIZE) == 0) { if (memcmp(sha_so_far, parsed_sha, SHA_DIGEST_LENGTH) == 0) { // we have a match. stop reading the partition; we'll return // the data we've read so far. printf("partition read matched size %zu sha %s\n", Loading Loading @@ -260,10 +261,7 @@ static int LoadPartitionContents(const char* filename, FileContents* file) { return -1; } const uint8_t* sha_final = SHA_final(&sha_ctx); for (size_t i = 0; i < SHA_DIGEST_SIZE; ++i) { file->sha1[i] = sha_final[i]; } SHA1_Final(file->sha1, &sha_ctx); // Fake some stat() info. file->st.st_mode = 0644; Loading Loading @@ -494,7 +492,7 @@ int WriteToPartition(unsigned char* data, size_t len, const char* target) { int ParseSha1(const char* str, uint8_t* digest) { const char* ps = str; uint8_t* pd = digest; for (int i = 0; i < SHA_DIGEST_SIZE * 2; ++i, ++ps) { for (int i = 0; i < SHA_DIGEST_LENGTH * 2; ++i, ++ps) { int digit; if (*ps >= '0' && *ps <= '9') { digit = *ps - '0'; Loading @@ -521,10 +519,10 @@ int ParseSha1(const char* str, uint8_t* digest) { // found. int FindMatchingPatch(uint8_t* sha1, char* const * const patch_sha1_str, int num_patches) { uint8_t patch_sha1[SHA_DIGEST_SIZE]; uint8_t patch_sha1[SHA_DIGEST_LENGTH]; for (int i = 0; i < num_patches; ++i) { if (ParseSha1(patch_sha1_str[i], patch_sha1) == 0 && memcmp(patch_sha1, sha1, SHA_DIGEST_SIZE) == 0) { memcmp(patch_sha1, sha1, SHA_DIGEST_LENGTH) == 0) { return i; } } Loading Loading @@ -670,7 +668,7 @@ int applypatch(const char* source_filename, target_filename = source_filename; } uint8_t target_sha1[SHA_DIGEST_SIZE]; uint8_t target_sha1[SHA_DIGEST_LENGTH]; if (ParseSha1(target_sha1_str, target_sha1) != 0) { printf("failed to parse tgt-sha1 \"%s\"\n", target_sha1_str); return 1; Loading @@ -685,7 +683,7 @@ int applypatch(const char* source_filename, // We try to load the target file into the source_file object. if (LoadFileContents(target_filename, &source_file) == 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_SIZE) == 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_LENGTH) == 0) { // The early-exit case: the patch was already applied, this file // has the desired hash, nothing for us to do. printf("already %s\n", short_sha1(target_sha1).c_str()); Loading Loading @@ -756,7 +754,7 @@ int applypatch_flash(const char* source_filename, const char* target_filename, const char* target_sha1_str, size_t target_size) { printf("flash %s: ", target_filename); uint8_t target_sha1[SHA_DIGEST_SIZE]; uint8_t target_sha1[SHA_DIGEST_LENGTH]; if (ParseSha1(target_sha1_str, target_sha1) != 0) { printf("failed to parse tgt-sha1 \"%s\"\n", target_sha1_str); return 1; Loading @@ -777,7 +775,7 @@ int applypatch_flash(const char* source_filename, const char* target_filename, pieces.push_back(target_sha1_str); std::string fullname = android::base::Join(pieces, ':'); if (LoadPartitionContents(fullname.c_str(), &source_file) == 0 && memcmp(source_file.sha1, target_sha1, SHA_DIGEST_SIZE) == 0) { memcmp(source_file.sha1, target_sha1, SHA_DIGEST_LENGTH) == 0) { // The early-exit case: the image was already applied, this partition // has the desired hash, nothing for us to do. printf("already %s\n", short_sha1(target_sha1).c_str()); Loading @@ -786,7 +784,7 @@ int applypatch_flash(const char* source_filename, const char* target_filename, } if (LoadFileContents(source_filename, &source_file) == 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_SIZE) != 0) { if (memcmp(source_file.sha1, target_sha1, SHA_DIGEST_LENGTH) != 0) { // The source doesn't have desired checksum. printf("source \"%s\" doesn't have expected sha1 sum\n", source_filename); printf("expected: %s, found: %s\n", short_sha1(target_sha1).c_str(), Loading @@ -812,7 +810,7 @@ static int GenerateTarget(FileContents* source_file, const Value* copy_patch_value, const char* source_filename, const char* target_filename, const uint8_t target_sha1[SHA_DIGEST_SIZE], const uint8_t target_sha1[SHA_DIGEST_LENGTH], size_t target_size, const Value* bonus_data) { int retry = 1; Loading Loading @@ -957,7 +955,7 @@ static int GenerateTarget(FileContents* source_file, char* header = patch->data; ssize_t header_bytes_read = patch->size; SHA_init(&ctx); SHA1_Init(&ctx); int result; Loading Loading @@ -1001,8 +999,9 @@ static int GenerateTarget(FileContents* source_file, } } while (retry-- > 0); const uint8_t* current_target_sha1 = SHA_final(&ctx); if (memcmp(current_target_sha1, target_sha1, SHA_DIGEST_SIZE) != 0) { uint8_t current_target_sha1[SHA_DIGEST_LENGTH]; SHA1_Final(current_target_sha1, &ctx); if (memcmp(current_target_sha1, target_sha1, SHA_DIGEST_LENGTH) != 0) { printf("patch did not produce expected sha1\n"); return 1; } else { Loading
applypatch/applypatch.h +3 −3 Original line number Diff line number Diff line Loading @@ -18,16 +18,16 @@ #define _APPLYPATCH_H #include <sys/stat.h> #include "mincrypt/sha.h" #include "openssl/sha.h" #include "edify/expr.h" typedef struct _Patch { uint8_t sha1[SHA_DIGEST_SIZE]; uint8_t sha1[SHA_DIGEST_LENGTH]; const char* patch_filename; } Patch; typedef struct _FileContents { uint8_t sha1[SHA_DIGEST_SIZE]; uint8_t sha1[SHA_DIGEST_LENGTH]; unsigned char* data; ssize_t size; struct stat st; Loading
applypatch/bspatch.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <bzlib.h> #include "mincrypt/sha.h" #include "openssl/sha.h" #include "applypatch.h" void ShowBSDiffLicense() { Loading Loading @@ -114,7 +114,7 @@ int ApplyBSDiffPatch(const unsigned char* old_data, ssize_t old_size, printf("short write of output: %d (%s)\n", errno, strerror(errno)); return 1; } if (ctx) SHA_update(ctx, new_data, new_size); if (ctx) SHA1_Update(ctx, new_data, new_size); free(new_data); return 0; Loading
applypatch/imgpatch.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ #include <string.h> #include "zlib.h" #include "mincrypt/sha.h" #include "openssl/sha.h" #include "applypatch.h" #include "imgdiff.h" #include "utils.h" Loading Loading @@ -109,7 +109,7 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, printf("failed to read chunk %d raw data\n", i); return -1; } if (ctx) SHA_update(ctx, patch->data + pos, data_len); if (ctx) SHA1_Update(ctx, patch->data + pos, data_len); if (sink((unsigned char*)patch->data + pos, data_len, token) != data_len) { printf("failed to write chunk %d raw data\n", i); Loading Loading @@ -236,7 +236,7 @@ int ApplyImagePatch(const unsigned char* old_data, ssize_t old_size, (long)have); return -1; } if (ctx) SHA_update(ctx, temp_data, have); if (ctx) SHA1_Update(ctx, temp_data, have); } while (ret != Z_STREAM_END); deflateEnd(&strm); Loading