ClamAV 1.3.1
ClamAV open source email, web, and end-point anti-virus toolkit.
Loading...
Searching...
No Matches
clamav.h
1/*
2 * Copyright (C) 2013-2024 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3 * Copyright (C) 2007-2013 Sourcefire, Inc.
4 *
5 * Authors: Tomasz Kojm
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19 * MA 02110-1301, USA.
20 */
21
22#ifndef __CLAMAV_H
23#define __CLAMAV_H
24
25#ifdef _WIN32
26#ifndef OWN_WINSOCK
27#include <winsock2.h>
28#endif
29#endif
30
31#include <openssl/ssl.h>
32#include <openssl/err.h>
33
34/* Certain OSs already use 64bit variables in their stat struct */
35#if (!defined(__FreeBSD__) && !defined(__APPLE__))
36#define STAT64_OK 1
37#else
38#define STAT64_OK 0
39#endif
40
41#if defined(HAVE_STAT64) && STAT64_OK
42
43#include <unistd.h>
44
45#define STATBUF struct stat64
46#define CLAMSTAT stat64
47#define LSTAT lstat64
48#define FSTAT fstat64
49#define safe_open(a, b) open(a, b | O_LARGEFILE)
50
51#else
52
53#define STATBUF struct stat
54#define CLAMSTAT stat
55#define LSTAT lstat
56#define FSTAT fstat
57/* Nothing is safe in windows, not even open, safe_open defined under /win32 */
58#ifndef _WIN32
59#define safe_open open
60#endif
61
62#endif
63
64#define UNUSEDPARAM(x) (void)(x)
65
66#include <sys/types.h>
67#include <sys/stat.h>
68#include <stdbool.h>
69
70#include "clamav-types.h"
71#include "clamav-version.h"
72
73#ifdef __cplusplus
74extern "C" {
75#endif
76
77#define CL_COUNT_PRECISION 4096
78
79/* return codes */
80typedef enum cl_error_t {
81 /* libclamav specific */
82 CL_CLEAN = 0,
83 CL_SUCCESS = 0,
84 CL_VIRUS,
85 CL_ENULLARG,
86 CL_EARG,
87 CL_EMALFDB,
88 CL_ECVD,
89 CL_EVERIFY,
90 CL_EUNPACK,
91
92 /* I/O and memory errors */
93 CL_EOPEN,
94 CL_ECREAT,
95 CL_EUNLINK,
96 CL_ESTAT,
97 CL_EREAD,
98 CL_ESEEK,
99 CL_EWRITE,
100 CL_EDUP,
101 CL_EACCES,
102 CL_ETMPFILE,
103 CL_ETMPDIR,
104 CL_EMAP,
105 CL_EMEM,
106 CL_ETIMEOUT,
107
108 /* internal (not reported outside libclamav) */
109 CL_BREAK,
110 CL_EMAXREC,
111 CL_EMAXSIZE,
112 CL_EMAXFILES,
113 CL_EFORMAT,
114 CL_EPARSE,
115 CL_EBYTECODE, /* may be reported in testmode */
116 CL_EBYTECODE_TESTFAIL, /* may be reported in testmode */
117
118 /* c4w error codes */
119 CL_ELOCK,
120 CL_EBUSY,
121 CL_ESTATE,
122
123 CL_VERIFIED, /* The binary has been deemed trusted */
124 CL_ERROR, /* Unspecified / generic error */
125
126 /* no error codes below this line please */
127 CL_ELAST_ERROR
128} cl_error_t;
129
130/* db options */
131// clang-format off
132#define CL_DB_PHISHING 0x2
133#define CL_DB_PHISHING_URLS 0x8
134#define CL_DB_PUA 0x10
135#define CL_DB_CVDNOTMP 0x20 /* obsolete */
136#define CL_DB_OFFICIAL 0x40 /* internal */
137#define CL_DB_PUA_MODE 0x80
138#define CL_DB_PUA_INCLUDE 0x100
139#define CL_DB_PUA_EXCLUDE 0x200
140#define CL_DB_COMPILED 0x400 /* internal */
141#define CL_DB_DIRECTORY 0x800 /* internal */
142#define CL_DB_OFFICIAL_ONLY 0x1000
143#define CL_DB_BYTECODE 0x2000
144#define CL_DB_SIGNED 0x4000 /* internal */
145#define CL_DB_BYTECODE_UNSIGNED 0x8000 /* Caution: You should never run bytecode signatures from untrusted sources. Doing so may result in arbitrary code execution. */
146#define CL_DB_UNSIGNED 0x10000 /* internal */
147#define CL_DB_BYTECODE_STATS 0x20000
148#define CL_DB_ENHANCED 0x40000
149#define CL_DB_PCRE_STATS 0x80000
150#define CL_DB_YARA_EXCLUDE 0x100000
151#define CL_DB_YARA_ONLY 0x200000
152
153/* recommended db settings */
154#define CL_DB_STDOPT (CL_DB_PHISHING | CL_DB_PHISHING_URLS | CL_DB_BYTECODE)
155
156/*** scan options ***/
158 uint32_t general;
159 uint32_t parse;
160 uint32_t heuristic;
161 uint32_t mail;
162 uint32_t dev;
163};
164
165/* general */
166#define CL_SCAN_GENERAL_ALLMATCHES 0x1 /* scan in all-match mode */
167#define CL_SCAN_GENERAL_COLLECT_METADATA 0x2 /* collect metadata (--gen-json) */
168#define CL_SCAN_GENERAL_HEURISTICS 0x4 /* option to enable heuristic alerts */
169#define CL_SCAN_GENERAL_HEURISTIC_PRECEDENCE 0x8 /* allow heuristic match to take precedence. */
170#define CL_SCAN_GENERAL_UNPRIVILEGED 0x10 /* scanner will not have read access to files. */
171
172/* parsing capabilities options */
173#define CL_SCAN_PARSE_ARCHIVE 0x1
174#define CL_SCAN_PARSE_ELF 0x2
175#define CL_SCAN_PARSE_PDF 0x4
176#define CL_SCAN_PARSE_SWF 0x8
177#define CL_SCAN_PARSE_HWP3 0x10
178#define CL_SCAN_PARSE_XMLDOCS 0x20
179#define CL_SCAN_PARSE_MAIL 0x40
180#define CL_SCAN_PARSE_OLE2 0x80
181#define CL_SCAN_PARSE_HTML 0x100
182#define CL_SCAN_PARSE_PE 0x200
183#define CL_SCAN_PARSE_ONENOTE 0x400
184
185/* heuristic alerting options */
186#define CL_SCAN_HEURISTIC_BROKEN 0x2 /* alert on broken PE and broken ELF files */
187#define CL_SCAN_HEURISTIC_EXCEEDS_MAX 0x4 /* alert when files exceed scan limits (filesize, max scansize, or max recursion depth) */
188#define CL_SCAN_HEURISTIC_PHISHING_SSL_MISMATCH 0x8 /* alert on SSL mismatches */
189#define CL_SCAN_HEURISTIC_PHISHING_CLOAK 0x10 /* alert on cloaked URLs in emails */
190#define CL_SCAN_HEURISTIC_MACROS 0x20 /* alert on OLE2 files containing macros */
191#define CL_SCAN_HEURISTIC_ENCRYPTED_ARCHIVE 0x40 /* alert if archive is encrypted (rar, zip, etc) */
192#define CL_SCAN_HEURISTIC_ENCRYPTED_DOC 0x80 /* alert if a document is encrypted (pdf, docx, etc) */
193#define CL_SCAN_HEURISTIC_PARTITION_INTXN 0x100 /* alert if partition table size doesn't make sense */
194#define CL_SCAN_HEURISTIC_STRUCTURED 0x200 /* data loss prevention options, i.e. alert when detecting personal information */
195#define CL_SCAN_HEURISTIC_STRUCTURED_SSN_NORMAL 0x400 /* alert when detecting social security numbers */
196#define CL_SCAN_HEURISTIC_STRUCTURED_SSN_STRIPPED 0x800 /* alert when detecting stripped social security numbers */
197#define CL_SCAN_HEURISTIC_STRUCTURED_CC 0x1000 /* alert when detecting credit card numbers */
198#define CL_SCAN_HEURISTIC_BROKEN_MEDIA 0x2000 /* alert if a file does not match the identified file format, works with JPEG, TIFF, GIF, PNG */
199
200/* mail scanning options */
201#define CL_SCAN_MAIL_PARTIAL_MESSAGE 0x1
202
203/* dev options */
204#define CL_SCAN_DEV_COLLECT_SHA 0x1 /* Enables hash output in sha-collect builds - for internal use only */
205#define CL_SCAN_DEV_COLLECT_PERFORMANCE_INFO 0x2 /* collect performance timings */
206
207/* cl_countsigs options */
208#define CL_COUNTSIGS_OFFICIAL 0x1
209#define CL_COUNTSIGS_UNOFFICIAL 0x2
210#define CL_COUNTSIGS_ALL (CL_COUNTSIGS_OFFICIAL | CL_COUNTSIGS_UNOFFICIAL)
211
212/* For the new engine_options bit field in the engine */
213#define ENGINE_OPTIONS_NONE 0x0
214#define ENGINE_OPTIONS_DISABLE_CACHE 0x1
215#define ENGINE_OPTIONS_FORCE_TO_DISK 0x2
216#define ENGINE_OPTIONS_DISABLE_PE_STATS 0x4
217#define ENGINE_OPTIONS_DISABLE_PE_CERTS 0x8
218#define ENGINE_OPTIONS_PE_DUMPCERTS 0x10
219// clang-format on
220
221struct cl_engine;
222struct cl_settings;
223
224/* ----------------------------------------------------------------------------
225 * Enable global libclamav features.
226 */
227
231extern void cl_debug(void);
232
238extern void cl_always_gen_section_hash(void);
239
240/* ----------------------------------------------------------------------------
241 * Scan engine functions.
242 */
243
252int cl_initialize_crypto(void);
253
260void cl_cleanup_crypto(void);
261
262#define CL_INIT_DEFAULT 0x0
269extern cl_error_t cl_init(unsigned int initoptions);
270
278extern struct cl_engine *cl_engine_new(void);
279
280enum cl_engine_field {
281 CL_ENGINE_MAX_SCANSIZE, /* uint64_t */
282 CL_ENGINE_MAX_FILESIZE, /* uint64_t */
283 CL_ENGINE_MAX_RECURSION, /* uint32_t */
284 CL_ENGINE_MAX_FILES, /* uint32_t */
285 CL_ENGINE_MIN_CC_COUNT, /* uint32_t */
286 CL_ENGINE_MIN_SSN_COUNT, /* uint32_t */
287 CL_ENGINE_PUA_CATEGORIES, /* (char *) */
288 CL_ENGINE_DB_OPTIONS, /* uint32_t */
289 CL_ENGINE_DB_VERSION, /* uint32_t */
290 CL_ENGINE_DB_TIME, /* time_t */
291 CL_ENGINE_AC_ONLY, /* uint32_t */
292 CL_ENGINE_AC_MINDEPTH, /* uint32_t */
293 CL_ENGINE_AC_MAXDEPTH, /* uint32_t */
294 CL_ENGINE_TMPDIR, /* (char *) */
295 CL_ENGINE_KEEPTMP, /* uint32_t */
296 CL_ENGINE_BYTECODE_SECURITY, /* uint32_t */
297 CL_ENGINE_BYTECODE_TIMEOUT, /* uint32_t */
298 CL_ENGINE_BYTECODE_MODE, /* uint32_t */
299 CL_ENGINE_MAX_EMBEDDEDPE, /* uint64_t */
300 CL_ENGINE_MAX_HTMLNORMALIZE, /* uint64_t */
301 CL_ENGINE_MAX_HTMLNOTAGS, /* uint64_t */
302 CL_ENGINE_MAX_SCRIPTNORMALIZE, /* uint64_t */
303 CL_ENGINE_MAX_ZIPTYPERCG, /* uint64_t */
304 CL_ENGINE_FORCETODISK, /* uint32_t */
305 CL_ENGINE_CACHE_SIZE, /* uint32_t */
306 CL_ENGINE_DISABLE_CACHE, /* uint32_t */
307 CL_ENGINE_DISABLE_PE_STATS, /* uint32_t */
308 CL_ENGINE_STATS_TIMEOUT, /* uint32_t */
309 CL_ENGINE_MAX_PARTITIONS, /* uint32_t */
310 CL_ENGINE_MAX_ICONSPE, /* uint32_t */
311 CL_ENGINE_MAX_RECHWP3, /* uint32_t */
312 CL_ENGINE_MAX_SCANTIME, /* uint32_t */
313 CL_ENGINE_PCRE_MATCH_LIMIT, /* uint64_t */
314 CL_ENGINE_PCRE_RECMATCH_LIMIT, /* uint64_t */
315 CL_ENGINE_PCRE_MAX_FILESIZE, /* uint64_t */
316 CL_ENGINE_DISABLE_PE_CERTS, /* uint32_t */
317 CL_ENGINE_PE_DUMPCERTS, /* uint32_t */
318};
319
320enum bytecode_security {
321 CL_BYTECODE_TRUST_ALL = 0, /* obsolete */
322 CL_BYTECODE_TRUST_SIGNED, /* default */
323 CL_BYTECODE_TRUST_NOTHING /* paranoid setting */
324};
325
326enum bytecode_mode {
327 CL_BYTECODE_MODE_AUTO = 0, /* JIT if possible, fallback to interpreter */
328 CL_BYTECODE_MODE_JIT, /* force JIT */
329 CL_BYTECODE_MODE_INTERPRETER, /* force interpreter */
330 CL_BYTECODE_MODE_TEST, /* both JIT and interpreter, compare results, all failures are fatal */
331 CL_BYTECODE_MODE_OFF /* for query only, not settable */
332};
333
335 unsigned char md5[16];
336 size_t len;
337};
338
339typedef struct cli_stats_sections {
340 size_t nsections;
341 struct cli_section_hash *sections;
343
356extern cl_error_t cl_engine_set_num(struct cl_engine *engine, enum cl_engine_field field, long long num);
357
366extern long long cl_engine_get_num(const struct cl_engine *engine, enum cl_engine_field field, int *err);
367
384extern cl_error_t cl_engine_set_str(struct cl_engine *engine, enum cl_engine_field field, const char *str);
385
394extern const char *cl_engine_get_str(const struct cl_engine *engine, enum cl_engine_field field, int *err);
395
404extern struct cl_settings *cl_engine_settings_copy(const struct cl_engine *engine);
405
416extern cl_error_t cl_engine_settings_apply(struct cl_engine *engine, const struct cl_settings *settings);
417
425extern cl_error_t cl_engine_settings_free(struct cl_settings *settings);
426
437extern cl_error_t cl_engine_compile(struct cl_engine *engine);
438
451extern cl_error_t cl_engine_addref(struct cl_engine *engine);
452
463extern cl_error_t cl_engine_free(struct cl_engine *engine);
464
465/* ----------------------------------------------------------------------------
466 * Callback function type definitions.
467 */
468
483typedef cl_error_t (*clcb_pre_cache)(int fd, const char *type, void *context);
492extern void cl_engine_set_clcb_pre_cache(struct cl_engine *engine, clcb_pre_cache callback);
493
494/*
495 * Attributes of each layer in scan.
496 */
497#define LAYER_ATTRIBUTES_NONE 0x0
498#define LAYER_ATTRIBUTES_NORMALIZED 0x1
499#define LAYER_ATTRIBUTES_DECRYPTED 0x2
524typedef cl_error_t (*clcb_file_inspection)(int fd, const char *type, const char **ancestors, size_t parent_file_size,
525 const char *file_name, size_t file_size, const char *file_buffer,
526 uint32_t recursion_level, uint32_t layer_attributes, void *context);
538extern void cl_engine_set_clcb_file_inspection(struct cl_engine *engine, clcb_file_inspection callback);
539
555typedef cl_error_t (*clcb_pre_scan)(int fd, const char *type, void *context);
564extern void cl_engine_set_clcb_pre_scan(struct cl_engine *engine, clcb_pre_scan callback);
565
582typedef cl_error_t (*clcb_post_scan)(int fd, int result, const char *virname, void *context);
591extern void cl_engine_set_clcb_post_scan(struct cl_engine *engine, clcb_post_scan callback);
592
607typedef void (*clcb_virus_found)(int fd, const char *virname, void *context);
616extern void cl_engine_set_clcb_virus_found(struct cl_engine *engine, clcb_virus_found callback);
617
634typedef int (*clcb_sigload)(const char *type, const char *name, unsigned int custom, void *context);
644extern void cl_engine_set_clcb_sigload(struct cl_engine *engine, clcb_sigload callback, void *context);
645
646enum cl_msg {
647 /* leave room for more message levels in the future */
648 CL_MSG_INFO_VERBOSE = 32, /* verbose */
649 CL_MSG_WARN = 64, /* LibClamAV WARNING: */
650 CL_MSG_ERROR = 128 /* LibClamAV ERROR: */
651};
652
667typedef cl_error_t (*clcb_progress)(size_t total_items, size_t now_completed, void *context);
668
679extern void cl_engine_set_clcb_sigload_progress(struct cl_engine *engine, clcb_progress callback, void *context);
680
695extern void cl_engine_set_clcb_engine_compile_progress(struct cl_engine *engine, clcb_progress callback, void *context);
696
711extern void cl_engine_set_clcb_engine_free_progress(struct cl_engine *engine, clcb_progress callback, void *context);
712
736typedef void (*clcb_msg)(enum cl_msg severity, const char *fullmsg, const char *msg, void *context);
742extern void cl_set_clcb_msg(clcb_msg callback);
743
756typedef void (*clcb_hash)(int fd, unsigned long long size, const unsigned char *md5, const char *virname, void *context);
765extern void cl_engine_set_clcb_hash(struct cl_engine *engine, clcb_hash callback);
766
786typedef cl_error_t (*clcb_meta)(const char *container_type, unsigned long fsize_container, const char *filename,
787 unsigned long fsize_real, int is_encrypted, unsigned int filepos_container, void *context);
796extern void cl_engine_set_clcb_meta(struct cl_engine *engine, clcb_meta callback);
797
808typedef int (*clcb_file_props)(const char *j_propstr, int rc, void *cbdata);
817extern void cl_engine_set_clcb_file_props(struct cl_engine *engine, clcb_file_props callback);
818
828typedef int (*clcb_generic_data)(const unsigned char *const data, const size_t data_len, void *cbdata);
829
838extern void cl_engine_set_clcb_vba(struct cl_engine *engine, clcb_generic_data callback);
839
840/* ----------------------------------------------------------------------------
841 * Statistics/telemetry gathering callbacks.
842 *
843 * The statistics callback functions may be used to implement a telemetry
844 * gathering feature.
845 *
846 * The structure definition for `cbdata` is entirely up to the caller, as are
847 * the implementations of each of the callback functions defined below.
848 */
849
861extern void cl_engine_set_stats_set_cbdata(struct cl_engine *engine, void *cbdata);
862
872typedef void (*clcb_stats_add_sample)(const char *virname, const unsigned char *md5, size_t size, stats_section_t *sections, void *cbdata);
881extern void cl_engine_set_clcb_stats_add_sample(struct cl_engine *engine, clcb_stats_add_sample callback);
882
891typedef void (*clcb_stats_remove_sample)(const char *virname, const unsigned char *md5, size_t size, void *cbdata);
900extern void cl_engine_set_clcb_stats_remove_sample(struct cl_engine *engine, clcb_stats_remove_sample callback);
901
910typedef void (*clcb_stats_decrement_count)(const char *virname, const unsigned char *md5, size_t size, void *cbdata);
919extern void cl_engine_set_clcb_stats_decrement_count(struct cl_engine *engine, clcb_stats_decrement_count callback);
920
927typedef void (*clcb_stats_submit)(struct cl_engine *engine, void *cbdata);
936extern void cl_engine_set_clcb_stats_submit(struct cl_engine *engine, clcb_stats_submit callback);
937
944typedef void (*clcb_stats_flush)(struct cl_engine *engine, void *cbdata);
953extern void cl_engine_set_clcb_stats_flush(struct cl_engine *engine, clcb_stats_flush callback);
954
960typedef size_t (*clcb_stats_get_num)(void *cbdata);
969extern void cl_engine_set_clcb_stats_get_num(struct cl_engine *engine, clcb_stats_get_num callback);
970
976typedef size_t (*clcb_stats_get_size)(void *cbdata);
985extern void cl_engine_set_clcb_stats_get_size(struct cl_engine *engine, clcb_stats_get_size callback);
986
992typedef char *(*clcb_stats_get_hostid)(void *cbdata);
1001extern void cl_engine_set_clcb_stats_get_hostid(struct cl_engine *engine, clcb_stats_get_hostid callback);
1002
1008extern void cl_engine_stats_enable(struct cl_engine *engine);
1009
1010/* ----------------------------------------------------------------------------
1011 * File scanning.
1012 */
1013
1025extern cl_error_t cl_scandesc(int desc, const char *filename, const char **virname, unsigned long int *scanned, const struct cl_engine *engine, struct cl_scan_options *scanoptions);
1026
1041extern cl_error_t cl_scandesc_callback(int desc, const char *filename, const char **virname, unsigned long int *scanned, const struct cl_engine *engine, struct cl_scan_options *scanoptions, void *context);
1042
1053extern cl_error_t cl_scanfile(const char *filename, const char **virname, unsigned long int *scanned, const struct cl_engine *engine, struct cl_scan_options *scanoptions);
1054
1068extern cl_error_t cl_scanfile_callback(const char *filename, const char **virname, unsigned long int *scanned, const struct cl_engine *engine, struct cl_scan_options *scanoptions, void *context);
1069
1070/* ----------------------------------------------------------------------------
1071 * Database handling.
1072 */
1073
1083extern cl_error_t cl_load(const char *path, struct cl_engine *engine, unsigned int *signo, unsigned int dboptions);
1084
1090extern const char *cl_retdbdir(void);
1091
1092/* ----------------------------------------------------------------------------
1093 * CVD / database functions
1094 */
1095
1096struct cl_cvd { /* field no. */
1097 char *time; /* 2 */
1098 unsigned int version; /* 3 */
1099 unsigned int sigs; /* 4 */
1100 unsigned int fl; /* 5 */
1101 /* padding */
1102 char *md5; /* 6 */
1103 char *dsig; /* 7 */
1104 char *builder; /* 8 */
1105 unsigned int stime; /* 9 */
1106};
1107
1116extern struct cl_cvd *cl_cvdhead(const char *file);
1117
1129extern struct cl_cvd *cl_cvdparse(const char *head);
1130
1137extern cl_error_t cl_cvdverify(const char *file);
1138
1144extern void cl_cvdfree(struct cl_cvd *cvd);
1145
1156extern cl_error_t cl_cvdunpack(const char *file, const char *dir, bool dont_verify);
1157
1168extern cl_error_t cl_cvdgetage(const char *path, time_t *age_seconds);
1169
1170/* ----------------------------------------------------------------------------
1171 * DB directory stat functions.
1172 * Use these functions to watch for database changes.
1173 */
1174
1175struct cl_stat {
1176 char *dir;
1177 STATBUF *stattab;
1178 char **statdname;
1179 unsigned int entries;
1180};
1181
1191extern cl_error_t cl_statinidir(const char *dirname, struct cl_stat *dbstat);
1192
1200extern int cl_statchkdir(const struct cl_stat *dbstat);
1201
1209extern cl_error_t cl_statfree(struct cl_stat *dbstat);
1210
1219extern cl_error_t cl_countsigs(const char *path, unsigned int countoptions, unsigned int *sigs);
1220
1221/* ----------------------------------------------------------------------------
1222 * Software versions.
1223 */
1224
1230extern unsigned int cl_retflevel(void);
1231
1239extern const char *cl_retver(void);
1240
1241/* ----------------------------------------------------------------------------
1242 * Others.
1243 */
1244extern const char *cl_strerror(cl_error_t clerror);
1245
1246/* ----------------------------------------------------------------------------
1247 * Custom data scanning.
1248 */
1249struct cl_fmap;
1250typedef struct cl_fmap cl_fmap_t;
1251
1274typedef off_t (*clcb_pread)(void *handle, void *buf, size_t count, off_t offset);
1275
1293extern cl_fmap_t *cl_fmap_open_handle(void *handle, size_t offset, size_t len,
1294 clcb_pread pread_cb, int use_aging);
1295
1308extern cl_fmap_t *cl_fmap_open_memory(const void *start, size_t len);
1309
1318extern void cl_fmap_close(cl_fmap_t *);
1319
1337extern cl_error_t cl_scanmap_callback(cl_fmap_t *map, const char *filename, const char **virname, unsigned long int *scanned, const struct cl_engine *engine, struct cl_scan_options *scanoptions, void *context);
1338
1339/* ----------------------------------------------------------------------------
1340 * Crypto/hashing functions
1341 */
1342#define MD5_HASH_SIZE 16
1343#define SHA1_HASH_SIZE 20
1344#define SHA256_HASH_SIZE 32
1345#define SHA384_HASH_SIZE 48
1346#define SHA512_HASH_SIZE 64
1347
1358unsigned char *cl_hash_data(const char *alg, const void *buf, size_t len, unsigned char *obuf, unsigned int *olen);
1359
1368unsigned char *cl_hash_file_fd_ctx(EVP_MD_CTX *ctx, int fd, unsigned int *olen);
1369
1378unsigned char *cl_hash_file_fd(int fd, const char *alg, unsigned int *olen);
1379
1388unsigned char *cl_hash_file_fp(FILE *fp, const char *alg, unsigned int *olen);
1389
1399unsigned char *cl_sha256(const void *buf, size_t len, unsigned char *obuf, unsigned int *olen);
1400
1410unsigned char *cl_sha384(const void *buf, size_t len, unsigned char *obuf, unsigned int *olen);
1411
1421unsigned char *cl_sha512(const void *buf, size_t len, unsigned char *obuf, unsigned int *olen);
1422
1432unsigned char *cl_sha1(const void *buf, size_t len, unsigned char *obuf, unsigned int *olen);
1433
1446int cl_verify_signature(EVP_PKEY *pkey, const char *alg, unsigned char *sig, unsigned int siglen, unsigned char *data, size_t datalen, int decode);
1447
1458int cl_verify_signature_hash(EVP_PKEY *pkey, const char *alg, unsigned char *sig, unsigned int siglen, unsigned char *digest);
1459
1470int cl_verify_signature_fd(EVP_PKEY *pkey, const char *alg, unsigned char *sig, unsigned int siglen, int fd);
1471
1482int cl_verify_signature_hash_x509_keyfile(char *x509path, const char *alg, unsigned char *sig, unsigned int siglen, unsigned char *digest);
1483
1494int cl_verify_signature_fd_x509_keyfile(char *x509path, const char *alg, unsigned char *sig, unsigned int siglen, int fd);
1495
1508int cl_verify_signature_x509_keyfile(char *x509path, const char *alg, unsigned char *sig, unsigned int siglen, unsigned char *data, size_t datalen, int decode);
1509
1520int cl_verify_signature_hash_x509(X509 *x509, const char *alg, unsigned char *sig, unsigned int siglen, unsigned char *digest);
1521
1532int cl_verify_signature_fd_x509(X509 *x509, const char *alg, unsigned char *sig, unsigned int siglen, int fd);
1533
1546int cl_verify_signature_x509(X509 *x509, const char *alg, unsigned char *sig, unsigned int siglen, unsigned char *data, size_t datalen, int decode);
1547
1555X509 *cl_get_x509_from_mem(void *data, unsigned int len);
1556
1564int cl_validate_certificate_chain_ts_dir(char *tsdir, char *certpath);
1565
1574int cl_validate_certificate_chain(char **authorities, char *crlpath, char *certpath);
1575
1581X509 *cl_load_cert(const char *certpath);
1582
1589struct tm *cl_ASN1_GetTimeT(ASN1_TIME *timeobj);
1590
1597X509_CRL *cl_load_crl(const char *timeobj);
1598
1609unsigned char *cl_sign_data_keyfile(char *keypath, const char *alg, unsigned char *hash, unsigned int *olen, int encode);
1610
1621unsigned char *cl_sign_data(EVP_PKEY *pkey, const char *alg, unsigned char *hash, unsigned int *olen, int encode);
1622
1633unsigned char *cl_sign_file_fd(int fd, EVP_PKEY *pkey, const char *alg, unsigned int *olen, int encode);
1634
1645unsigned char *cl_sign_file_fp(FILE *fp, EVP_PKEY *pkey, const char *alg, unsigned int *olen, int encode);
1646
1653EVP_PKEY *cl_get_pkey_file(char *keypath);
1654
1655void *cl_hash_init(const char *alg);
1656int cl_update_hash(void *ctx, const void *data, size_t sz);
1657int cl_finish_hash(void *ctx, void *buf);
1658void cl_hash_destroy(void *ctx);
1659
1660#ifdef __cplusplus
1661}
1662#endif
1663
1664#endif /* __CLAMAV_H */
Definition clamav.h:1096
Definition clamav.h:157
Definition clamav.h:1175
Definition clamav.h:334
Definition clamav.h:339