Example #1
0
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();
}
Example #2
0
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);
}
Example #3
0
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;
}
Example #4
0
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);
}
Example #5
0
File: zync.c Project: rvergis/zync
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;
}
Example #6
0
File: zync.c Project: rvergis/zync
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;
}