libclamav/matcher-hash.h
c802edd5
 /*
c442ca9c
  *  Copyright (C) 2013-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
  *  Copyright (C) 2010-2013 Sourcefire, Inc.
c802edd5
  *
  *  Authors: aCaB
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
  *  published by the Free Software Foundation.
  *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  *  MA 02110-1301, USA.
  */
 
 #ifndef __MATCHER_HASH_H
 #define __MATCHER_HASH_H
 
 #if HAVE_CONFIG_H
 #include "clamav-config.h"
 #endif
 
95b2d68c
 #include "clamav-types.h"
c802edd5
 #include "hashtab.h"
 
 enum CLI_HASH_TYPE {
e37613ad
     CLI_HASH_MD5 = 0,
c802edd5
     CLI_HASH_SHA1,
fe2d967e
     CLI_HASH_SHA256,
c802edd5
 
     /* new hash types go above this line */
     CLI_HASH_AVAIL_TYPES
 };
 
e37613ad
 #define CLI_HASHLEN_MD5 16
 #define CLI_HASHLEN_SHA1 20
 #define CLI_HASHLEN_SHA256 32
 #define CLI_HASHLEN_MAX 32
 
c802edd5
 struct cli_sz_hash {
3faa9783
     uint8_t *hash_array;
c802edd5
     const char **virusnames;
     uint32_t items;
 };
 
 struct cli_hash_patt {
a08646d2
     struct cli_htu32 sizehashes[CLI_HASH_AVAIL_TYPES];
c802edd5
 };
 
e37613ad
 struct cli_hash_wild {
     struct cli_sz_hash hashes[CLI_HASH_AVAIL_TYPES];
 };
 
7cb86faf
 int hm_addhash_str(struct cli_matcher *root, const char *strhash, uint32_t size, const char *virusname);
 int hm_addhash_bin(struct cli_matcher *root, const void *binhash, enum CLI_HASH_TYPE type, uint32_t size, const char *virusname);
bb2f6b0b
 void hm_flush(struct cli_matcher *root);
2296ab0f
 int cli_hm_scan(const unsigned char *digest, uint32_t size, const char **virname, const struct cli_matcher *root, enum CLI_HASH_TYPE type);
e37613ad
 int cli_hm_scan_wild(const unsigned char *digest, const char **virname, const struct cli_matcher *root, enum CLI_HASH_TYPE type);
2296ab0f
 int cli_hm_have_size(const struct cli_matcher *root, enum CLI_HASH_TYPE type, uint32_t size);
e37613ad
 int cli_hm_have_wild(const struct cli_matcher *root, enum CLI_HASH_TYPE type);
211edda0
 int cli_hm_have_any(const struct cli_matcher *root, enum CLI_HASH_TYPE type);
3faa9783
 void hm_free(struct cli_matcher *root);
c802edd5
 
 #endif