TERES/SOFTWARE/A64-TERES/u-boot_new/lib/openssl/CRYPTO_malloc.c
Dimitar Gamishev 093685c7d8 u-boot
2017-10-13 14:02:55 +03:00

84 lines
1.5 KiB
C
Executable File

#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;
}