14 #define DISABLE_DEBUGLOG
17 #include "mdigest_p.h"
20 #include <gwenhywfar/misc.h>
21 #include <gwenhywfar/debug.h>
22 #include <gwenhywfar/directory.h>
23 #include <gwenhywfar/text.h>
24 #include <gwenhywfar/syncio.h>
25 #include <gwenhywfar/syncio_file.h>
26 #include <gwenhywfar/gui.h>
56 if (md->refCount==1) {
73 return md->hashAlgoId;
102 if (md->pDigest && md->lDigest)
112 assert(md->refCount);
114 if (md->pDigest && md->lDigest)
124 assert(md->refCount);
126 return md->beginFn(md);
135 assert(md->refCount);
137 return md->endFn(md);
146 assert(md->refCount);
148 return md->updateFn(md, buf, l);
159 assert(md->refCount);
172 assert(md->refCount);
185 assert(md->refCount);
195 const char *password,
196 const uint8_t *pSalt,
200 uint32_t iterations) {
207 if (lKey>hsize || lKey>
sizeof(hash)) {
245 for (i=2; i<iterations; i++) {
271 memmove(pKey, hash, lKey);
272 memset(hash, 0,
sizeof(hash));
284 uint8_t buffer[1024];
349 const char *baseFolder,
350 const char *relFolder,
351 const char *ignoreFile,
387 if (strcasecmp(s+1,
".")!=0 && strcasecmp(s+1,
"..")!=0) {
402 if (!(ignoreFile && strcasecmp(ignoreFile, s+1)==0)) {
463 const char *ignoreFile,
480 const char *checksumFile,
497 I18N(
"Error unpacking program (%d)"), rv);
514 I18N(
"Error loading checksum file (%d)"), rv);
540 I18N(
"Checksum file does not contain valid lines"));
546 if (allHashesOk==0) {
548 I18N(
"Integrity check on folder failed"));
558 I18N(
"Folder contains %d files without checksum"),
565 I18N(
"Folder contains %d files without checksum"),
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
void GWEN_MDigest_free(GWEN_MDIGEST *md)
#define GWEN_INHERIT_FINI(t, element)
#define GWEN_ERROR_INVALID
#define GWEN_DIR_SEPARATOR_S
#define GWEN_SYNCIO_FILE_FLAGS_READ
int(* GWEN_MDIGEST_UPDATE_FN)(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l)
int GWEN_SyncIo_Read(GWEN_SYNCIO *sio, uint8_t *buffer, uint32_t size)
GWEN_MDIGEST_END_FN GWEN_MDigest_SetEndFn(GWEN_MDIGEST *md, GWEN_MDIGEST_END_FN f)
void GWEN_MDigest_SetDigestLen(GWEN_MDIGEST *md, unsigned int l)
#define GWEN_FREE_OBJECT(varname)
GWEN_MDIGEST * GWEN_MDigest_new(GWEN_CRYPT_HASHALGOID a)
GWEN_MDIGEST_UPDATE_FN GWEN_MDigest_SetUpdateFn(GWEN_MDIGEST *md, GWEN_MDIGEST_UPDATE_FN f)
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
int GWEN_MDigest_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
GWENHYWFAR_API int GWEN_StringList_RemoveString(GWEN_STRINGLIST *sl, const char *s)
uint8_t * GWEN_MDigest_GetDigestPtr(GWEN_MDIGEST *md)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
int GWEN_MDigest_Begin(GWEN_MDIGEST *md)
#define GWEN_NEW_OBJECT(typ, varname)
struct GWEN_SYNCIO GWEN_SYNCIO
int GWEN_MDigest_HashFileTree(GWEN_MDIGEST *md, const char *folder, const char *ignoreFile, GWEN_STRINGLIST *sl)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
int GWEN_SyncIo_Helper_ReadFileToStringList(const char *fname, int maxLines, GWEN_STRINGLIST *sl)
int GWEN_Gui_ProgressLog2(uint32_t id, GWEN_LOGGER_LEVEL level, const char *fmt,...)
int GWEN_MDigest_CheckFileTree(GWEN_MDIGEST *md, const char *folder, const char *checksumFile, int strictCheck, uint32_t pid)
int GWEN_Text_EscapeToBuffer(const char *src, GWEN_BUFFER *buf)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
struct GWEN_MDIGEST GWEN_MDIGEST
int(* GWEN_MDIGEST_BEGIN_FN)(GWEN_MDIGEST *md)
GWEN_CRYPT_HASHALGOID GWEN_MDigest_GetHashAlgoId(const GWEN_MDIGEST *md)
#define GWEN_INHERIT_INIT(t, element)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
GWENHYWFAR_API int GWEN_Directory_GetFileEntriesWithType(const char *folder, GWEN_STRINGLIST *sl, const char *mask)
GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
int(* GWEN_MDIGEST_END_FN)(GWEN_MDIGEST *md)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
int GWEN_MDigest_End(GWEN_MDIGEST *md)
#define DBG_ERROR(dbg_logger, format, args...)
unsigned int GWEN_MDigest_GetDigestSize(GWEN_MDIGEST *md)
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
void GWEN_SyncIo_SetFlags(GWEN_SYNCIO *sio, uint32_t fl)
static int GWEN_MDigest__HashFile(GWEN_MDIGEST *md, const char *fname, GWEN_BUFFER *hbuf)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
GWEN_MDIGEST_BEGIN_FN GWEN_MDigest_SetBeginFn(GWEN_MDIGEST *md, GWEN_MDIGEST_BEGIN_FN f)
#define DBG_INFO(dbg_logger, format, args...)
#define GWEN_LIST_INIT(t, element)
#define GWEN_ERROR_VERIFY
GWENHYWFAR_API GWEN_SYNCIO * GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm)
#define GWEN_LIST_FUNCTIONS(t, pr)
int GWEN_MDigest_PBKDF2(GWEN_MDIGEST *md, const char *password, const uint8_t *pSalt, uint32_t lSalt, uint8_t *pKey, uint32_t lKey, uint32_t iterations)
void GWEN_MDigest_SetDigestBuffer(GWEN_MDIGEST *md, uint8_t *buf, unsigned int l)
GWEN_STRINGLIST * GWEN_StringList_new(void)
#define GWEN_LIST_FINI(t, element)
#define GWEN_INHERIT_FUNCTIONS(t)
int GWEN_Text_ToHexBuffer(const char *src, unsigned l, GWEN_BUFFER *buf, unsigned int groupsize, char delimiter, int skipLeadingZeroes)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
static int GWEN_MDigest__HashFileTree(GWEN_MDIGEST *md, const char *baseFolder, const char *relFolder, const char *ignoreFile, GWEN_STRINGLIST *sl)
#define GWEN_ERROR_NOT_IMPLEMENTED