#include"crypto.h" #include"cryptlib.h" #include"lhash.h" #include"myfunction.h" unsigned char cleanse_ctr = 0; void OPENSSL_cleanse(void *ptr, size_t len) { unsigned char *p = ptr; size_t loop = len, ctr = cleanse_ctr; while(loop--) { *(p++) = (unsigned char)ctr; ctr += (17 + ((size_t)p & 0xF)); } p=memchr(ptr, (unsigned char)ctr, len); if(p) ctr += (63 + (size_t)p); cleanse_ctr = (unsigned char)ctr; } void *CRYPTO_malloc(int num, const char *file, int line) { if (num <= 0) return NULL; return malloc(num); } void *CRYPTO_realloc(void *str, int num, const char *file, int line) { if (str == NULL) return CRYPTO_malloc(num, file, line); if (num <= 0) return NULL; return realloc(str, num); } void *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file, int line) { void *ret = NULL; if (str == NULL) return CRYPTO_malloc(num, file, line); if (num <= 0) return NULL; /* We don't support shrinking the buffer. Note the memcpy that copies * |old_len| bytes to the new buffer, below. */ if (num < old_len) return NULL; ret = malloc(num); if(ret) { memcpy(ret,str,old_len); OPENSSL_cleanse(str,old_len); free(str); } return ret; } void CRYPTO_free(void *str) { free(str); } void *CRYPTO_remalloc(void *a, int num, const char *file, int line) { if (a != NULL) free(a); a=(char *)malloc(num); return(a); } void reset_CRYPTO_reset(void) { cleanse_ctr = 0; }