1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/***************************************************************************
* _______ _______ _______ *
* | ___ |____ | ___ | *
* | | |_| / /| | |_| *
* | |_____ / / | |_____ *
* |_____ | / / |_____ | *
* _ | | / / _ | | *
* | |___| |/ /____| |___| | *
* |_______|_______|_______| *
* *
* Wiimms SZS Tools *
* https://szs.wiimm.de/ *
* *
***************************************************************************
* *
* This file is part of the SZS project. *
* Visit https://szs.wiimm.de/ for project details and sources. *
* *
* Copyright (c) 2011-2023 by Dirk Clemens <wiimm@wiimm.de> *
* *
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* 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. *
* *
* See file gpl-2.0.txt or http://www.gnu.org/licenses/gpl-2.0.txt *
* *
***************************************************************************/
#ifndef SZS_LIB_CHECKSUM_H
#define SZS_LIB_CHECKSUM_H 1
#define _GNU_SOURCE 1
#include "dclib-types.h"
#include "lib-ledis.h"
#include "crypt.h"
typedef struct szs_file_t szs_file_t;
//
///////////////////////////////////////////////////////////////////////////////
/////////////// struct sha1_size_t ///////////////
///////////////////////////////////////////////////////////////////////////////
// [[sha1_size_t]]
#define CHECKSUM_DB_SIZE 32
///////////////////////////////////////////////////////////////////////////////
typedef struct sha1_size_t
{
sha1_hash_t hash; // SHA1 checksum (binary)
u32 size; // size of data (big endian)
}
__attribute__ ((packed)) sha1_size_t;
///////////////////////////////////////////////////////////////////////////////
// bufsize should be >40
void CreateSSChecksum ( char *buf, uint bufsize, const sha1_size_t *ss );
void CreateSSChecksumBySZS ( char *buf, uint bufsize, const szs_file_t *szs );
// normed DB coding (independent of options)
void CreateSSChecksumDB ( char *buf, uint bufsize, const sha1_size_t *ss );
void CreateSSChecksumDBByData ( char *buf, uint bufsize, cvp data, uint size );
void CreateSSChecksumDBBySZS ( char *buf, uint bufsize, const szs_file_t *szs );
enumError GetSSByFile ( sha1_size_t *ss, ccp path1, ccp path2 );
// slen < 0 => strlen(source)
// returns: 0:fail, 1:SHA1, 2:DB64
// if res != NULL: scanned SHA1
int IsSSChecksum ( sha1_size_t *res, ccp source, int slen );
//
///////////////////////////////////////////////////////////////////////////////
/////////////// szs cache support ///////////////
///////////////////////////////////////////////////////////////////////////////
#define SZS_CACHE_FNAME "cache-content.txt"
extern ccp szs_cache_dir;
extern ParamField_t szs_cache;
///////////////////////////////////////////////////////////////////////////////
static inline bool IsSZSCacheEnabled()
{ return szs_cache_dir != 0; }
void SetupSZSCache ( ccp dir_name, bool use_dirname );
void ScanSZSCache ( ccp dir_name, bool purge );
enumError LoadSZSCache(void);
enumError SaveSZSCache(void);
enumError AppendSZSCache(void);
ParamFieldItem_t * StoreSZSCache
(
// return NULL or pointer to cache item
ccp fname, // NULL or filename, only basename(fname) is used
ccp checksum, // DB checksum; if NULL: load file and calc checksum
bool rename_file, // true: rename existing file
bool *r_exists // not NULL: store a status here
// => true: file result->data exists
);
//
///////////////////////////////////////////////////////////////////////////////
/////////////// END ///////////////
///////////////////////////////////////////////////////////////////////////////
#endif // SZS_LIB_CHECKSUM_H
|