fuzzy.h was missing <stdio.h>
[~helmut/ssdeep.git] / fuzzy.h
1 /*
2  * Copyright (C) ManTech International Corporation 2010
3  * Copyright (C) 2013 Helmut Grohne <helmut@subdivi.de>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18  *
19  * Earlier versions of this code can be found at:
20  *     http://ssdeep.sf.net/
21  */
22
23 #include <stdint.h>
24 #include <stdio.h>
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 #ifndef FUZZY_H
31 #define FUZZY_H
32
33 /**
34  * @brief Compute the fuzzy hash of a buffer
35  *
36  * The computes the fuzzy hash of the first buf_len bytes of the buffer.
37  * It is the caller's responsibility to append the filename,
38  * if any, to result after computation. 
39  * @param buf The data to be fuzzy hashed
40  * @param buf_len The length of the data being hashed
41  * @param result Where the fuzzy hash of buf is stored. This variable
42  * must be allocated to hold at least FUZZY_MAX_RESULT bytes.
43  * @return Returns zero on success, non-zero on error.
44  */
45 extern int fuzzy_hash_buf(const unsigned char *buf, uint32_t buf_len,
46                 /*@out@*/ char *result);
47
48 /**
49  * @brief Compute the fuzzy hash of a file using an open handle
50  *
51  * Computes the fuzzy hash of the contents of the open file, starting
52  * at the beginning of the file. When finished, the file pointer is
53  * returned to its original position. If an error occurs, the file 
54  * pointer's value is undefined.
55  * It is the callers's responsibility to append the filename
56  * to the result after computation.
57  * @param handle Open handle to the file to be hashed
58  * @param result Where the fuzzy hash of the file is stored. This 
59  * variable must be allocated to hold at least FUZZY_MAX_RESULT bytes.
60  * @return Returns zero on success, non-zero on error
61  */
62 extern int fuzzy_hash_file(FILE *handle, /*@out@*/ char *result);
63
64 /**
65  * @brief Compute the fuzzy hash of a stream using an open handle
66  *
67  * Computes the fuzzy hash of the contents of the open stream, starting at the
68  * current file position until reaching EOF. Unlike fuzzy_hash_file the stream
69  * is never seeked. If an error occurs, the result as well as the file position
70  * are undefined.
71  * It is the callers's responsibility to append the filename
72  * to the result after computation.
73  * @param handle Open handle to the stream to be hashed
74  * @param result Where the fuzzy hash of the file is stored. This 
75  * variable must be allocated to hold at least FUZZY_MAX_RESULT bytes.
76  * @return Returns zero on success, non-zero on error
77  */
78 extern int fuzzy_hash_stream(FILE *handle, /*@out@*/ char *result);
79
80 /**
81  * @brief Compute the fuzzy hash of a file
82  *
83  * Opens, reads, and hashes the contents of the file 'filename' 
84  * The result must be allocated to hold FUZZY_MAX_RESULT characters. 
85  * It is the caller's responsibility to append the filename
86  * to the result after computation. 
87  * @param filename The file to be hashed
88  * @param result Where the fuzzy hash of the file is stored. This 
89  * variable must be allocated to hold at least FUZZY_MAX_RESULT bytes.
90  * @return Returns zero on success, non-zero on error. 
91  */
92 extern int fuzzy_hash_filename(const char *filename, /*@out@*/ char * result);
93
94 /** Length of an individual fuzzy hash signature component. */
95 #define SPAMSUM_LENGTH 64
96
97 /** The longest possible length for a fuzzy hash signature
98  * (without the filename) */
99 #define FUZZY_MAX_RESULT    (SPAMSUM_LENGTH + (SPAMSUM_LENGTH/2 + 20))
100
101 #ifdef __cplusplus
102
103 #endif
104
105 #endif