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> 58 if (md->refCount==1) {
76 return md->hashAlgoId;
102 assert(md->refCount);
108 if (md->pDigest && md->lDigest)
119 assert(md->refCount);
121 if (md->pDigest && md->lDigest)
132 assert(md->refCount);
134 return md->beginFn(md);
144 assert(md->refCount);
146 return md->endFn(md);
156 assert(md->refCount);
158 return md->updateFn(md, buf, l);
166 const uint8_t *srcBuf,
unsigned int srcLen,
167 uint8_t *dstBuf,
unsigned int dstLen)
173 assert(srcBuf && srcLen);
174 assert(dstBuf && dstLen);
176 if (md && srcBuf && srcLen && dstBuf && dstLen) {
193 if (dstLen<digestLen) {
218 assert(md->refCount);
232 assert(md->refCount);
246 assert(md->refCount);
256 const char *password,
257 const uint8_t *pSalt,
269 if (lKey>hsize || lKey>
sizeof(hash)) {
307 for (i=2; i<iterations; i++) {
333 memmove(pKey, hash, lKey);
334 memset(hash, 0,
sizeof(hash));
347 uint8_t buffer[1024];
412 const char *baseFolder,
413 const char *relFolder,
414 const char *ignoreFile,
451 if (strcasecmp(s+1,
".")!=0 && strcasecmp(s+1,
"..")!=0) {
466 if (!(ignoreFile && strcasecmp(ignoreFile, s+1)==0)) {
527 const char *ignoreFile,
545 const char *checksumFile,
563 I18N(
"Error unpacking program (%d)"), rv);
580 I18N(
"Error loading checksum file (%d)"), rv);
606 I18N(
"Checksum file does not contain valid lines"));
612 if (allHashesOk==0) {
614 I18N(
"Integrity check on folder failed"));
624 I18N(
"Folder contains %d files without checksum"),
631 I18N(
"Folder contains %d files without checksum"),
int(* GWEN_MDIGEST_UPDATE_FN)(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
#define GWEN_LIST2_FUNCTIONS(t, pr)
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_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)
int GWEN_MDigest_Digest(GWEN_MDIGEST *md, const uint8_t *srcBuf, unsigned int srcLen, uint8_t *dstBuf, unsigned int dstLen)
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)
#define GWEN_ERROR_BUFFER_OVERFLOW
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
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_END_FN)(GWEN_MDIGEST *md)
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)
GWENHYWFAR_API int GWEN_Gui_ProgressLog2(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text,...)
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
GWEN_CRYPT_HASHALGOID GWEN_MDigest_GetHashAlgoId(const GWEN_MDIGEST *md)
int GWEN_StringList_RemoveString(GWEN_STRINGLIST *sl, const char *s)
#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)
int GWEN_Buffer_Crop(GWEN_BUFFER *bf, uint32_t pos, uint32_t l)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
int GWEN_MDigest_End(GWEN_MDIGEST *md)
#define DBG_ERROR(dbg_logger, format, args...)
int(* GWEN_MDIGEST_BEGIN_FN)(GWEN_MDIGEST *md)
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)
#define GWEN_ERROR_INTERNAL
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