std::string vc1_info_c::create_checksum_info(memory_cptr packet) { if (!g_opt_checksum) return ""; return (boost::format(Y(" checksum 0x%|1$08x|")) % calc_adler32(packet->get_buffer(), packet->get_size())).str(); }
static void fill_hf(struct header *header, struct footer *footer, int pub_elems, void *pub_buf) { uint32_t randval = rand(); header->val = randval; header->size = pub_elems * sizeof(uint32_t); footer->val = randval; if (pub_buf != NULL && markers_mask & XmemMarkersCHECKSUM) header->checksum = calc_adler32(pub_buf, pub_elems); }
static XmemError evaluate_hf(struct header *header, struct footer *footer, int pub_elems, void *pub_buf) { if (header->val != footer->val) return XmemErrorINCOHERENT_MARKERS; if (pub_buf != NULL && markers_mask & XmemMarkersCHECKSUM) { if (header->checksum != calc_adler32(pub_buf, pub_elems)) return XmemErrorCHECKSUM; } return XmemErrorSUCCESS; }
static void parse_file(const std::string &file_name) { mm_file_io_c in(file_name); const size_t buf_size = 100000; int64_t size = in.get_size(); if (4 > size) mxerror(Y("File too small\n")); memory_cptr mem = memory_c::alloc(buf_size); unsigned char *ptr = mem->get_buffer(); ac3::parser_c parser; size_t num_read; do { num_read = in.read(ptr, buf_size); parser.add_bytes(ptr, num_read); if (num_read < buf_size) parser.flush(); while (parser.frame_available()) { ac3::frame_c frame = parser.get_frame(); std::string output = frame.to_string(g_opt_frame_headers); if (g_opt_checksum) { uint32_t adler32 = calc_adler32(frame.m_data->get_buffer(), frame.m_data->get_size()); output += (boost::format(" checksum 0x%|1$08x|") % adler32).str(); } mxinfo(boost::format("%1%\n") % output); } } while (num_read == buf_size); }
int generate_zync_state(FILE *in_file, struct zync_state *zs, zync_block_size_t block_size) { if (block_size <= 0) { fprintf(stderr, "block_size <= 0"); return -1; } if (fseek(in_file, 0, SEEK_SET) != 0) { return -1; } zync_file_size_t in_filelen = 0; zync_block_index_t block_id = 0; unsigned char *zync_checksum = safe_malloc(sizeof(unsigned char) * 16); //zync_checksum+1 if (zync_checksum == NULL) { return -1; } CC_MD5_CTX *zync_ctx = init_md5(); //zync_ctx+1 while (block_id < MAX_BLOCKS) { unsigned char *in_file_buf = safe_malloc(sizeof(unsigned char) * block_size); //in_file_buf+1 if (in_file_buf == NULL) { free(zync_checksum); //zync_checksum-1 free(zync_ctx); //zync_ctx-1 return -1; } size_t in_file_read = safe_fread(in_file_buf, block_size, in_file); if (in_file_read == -1) { free(zync_checksum); //zync_checksum-1 free(zync_ctx); //zync_ctx-1 free(in_file_buf); //in_file_buf-1 return -1; } zync_rsum_t adler = (zync_rsum_t) calc_adler32(in_file_buf, block_size); unsigned char *md5_buf = safe_malloc(sizeof(unsigned char) * 16); //md5_buf+1 if (md5_buf == NULL) { free(zync_checksum); //zync_checksum-1 free(zync_ctx); //zync_ctx-1 free(in_file_buf); //in_file_buf-1 return -1; } calc_md5((void *) in_file_buf, block_size, md5_buf); add_zync_block(zs, block_id++, 0, 0, adler, md5_buf); free(md5_buf); //md5_buf-1 update_md5(zync_ctx, (void *) in_file_buf, block_size); in_filelen += in_file_read; free(in_file_buf); //in_file_buf-1 if (feof(in_file)) { break; } } finalize_md5(zync_ctx, zync_checksum); //zync_ctx-1 for (int i = 0; i < 16; i++) { zs->checksum[i] = zync_checksum[i]; } free(zync_checksum); //zync_checksum-1 zs->filelen = in_filelen; zs->block_size = block_size; zs->block_fill_count = 0; return 0; }
int zync_original_file(FILE *original_file, FILE *download_file, zync_file_size_t original_filelen) { if (fseek(download_file, 0, SEEK_SET) != 0) { return -1; } struct zync_state *zs = read_zync_file(download_file); //zs+1 if (zs == NULL) { return -1; } zync_block_size_t block_size = zs->block_size; unsigned char *adler32_buf = safe_malloc(sizeof(unsigned char) * block_size); //adler32_buf+1 if (adler32_buf == NULL) { return -1; } if (fseek(download_file, 0, SEEK_SET) != 0) { free(zs); //zs-1 free(adler32_buf); //adler32_buf-1 return -1; } if (safe_fread(adler32_buf, block_size, original_file) == -1) { free(zs); //zs-1 free(adler32_buf); //adler32_buf-1 return -1; } zync_rsum_t rolling_adler32 = calc_adler32(adler32_buf, block_size); free(adler32_buf); //adler32_buf-1 unsigned char *prev_buf = safe_malloc(sizeof(unsigned char) * block_size); //prev_buf+1 if (prev_buf == NULL) { free(zs); //zs-1 return -1; } unsigned char *next_buf = safe_malloc(sizeof(unsigned char) * block_size); //next_buf+1 if (next_buf == NULL) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 return -1; } unsigned char prev_ch = 0; unsigned char next_ch = 0; off_t prev_offset = 0; off_t next_offset = block_size; zync_file_size_t index = 0; if (read_rolling_bufs(original_file, prev_buf, next_buf, block_size, prev_offset, next_offset) != 0) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 return -1; } while (true) { struct zync_block *unfilled_zb = find_unfilled_zync_block_by_rsum(zs, rolling_adler32); if (unfilled_zb != NULL) { unsigned char *data_buf = safe_malloc(sizeof(unsigned char) * block_size); //data_buf+1 if (data_buf == NULL) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 return -1; } unsigned char *checksum_buf = safe_malloc(sizeof(unsigned char) * 16); //checksum_buf+1 if (checksum_buf == NULL) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 free(data_buf); //data_buf-1 return -1; } if (fseek(original_file, prev_offset, SEEK_SET) != 0) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 free(data_buf); //data_buf-1 free(checksum_buf); //checksum_buf-1 return -1; } if (safe_fread(data_buf, block_size, original_file) == -1) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 free(data_buf); //data_buf-1 free(checksum_buf); //checksum_buf-1 return -1; } calc_md5(data_buf, block_size, checksum_buf); if (unfilled_zb != NULL) { if (unfilled_zb->rsum == rolling_adler32) { if (memcmp(unfilled_zb->checksum, checksum_buf, 16) == 0) { unfilled_zb->block_fill_flag = 1; zs->block_fill_count++; if (fseek(download_file, 0, SEEK_SET) != 0) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 free(data_buf); //data_buf-1 free(checksum_buf); //checksum_buf-1 return -1; } if (update_download_file(download_file, data_buf, zs, unfilled_zb->block_index) == -1) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 free(data_buf); //data_buf-1 free(checksum_buf); //checksum_buf-1 return -1; } } } } free(data_buf); //data_buf-1 free(checksum_buf); //checksum_buf-1 } prev_ch = prev_buf[index]; next_ch = next_buf[index]; rolling_adler32 = calc_rolling_adler32(rolling_adler32, block_size, prev_ch, next_ch); index = (index + 1) % block_size; if (index == 0) { prev_offset += block_size; next_offset += block_size; if (prev_offset >= original_filelen) { break; } if (read_rolling_bufs(original_file, prev_buf, next_buf, block_size, prev_offset, next_offset) != 0) { free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 return -1; } } } free(zs); //zs-1 free(prev_buf); //prev_buf-1 free(next_buf); //next_buf-1 return 0; }