1
0
mirror of https://github.com/fumiama/simple-dict.git synced 2026-06-05 02:00:25 +08:00

fix: md5 comparing

This commit is contained in:
源文雨
2023-03-25 16:04:49 +08:00
parent 14d4aeda4c
commit 3d769ecd13
2 changed files with 29 additions and 14 deletions

View File

@@ -37,17 +37,27 @@ static const uint32_t sumtable[0x10] = CRYPTO_SUMTABLE;
static uint8_t seqs[THREADCNT]; // 消息序号
static inline int is_md5_equal(uint8_t* digest, uint8_t* digest2) {
#ifdef CPUBIT64
return (digest[0] == digest2[0]) &&
(digest[1] == digest2[1]);
#else
return (digest[0] == digest2[0]) &&
(digest[1] == digest2[1]) &&
(digest[2] == digest2[2]) &&
(digest[3] == digest2[3]);
#endif
#ifdef CPUBIT64
static inline int is_md5_equal(uint64_t* digest, uint64_t* digest2) {
return (digest[0] == digest2[0]) && (digest[1] == digest2[1]);
}
static inline int is_empty_md5(uint64_t* digest) {
return (digest[0] == (uint64_t)0) && (digest[1] == (uint64_t)0);
}
#else
static inline int is_md5_equal(uint32_t* digest, uint32_t* digest2) {
return (digest[0] == digest2[0]) &&
(digest[1] == digest2[1]) &&
(digest[2] == digest2[2]) &&
(digest[3] == digest2[3]);
}
static inline int is_empty_md5(uint32_t* digest) {
return (digest[0] == (uint32_t)0) &&
(digest[1] == (uint32_t)0) &&
(digest[2] == (uint32_t)0) &&
(digest[3] == (uint32_t)0);
}
#endif
static void init_crypto() {
srand(time(NULL));
@@ -173,7 +183,7 @@ static int cmdpacket_decrypt(cmdpacket_t p, int index, const char pwd[64]) {
putchar('\n');
#endif
if(is_md5_equal((uint8_t*)datamd5, p->md5)) {
if(is_md5_equal((uint64_t*)datamd5, (uint64_t*)p->md5)) {
seqs[index]++;
memcpy(p->data, out, p->datalen);
return 0;

View File

@@ -402,7 +402,10 @@ ERR_INSERT_ITEM:
}
static int s3_set_data(thread_timer_t *timer) {
if(!setdicts[timer->index].data[0]) return send_data(timer->accept_fd, timer->index, ACKERRO, "erro", 4);
if(is_empty_md5((uint64_t*)setdicts[timer->index].data)) {
puts("Set data error: key md5 is empty");
return send_data(timer->accept_fd, timer->index, ACKERRO, "erro", 4);
}
FILE *fp = open_dict(timer->index, 0);
if(fp == NULL) return send_data(timer->accept_fd, timer->index, ACKERRO, "erro", 4);
@@ -410,8 +413,10 @@ static int s3_set_data(thread_timer_t *timer) {
#ifdef DEBUG
printf("Set data size: %u\n", datasize);
#endif
if(datasize <= 0 || datasize > sizeof(setdicts[timer->index].data))
if(datasize <= 0 || datasize > sizeof(setdicts[timer->index].data)) {
puts("Set data error: invalid datasize");
return send_data(timer->accept_fd, timer->index, ACKERRO, "erro", 4);
}
int r;
pthread_cleanup_push((void*)&close_dict, (void*)(uintptr_t)timer->index);
@@ -452,7 +457,7 @@ static int s3_set_data(thread_timer_t *timer) {
memcpy(setdict->data, timer->dat, timer->numbytes);
if(insert_item(fp, setdict, strlen(setdict->key)+1, datasize)) {
fprintf(stderr, "Error set data: dict[%s]=%s\n", setdict->key, timer->dat);
fprintf(stderr, "Error setting data: dict[%s]=%s\n", setdict->key, timer->dat);
r = send_data(timer->accept_fd, timer->index, ACKERRO, "erro", 4);
} else {
printf("Set dict[%s]=%s\n", setdict->key, timer->dat);