Skip to content

Commit

Permalink
Use arc4random_buf instead of "/dev/urandom"
Browse files Browse the repository at this point in the history
  • Loading branch information
Coeur committed Oct 11, 2017
1 parent fab301b commit 5b9e60e
Showing 1 changed file with 5 additions and 22 deletions.
27 changes: 5 additions & 22 deletions SSZipArchive/minizip/crypt.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,6 @@

#define CRC32(c, b) ((*(pcrc_32_tab+(((uint32_t)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))

#ifndef ZCR_SEED2
# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
#endif

/***************************************************************************/

uint8_t decrypt_byte(uint32_t *pkeys)
Expand Down Expand Up @@ -90,11 +86,10 @@ void init_keys(const char *passwd, uint32_t *pkeys, const z_crc_t *pcrc_32_tab)

int cryptrand(unsigned char *buf, unsigned int len)
{
static unsigned calls = 0;
int rlen = 0;
#ifdef _WIN32
HCRYPTPROV provider;
unsigned __int64 pentium_tsc[1];
int rlen = 0;
int result = 0;


Expand All @@ -112,24 +107,12 @@ int cryptrand(unsigned char *buf, unsigned int len)
QueryPerformanceCounter((LARGE_INTEGER *)pentium_tsc);
buf[rlen] = ((unsigned char*)pentium_tsc)[rlen % 8];
}
#else
int frand = open("/dev/urandom", O_RDONLY);
if (frand != -1)
{
rlen = (int)read(frand, buf, len);
close(frand);
}
#endif
if (rlen < (int)len)
{
/* Ensure different random header each time */
if (++calls == 1)
srand((unsigned)(time(NULL) ^ ZCR_SEED2));

while (rlen < (int)len)
buf[rlen++] = (rand() >> 7) & 0xff;
}
return rlen;
#else
arc4random_buf(buf, len);
return len;
#endif
}

int crypthead(const char *passwd, uint8_t *buf, int buf_size, uint32_t *pkeys,
Expand Down

0 comments on commit 5b9e60e

Please sign in to comment.