summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhengchao <[email protected]>2017-07-08 18:34:56 +0800
committerzhengchao <[email protected]>2017-07-08 18:34:56 +0800
commit5ba84a69f1d08c3f93b8b1bd721421a28021c132 (patch)
treec4a722c5864041e5fe59873ac1494d89ab27adb4
parent6a89f18d2f0157dbcc5e21e772b47ffb7a61978a (diff)
修复fuzzy_digest中的bug。v2.0
-rw-r--r--inc/Maat_command.h1
-rw-r--r--src/entry/mesa_fuzzy.c295
-rw-r--r--src/entry/sfh_internal.h32
-rw-r--r--test/digest_gen.c2
4 files changed, 126 insertions, 204 deletions
diff --git a/inc/Maat_command.h b/inc/Maat_command.h
index d35a4d3..c5f4324 100644
--- a/inc/Maat_command.h
+++ b/inc/Maat_command.h
@@ -128,6 +128,7 @@ void Maat_add_region2cmd(struct Maat_cmd_t* cmd,int which_group,const struct Maa
void Maat_free_cmd(struct Maat_cmd_t* cmd);
int Maat_format_cmd(struct Maat_cmd_t* cmd, char* buffer, int size);
+// REGION_EXPR and REGION_SIMILARITY need to escape input string.
char* Maat_str_escape(char* dst,int size,const char*src);
// The following functions are NOT thread safe.
diff --git a/src/entry/mesa_fuzzy.c b/src/entry/mesa_fuzzy.c
index fcb1c93..ab4161b 100644
--- a/src/entry/mesa_fuzzy.c
+++ b/src/entry/mesa_fuzzy.c
@@ -17,19 +17,13 @@ const char * map_to64bytes =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-struct entry
-{
- unsigned int * r_array;
- unsigned int r_index;
- unsigned int r_size;
-};
double get_rs_entropy(unsigned int * r_array, unsigned int r_index);
int cmp(const void * a, const void * b);
void sfh_rs_entropy(IVI_seg_t * seg, void * user_para);
void sfh_tune_simulation(IVI_seg_t * seg, void * user_para);
void sfh_output_state_t(IVI_seg_t * seg, void * user_para);
-void write_uint_array(fuzzy_handle_inner_t * handle,unsigned int ** array, unsigned int *index,unsigned int *size,unsigned int value);
+int write_uint_array(unsigned int ** array, unsigned int *index,unsigned int *size,unsigned int value);
/**
* roll_state��ʼ��
*/
@@ -147,7 +141,7 @@ unsigned int fuzzy_feed(fuzzy_handle_t * handle, const char * data, unsigned int
if(_handle->sim_tuned_rs_cnt>EXPECT_SIGNATURE_LEN)
{
_handle->blocksize*= MULTIPLE;
- IVI_traverse(_handle->ivi, sfh_tune_seg, (void *)_handle);
+ IVI_traverse(_handle->ivi, sfh_tune_callback, (void *)_handle);
}
_handle->sim_tuned_rs_cnt = 0;
_handle->length_increase = 0;
@@ -195,42 +189,40 @@ unsigned long long get_blocksize(unsigned long long orilen)
sfh_seg_t* create_sfh_seg(fuzzy_handle_inner_t * _handle)
{
- sfh_seg_t*p=calloc(sizeof(sfh_seg_t),1);
+ sfh_seg_t*p=(sfh_seg_t*)calloc(sizeof(sfh_seg_t),1);
roll_init(&(p->r_state));
p->s_size = INIT_SIZE;
+ p->s_cnt=0;
p->r_size = INIT_SIZE;
+ p->r_cnt=0;
p->r_array = (unsigned int*)malloc(sizeof(unsigned int)*(p->r_size));
+ _handle->fuzzy_node_memory+=sizeof(unsigned int)*(p->r_size);
p->s_array = (struct zt_state_t*)malloc(sizeof(struct zt_state_t)*(p->s_size));
+ _handle->fuzzy_node_memory+=sizeof(struct zt_state_t)*(p->s_size);
zt_hash_initial(&(p->s_state));
- zt_hash_initial(&(p->ps));
- _handle->fuzzy_node_memory += sizeof(sfh_seg_t) + sizeof(unsigned int)*(p->r_size) + sizeof(struct zt_state_t)*(p->s_size);
+ zt_hash_initial(&(p->p_state));
+ _handle->fuzzy_node_memory += sizeof(sfh_seg_t);
return p;
}
//return freed memory size
int destroy_sfh_seg(sfh_seg_t*p)
{
int ret_size=0;
- //printf("before free p->s_array:\n");
if(p->s_array != NULL)
{
- //printf("p->s_array is not NULL\n");
free(p->s_array);
p->s_array=NULL;
ret_size+=p->s_size*sizeof(struct zt_state_t);
}
- //printf("after free p->s_array\n");
if(p->r_array != NULL)
{
free(p->r_array);
p->r_array=NULL;
ret_size+=p->r_size*sizeof(unsigned int);
}
- //printf("after free p->r_array\n");
ret_size+=sizeof(sfh_seg_t);
- //printf("before free p\n");
free(p);
p=NULL;
- //printf("after free p\n");
return ret_size;
}
/**
@@ -318,11 +310,11 @@ unsigned int segment_overlap(fuzzy_handle_inner_t * _handle, unsigned int size,
memset(&result_p,0,sizeof(result_p));
result_p.data=rp_buff;
result_p.size=sizeof(rp_buff);
- sfh_output_state(target_seg,&result_p);
+ sfh_output_callback(target_seg,&result_p);
memset(&result_n,0,sizeof(result_n));
result_n.data=rn_buff;
result_n.size=sizeof(rn_buff);
- sfh_output_state(co_overlap_segs[i],&result_n);
+ sfh_output_callback(co_overlap_segs[i],&result_n);
printf("%s[%llu:%llu] %s[%llu:%llu]\n",rp_buff,target_seg->left,
target_seg->right,
rn_buff,co_overlap_segs[i]->left,
@@ -396,69 +388,24 @@ double get_rs_entropy(unsigned int * r_array, unsigned int r_index)
}
-/*void sfh_rs_entropy(IVI_seg_t * seg, void * user_para)
-{
- sfh_seg_t * tmp = (sfh_seg_t *)(seg->data);
- int i = 0;
- for(i = 0; i < tmp->r_cnt; i++)
- {
- write_uint_array((unsigned int**)(&(((struct entry *)user_para)->r_array)), &(((struct entry *)user_para)->r_index),
- &(((struct entry *)user_para)->r_size), tmp->r_array[i]);
- }
-}*/
-
-
-void sfh_tune_seg(IVI_seg_t * seg, void * user_para)
+void sfh_tune_seg(sfh_seg_t * p, unsigned long long blocksize)
{
int i = 0, j = 0;
- sfh_seg_t * p = (sfh_seg_t *)(seg->data);
- if(p->r_cnt== 0)
- {
- return;
- }
-
- fuzzy_handle_inner_t * _handle = (fuzzy_handle_inner_t *)user_para;
- unsigned long long blocksize = _handle->blocksize;
-
-/* memcpy(&(p->ps_t),&(p->ps), sizeof(struct zt_state_t));
- memcpy(&(p->s_state_t),&(p->s_state), sizeof(struct zt_state_t));
- memcpy(&(p->r_state_t),&(p->r_state), sizeof(struct roll_state_t));
-
- if(p->r_array_t!=NULL)
- {
- free(p->r_array_t);
- }
- p->r_cnt_t = p->r_cnt;
- p->r_size_t = p->r_size;
- p->r_array_t = (unsigned int *)malloc(sizeof(unsigned int)*(p->r_size_t));
- memcpy(p->r_array_t, p->r_array, sizeof(unsigned int)*(p->r_cnt_t));
-
- if(p->s_array_t!=NULL)
- {
- free(p->s_array_t);
- }
- p->s_cnt_t = p->s_cnt;
- p->s_size_t = p->s_size;
- p->s_array_t = (struct zt_state_t *)malloc(sizeof(struct zt_state_t)*(p->s_size_t));
- memcpy(p->s_array_t, p->s_array, sizeof(struct zt_state_t)*(p->s_cnt_t));*/
-
struct zt_state_t tmp_zt;
int new_zt_cnt=0;
zt_hash_initial(&tmp_zt);
- _handle->s_state_cnt -= p->s_cnt;
for(j = 0; j < p->r_cnt; j++)
{
if(j == 0)
{
- zt_hash_arymul(&tmp_zt, &(p->ps));
+ zt_hash_arymul(&tmp_zt, &(p->p_state));
}
else
{
zt_hash_arymul(&tmp_zt, &(p->s_array[j - 1]));
}
-// if((p->r_array[j] &(blocksize-1)) == blocksize - 1)
if(p->r_array[j] % blocksize == blocksize - 1)
{
p->r_array[i]=p->r_array[j];
@@ -470,7 +417,7 @@ void sfh_tune_seg(IVI_seg_t * seg, void * user_para)
}
else
{
- p->ps.val=tmp_zt.val;
+ p->p_state.val=tmp_zt.val;
}
zt_hash_initial(&tmp_zt);
}
@@ -478,28 +425,41 @@ void sfh_tune_seg(IVI_seg_t * seg, void * user_para)
zt_hash_arymul(&tmp_zt, &(p->s_state));
if(i == 0)
{
- zt_hash_initial(&(p->ps));
+ zt_hash_initial(&(p->p_state));
}
p->s_state.val = tmp_zt.val;
p->s_cnt = new_zt_cnt;
p->r_cnt = i;
- _handle->s_state_cnt += p->s_cnt;
assert(p->r_cnt>=p->s_cnt);
-
+}
+void sfh_tune_callback(IVI_seg_t * seg, void * user_para)
+{
+ sfh_seg_t * p = (sfh_seg_t *)(seg->data);
+ if(p->r_cnt== 0)
+ {
+ return;
+ }
+
+ fuzzy_handle_inner_t * _handle = (fuzzy_handle_inner_t *)user_para;
+ unsigned long long blocksize = _handle->blocksize;
+ _handle->s_state_cnt-=p->s_cnt;
+ sfh_tune_seg(p, blocksize);
+ _handle->s_state_cnt+=p->s_cnt;
//printf("after state_cnt:%d,block:%llu\n",_handle->s_state_cnt,_handle->blocksize);
}
-void write_uint_array(fuzzy_handle_inner_t *_handle,unsigned int ** array,unsigned int *index, unsigned int *size,unsigned int value)
+int write_uint_array(unsigned int ** array,unsigned int *index, unsigned int *size,unsigned int value)
{
+ int mem_size=0;
if(*index==*size)
{
(*size)*=2;
+ mem_size+=*size;
*array=(unsigned int*)realloc(*array,sizeof(unsigned int)*(*size));
- _handle->fuzzy_node_memory += (*size)/2;
}
(*array)[*index]=value;
(*index)++;
- return;
+ return mem_size;
}
int sfh_update_seg(fuzzy_handle_inner_t * _handle, sfh_seg_t * p, const char * data, unsigned long data_size,unsigned long long blocksize)
@@ -522,13 +482,12 @@ int sfh_update_seg(fuzzy_handle_inner_t * _handle, sfh_seg_t * p, const char * d
roll_hash_value = roll_sum(&(p->r_state));
zt_hash(&(p->s_state),data[i]);
-// if((roll_hash_value & (blocksize-1)) == blocksize - 1)
if((roll_hash_value % (blocksize)) == blocksize - 1)
{
p->slice_num ++;
if(p->r_cnt==0)
{
- p->ps.val=p->s_state.val;
+ p->p_state.val=p->s_state.val;
}
else
{
@@ -536,14 +495,14 @@ int sfh_update_seg(fuzzy_handle_inner_t * _handle, sfh_seg_t * p, const char * d
printf("p->s_cnt:%u\n",p->s_cnt);
printf("p->s_size:%u\n",p->s_size);
#endif
- write_uint_array(_handle,(unsigned int**)(&(p->s_array)), &(p->s_cnt),&(p->s_size),p->s_state.val);
+ _handle->fuzzy_node_memory+=write_uint_array((unsigned int**)(&(p->s_array)), &(p->s_cnt),&(p->s_size),p->s_state.val);
state_inc_cnt++;
}
#ifdef DEBUG_PRINT
printf("p->r_cnt:%u\n",p->s_cnt);
printf("p->r_size:%u\n",p->s_size);
#endif
- write_uint_array(_handle,&(p->r_array),&(p->r_cnt),&(p->r_size),roll_hash_value);
+ _handle->fuzzy_node_memory+=write_uint_array(&(p->r_array),&(p->r_cnt),&(p->r_size),roll_hash_value);
zt_hash_initial(&(p->s_state));
}
}
@@ -563,52 +522,49 @@ int sfh_merge_seg(fuzzy_handle_inner_t * _handle, sfh_seg_t * p, sfh_seg_t * n,u
roll_hash(rs, n->mbuf[i]);
roll_hash_value = roll_sum(rs);
zt_hash(&(p->s_state), n->mbuf[i]);
-// if((roll_hash_value & (blocksize-1)) == blocksize - 1)
if(roll_hash_value % blocksize == blocksize - 1)
{
- //printf("roll_value : %u\n",roll_hash_value);
p->slice_num ++;
-// unsigned int * tmp = (unsigned int *)(p->s_array);
if(p->r_cnt == 0)
{
- p->ps.val = p->s_state.val;
+ p->p_state.val = p->s_state.val;
}
else
{
- write_uint_array(_handle,(unsigned int **)(&(p->s_array)), &(p->s_cnt), &(p->s_size), p->s_state.val);
+ _handle->fuzzy_node_memory+=write_uint_array((unsigned int **)(&(p->s_array)), &(p->s_cnt), &(p->s_size), p->s_state.val);
state_inc_cnt++;
}
- write_uint_array(_handle,&(p->r_array),&(p->r_cnt), &(p->r_size), roll_hash_value);
+ _handle->fuzzy_node_memory+=write_uint_array(&(p->r_array),&(p->r_cnt), &(p->r_size), roll_hash_value);
zt_hash_initial(&(p->s_state));
}
}
if(n->r_cnt==0)
{
- zt_hash_arymul(&(p->s_state),&(n->ps));
+ zt_hash_arymul(&(p->s_state),&(n->p_state));
zt_hash_arymul(&(p->s_state), &(n->s_state));
}
else
{
if(p->r_cnt==0)
{
- zt_hash_arymul(&(p->s_state),&(n->ps));
- p->ps.val=p->s_state.val;
+ zt_hash_arymul(&(p->s_state),&(n->p_state));
+ p->p_state.val=p->s_state.val;
}
else
{
- zt_hash_arymul(&(p->s_state), &(n->ps));
- write_uint_array(_handle,(unsigned int **)(&(p->s_array)), &(p->s_cnt), &(p->s_size), p->s_state.val);
+ zt_hash_arymul(&(p->s_state), &(n->p_state));
+ _handle->fuzzy_node_memory+=write_uint_array((unsigned int **)(&(p->s_array)), &(p->s_cnt), &(p->s_size), p->s_state.val);
state_inc_cnt++;
}
p->s_state.val=n->s_state.val;
}
for(i=0;i<n->r_cnt;i++)
{
- write_uint_array(_handle,&(p->r_array),&(p->r_cnt), &(p->r_size), n->r_array[i]);
+ _handle->fuzzy_node_memory+=write_uint_array(&(p->r_array),&(p->r_cnt), &(p->r_size), n->r_array[i]);
}
for(i=0;i<n->s_cnt;i++)
{
- write_uint_array(_handle, (unsigned int **)(&(p->s_array)), &(p->s_cnt), &(p->s_size), n->s_array[i].val);
+ _handle->fuzzy_node_memory+=write_uint_array((unsigned int **)(&(p->s_array)), &(p->s_cnt), &(p->s_size), n->s_array[i].val);
}
memcpy(&(p->r_state),&(n->r_state),sizeof(p->r_state));
assert(p->r_cnt>=p->s_cnt);
@@ -619,117 +575,94 @@ int sfh_merge_seg(fuzzy_handle_inner_t * _handle, sfh_seg_t * p, sfh_seg_t * n,u
/**
* ȡ���������������hash_resultֵ��������ƴ�ӣ��γ�����result�������������abc[1:100]def[200:300]���ָ�ʽ
*/
-int fuzzy_digest(fuzzy_handle_t * handle, char * result, unsigned int size)
+int fuzzy_digest(fuzzy_handle_t * handle, char * hash_buffer, unsigned int size)
{
- final_result * temp = (final_result *)malloc(sizeof(final_result));
- fuzzy_handle_inner_t* _handle=(fuzzy_handle_inner_t *)handle;
- temp->data = result;
- temp->size = size;
- temp->offset = 0;
- temp->first_ZTH_offset = 0;
- temp->last_ZTH_offset = 0;
- temp->offset += snprintf(temp->data,temp->size,"%llu:",_handle->blocksize);
- IVI_traverse(_handle->ivi, sfh_output_state, (void *) temp);
- _handle->blocksize*= MULTIPLE;
- IVI_traverse(_handle->ivi, sfh_tune_seg, (void *)_handle);
- temp->offset += snprintf(temp->data+temp->offset,temp->size,"#%llu:",_handle->blocksize);
- IVI_traverse(_handle->ivi, sfh_output_state, (void *) temp);
- //IVI_traverse(_handle->ivi, sfh_output_state_t, (void *) temp);
- result[temp->offset] = '\0';
- free(temp);
- temp = NULL;
- return 0;
+ fuzzy_handle_inner_t* _handle=(fuzzy_handle_inner_t *)handle;
+ unsigned int estimate_len=_handle->s_state_cnt+IVI_seg_cnt(_handle->ivi)*24+1;
+ int actual_len=0;
+ sfh_output_t result;
+ memset(&result,0,sizeof(result));
+ result.size_b1 = estimate_len;
+ result.size_b2 = estimate_len;
+ result.hash_b1 = (char*)calloc(sizeof(char),estimate_len);
+ result.hash_b2 = (char*)calloc(sizeof(char),estimate_len);
+ result.offset_b1 = 0;
+ result.offset_b2 = 0;
+ result.b1=_handle->blocksize;
+ result.b2=_handle->blocksize*MULTIPLE;
+
+ IVI_traverse(_handle->ivi, sfh_output_callback, (void *) &result);
+ /*
+ result.hash_b1[result.offset_b1]=result.last_char_b1;
+ result.offset_b1++;
+ result.hash_b2[result.offset_b2]=result.last_char_b2;
+ result.offset_b2++;
+ */
+ actual_len=snprintf(hash_buffer,size,"%llu:%s#%llu:%s",result.b1,result.hash_b1,
+ result.b2,result.hash_b2);
+
+ free(result.hash_b1);
+ result.hash_b1=NULL;
+ free(result.hash_b2);
+ result.hash_b2=NULL;
+ return actual_len;
}
-
-void sfh_output_state(IVI_seg_t * seg, void * user_para)
+sfh_seg_t* sfh_clone_seg(sfh_seg_t* origin)
{
- char buffer[2000];
- final_result * result = (final_result *)user_para;
- sfh_seg_t * node = (sfh_seg_t *)(seg->data);
- char hash_result[node->r_cnt + 1];
- hash_result[node->r_cnt] = '\0';
- int i = 0, j = 0, to_copy_len=0,this_len=0;
- if(node->s_cnt==0&&!(seg->left==0&&node->s_cnt > 0))
- {
- return;
- }
- memset(hash_result,0,sizeof(hash_result));
- if(seg->left == 0)
+ sfh_seg_t* clone=NULL;
+ clone=(sfh_seg_t*)calloc(sizeof(sfh_seg_t),1);
+ memcpy(clone,origin,sizeof(sfh_seg_t));
+ clone->s_array=calloc(sizeof(struct zt_state_t),clone->s_size);
+ memcpy(clone->s_array,origin->s_array,sizeof(struct zt_state_t)*clone->s_size);
+ clone->r_array=calloc(sizeof(unsigned int),clone->r_size);
+ memcpy(clone->r_array,origin->r_array,sizeof(unsigned int)*clone->r_size);
+ return clone;
+}
+int sfh_print_seg(sfh_seg_t* p, char* hash_result, int size,char* last_char)
+{
+ int idx=0,i=0;
+ if(p->left_offset== 0)
{
- hash_result[j] = map_to64bytes[zt_hash_code(&(node->ps)) & 0x3F];
- j++;
+ hash_result[idx] = map_to64bytes[zt_hash_code(&(p->p_state)) & 0x3F];
+ idx++;
}
- for(i = 0; i < node->s_cnt; i++,j++)
+ for(i = 0; i < p->s_cnt&&idx<size; i++,idx++)
{
- hash_result[j] = map_to64bytes[(node->s_array[i].val) & 0x3F];
+ hash_result[idx] = map_to64bytes[(p->s_array[i].val) & 0x3F];
}
- hash_result[j+1]='\0';
- if(0!=memcmp(&(node->s_state),ZT_INIT_VAL,sizeof(ZT_INIT_VAL)))
+ if(p->s_state.val!=*((unsigned int*)ZT_INIT_VAL))
{
- result->last_char=map_to64bytes[zt_hash_code(&(node->s_state)) & 0x3F];
+ *last_char=map_to64bytes[zt_hash_code(&(p->s_state)) & 0x3F];
}
else
{
- result->last_char='\0';
- }
- hash_result[j+1] = '\0';
- this_len=snprintf(buffer,sizeof(buffer), "[%llu:%llu]",seg->left, seg->right);
- this_len+=j;
-// this_len++;
- to_copy_len=MIN(this_len,result->size-result->offset);
- memcpy(result->data+result->offset,hash_result,j);
- result->offset+=j;
- memcpy(result->data+result->offset,buffer,to_copy_len-j);
- result->offset += to_copy_len-j;
- return;
+ *last_char='\0';
+ }
+ // p->right_offset-1 to get a closed interval
+ idx+=snprintf(hash_result+idx,size-idx,"[%llu:%llu]",p->left_offset, p->right_offset-1);
+ assert(idx<size);
+ return idx;
}
-
-
-
-void sfh_output_state_t(IVI_seg_t * seg, void * user_para)
+void sfh_output_callback(IVI_seg_t * seg, void * user_para)
{
- char buffer[2000];
- final_result * result = (final_result *)user_para;
- sfh_seg_t * node = (sfh_seg_t *)(seg->data);
- char hash_result[node->r_cnt_t + 1];
- hash_result[node->r_cnt_t] = '\0';
- int i = 0, j = 0, to_copy_len=0,this_len=0;
- if(node->s_cnt_t==0&&!(seg->left==0&&node->s_cnt_t > 0))
+ sfh_output_t * result = (sfh_output_t *)user_para;
+ sfh_seg_t* node = (sfh_seg_t *)(seg->data);
+ sfh_seg_t* tmp;
+ if(node->s_cnt==0&&!(seg->left==0&&node->s_cnt > 0))
{
return;
}
- memset(hash_result,0,sizeof(hash_result));
- if(seg->left == 0)
- {
- hash_result[j] = map_to64bytes[zt_hash_code(&(node->ps_t)) & 0x3F];
- j++;
- }
- for(i = 0; i < node->s_cnt_t; i++,j++)
- {
- hash_result[j] = map_to64bytes[(node->s_array_t[i].val) & 0x3F];
- }
- hash_result[j+1]='\0';
- if(0!=memcmp(&(node->s_state_t),ZT_INIT_VAL,sizeof(ZT_INIT_VAL)))
- {
- result->last_char=map_to64bytes[zt_hash_code(&(node->s_state_t)) & 0x3F];
- }
- else
- {
- result->last_char='\0';
- }
- hash_result[j+1] = '\0';
- this_len=snprintf(buffer,sizeof(buffer), "[%llu:%llu]",seg->left, seg->right);
- this_len+=j;
-// this_len++;
- to_copy_len=MIN(this_len,result->size-result->offset);
- memcpy(result->data+result->offset,hash_result,j);
- result->offset+=j;
- memcpy(result->data+result->offset,buffer,to_copy_len-j);
- result->offset += to_copy_len-j;
+ result->offset_b1+=sfh_print_seg(node,result->hash_b1+result->offset_b1,result->size_b1-result->offset_b1,&(result->last_char_b1));
+ tmp=sfh_clone_seg(node);
+ sfh_tune_seg(tmp, result->b2);
+ result->offset_b2+=sfh_print_seg(tmp,result->hash_b2+result->offset_b2,result->size_b2-result->offset_b2,&(result->last_char_b2));
+ destroy_sfh_seg(tmp);
+ tmp=NULL;
return;
}
+
/**
* ����fuzzy_hash�ĸ��ֳ���
*/
diff --git a/src/entry/sfh_internal.h b/src/entry/sfh_internal.h
index ee1fc4a..86fb064 100644
--- a/src/entry/sfh_internal.h
+++ b/src/entry/sfh_internal.h
@@ -39,7 +39,6 @@ struct roll_state_t
unsigned int n;
};
-
typedef struct
{
char mbuf[ROLLING_WINDOW-1];
@@ -47,15 +46,10 @@ typedef struct
int slice_num;
unsigned int msize;
- struct zt_state_t ps; //partial strong hash value
+ struct zt_state_t p_state; //partial strong hash value
struct zt_state_t s_state; //strong hash state
struct roll_state_t r_state;
- struct zt_state_t ps_t;
- struct zt_state_t s_state_t;
- struct roll_state_t r_state_t;
-
-
unsigned long long left_offset;
unsigned long long right_offset;
@@ -65,14 +59,6 @@ typedef struct
struct zt_state_t * s_array; //array to store strong(Tillichi-Zemor) hash value
unsigned int s_cnt; //always point to the next available position
unsigned int s_size;
-
- unsigned int * r_array_t;
- unsigned int r_cnt_t;
- unsigned int r_size_t;
- struct zt_state_t * s_array_t;
- unsigned int s_cnt_t;
- unsigned int s_size_t;
-
}sfh_seg_t;
@@ -93,13 +79,15 @@ typedef struct
typedef struct
{
- char * data; //�����������char����
- unsigned int size;
- unsigned int offset; //���鳤��
+ char * hash_b1; //�����������char����
+ char * hash_b2;
+ unsigned int size_b1,size_b2;
+ unsigned int offset_b1,offset_b2; //���鳤��
unsigned long long first_ZTH_offset;
unsigned long long last_ZTH_offset;
- char last_char;
-}final_result;
+ char last_char_b1, last_char_b2;
+ unsigned long long b1,b2;
+}sfh_output_t;
typedef struct
@@ -115,8 +103,8 @@ unsigned long long get_blocksize(unsigned long long orilen);
int sfh_merge_seg(fuzzy_handle_inner_t * _handle,sfh_seg_t * seg, sfh_seg_t * next_seg, unsigned long long blocksize);
int sfh_update_seg(fuzzy_handle_inner_t * _handle,sfh_seg_t * p, const char * data, unsigned long data_size, unsigned long long blocksize);
unsigned int segment_overlap(fuzzy_handle_inner_t * handle, unsigned int size, unsigned long long offset, const char * data);
-void sfh_tune_seg(IVI_seg_t * seg, void * user_para);
-void sfh_output_state(IVI_seg_t * seg, void * user_para);
+void sfh_tune_callback(IVI_seg_t * seg, void * user_para);
+void sfh_output_callback(IVI_seg_t * seg, void * user_para);
void fuzzy_hash_length(IVI_seg_t * seg, void * user_para);
unsigned long long fuzzy_status(fuzzy_handle_t * handle, int type);
#endif
diff --git a/test/digest_gen.c b/test/digest_gen.c
index 532662f..7f0a81e 100644
--- a/test/digest_gen.c
+++ b/test/digest_gen.c
@@ -107,7 +107,7 @@ void dir_digest(int argc, char * argv[])
hash_length = fuzzy_status(fhandle, HASH_LENGTH);
file_effective_length = fuzzy_status(fhandle, EFFECTIVE_LENGTH);
digest_result_buff= (char *)malloc(sizeof(char) * (hash_length));
- if(fuzzy_digest(fhandle, digest_result_buff, hash_length) != 0)
+ if(fuzzy_digest(fhandle, digest_result_buff, hash_length) < 0)
{
printf("error\n");
continue;