Example #1
0
File: md.c Project: IFGHou/AIDE
void md2line(struct md_container* md,struct db_line* line) {
  
  error(255,"md2line \n");
  
#ifdef _PARAMETER_CHECK_
  if (md==NULL||line==NULL) {
    return RETFAIL;
  }
#endif

#define copyhash(a,b,c)        \
  if (line->attr&a) {          \
    error(255,"Line has %llu\n",a); \
    if (md->calc_attr&a) {     \
      error(255,"copying %llu\n",a); \
      line->b=(byte*)malloc(c);       \
      memcpy(line->b,md->b,c); \
    } else {                   \
      line->attr&=~a;          \
    }                          \
  }
  
  
  copyhash(DB_MD5,md5,HASH_MD5_LEN);
  copyhash(DB_SHA1,sha1,HASH_SHA1_LEN);
  copyhash(DB_RMD160,rmd160,HASH_RMD160_LEN);
  copyhash(DB_TIGER,tiger,HASH_TIGER_LEN);
  copyhash(DB_CRC32,crc32,HASH_CRC32_LEN);
  copyhash(DB_HAVAL,haval,HASH_HAVAL_LEN);
  copyhash(DB_GOST,gost,HASH_GOST_LEN);
  copyhash(DB_CRC32B,crc32b,HASH_CRC32B_LEN);

  copyhash(DB_SHA256,sha256,HASH_SHA256_LEN);
  copyhash(DB_SHA512,sha512,HASH_SHA512_LEN);
  copyhash(DB_WHIRLPOOL,whirlpool,HASH_WHIRLPOOL_LEN);
}
Example #2
0
item_t* dichosolve(int size1, item_t* first, int size2, item_t* second, knint cons, int* rezsize) {

  if( size1 == -1 && size2 == -1 ){
    *rezsize = -1;
    return NULL;
  }
  if ( size1 == -1 ) {
    *rezsize = size2;
    return copyhash (second);
  }
  if ( size2 == -1 ) {
    *rezsize = size1;
    return copyhash (first);
  }

  //item_t *its = createitems0 (cons), *fp, *sp;
  item_t *its = NULL, *fp, *sp, *tmp;
  knint w, p;
  int cnt = 0; // real count of @its

  knint *wp, *pp;

  // put all elements of first table
  for ( fp = first ; fp != NULL && *(fp->w) <= cons ; fp = fp->hh.next ) {
    cnt++;
    sp = copyitem (fp);
    HASH_ADD_KEYPTR ( hh, its, sp->w, KNINT_SIZE, sp );
  }
  // put new elements of second table or replace elements having less value
  for( fp = second ; fp!= NULL && *(fp->w) <= cons ; fp = fp->hh.next ) {
    HASH_FIND (hh, its, fp->w, KNINT_SIZE, tmp);
    if( tmp == NULL ){
      cnt++;
      tmp = copyitem (fp);
      HASH_ADD_KEYPTR (hh, its, tmp->w, KNINT_SIZE, tmp);
    } else {
      *(tmp->p) = MAXINT ( *(fp->p) , *(tmp->p) );
    }
  }
  // pairwise addition
  for( fp = first ; fp != NULL ; fp = fp->hh.next ){
    for( sp = second ; sp != NULL && (p = *(fp->p) + *(sp->p),w = *(fp->w) + *(sp->w), w<=cons) ; sp = sp->hh.next ){
      HASH_FIND (hh, its, &w, KNINT_SIZE, tmp);
      if( tmp == NULL ){
        cnt++;
	tmp = copyitem ( sp );
        *(tmp->w) = w;
        *(tmp->p) = p;
        HASH_ADD_KEYPTR (hh, its, tmp->w, KNINT_SIZE, tmp);
      } else {
        *(tmp->p) = MAXINT( *(tmp->p),p );
      }
    }
  }

  // save non-zero elements in solid array
  if( cnt == 0 ){
    *rezsize = -1;
    return NULL;
  }

  *rezsize = cnt;
  return its;
}