mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 19:08:59 +00:00
Add random number functions to QUtil
This commit is contained in:
parent
16a23368e7
commit
4eccb9d87b
@ -83,6 +83,18 @@ namespace QUtil
|
||||
// encoding for the unicode value passed in.
|
||||
QPDF_DLL
|
||||
std::string toUTF8(unsigned long uval);
|
||||
|
||||
// Wrapper around random from stdlib. Calls srandom automatically
|
||||
// the first time it is called.
|
||||
QPDF_DLL
|
||||
long random();
|
||||
|
||||
// Wrapper around srandom from stdlib.
|
||||
QPDF_DLL
|
||||
void srandom(unsigned int seed);
|
||||
|
||||
QPDF_DLL
|
||||
void initializeWithRandomBytes(unsigned char* data, size_t len);
|
||||
};
|
||||
|
||||
#endif // __QUTIL_HH__
|
||||
|
@ -6,11 +6,6 @@
|
||||
#include <qpdf/rijndael.h>
|
||||
#include <string>
|
||||
#include <stdlib.h>
|
||||
#include <qpdf/qpdf-config.h>
|
||||
#ifndef HAVE_RANDOM
|
||||
# define random rand
|
||||
# define srandom srand
|
||||
#endif
|
||||
|
||||
bool Pl_AES_PDF::use_static_iv = false;
|
||||
|
||||
@ -155,15 +150,6 @@ Pl_AES_PDF::finish()
|
||||
void
|
||||
Pl_AES_PDF::initializeVector()
|
||||
{
|
||||
static bool seeded_random = false;
|
||||
if (! seeded_random)
|
||||
{
|
||||
// Seed the random number generator with something simple, but
|
||||
// just to be interesting, don't use the unmodified current
|
||||
// time....
|
||||
srandom((int)QUtil::get_current_time() ^ 0xcccc);
|
||||
seeded_random = true;
|
||||
}
|
||||
if (use_zero_iv)
|
||||
{
|
||||
for (unsigned int i = 0; i < this->buf_size; ++i)
|
||||
@ -184,10 +170,7 @@ Pl_AES_PDF::initializeVector()
|
||||
}
|
||||
else
|
||||
{
|
||||
for (unsigned int i = 0; i < this->buf_size; ++i)
|
||||
{
|
||||
this->cbc_block[i] = (unsigned char)((random() & 0xff0) >> 4);
|
||||
}
|
||||
QUtil::initializeWithRandomBytes(this->cbc_block, this->buf_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -333,3 +333,42 @@ QUtil::toUTF8(unsigned long uval)
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
long
|
||||
QUtil::random()
|
||||
{
|
||||
static bool seeded_random = false;
|
||||
if (! seeded_random)
|
||||
{
|
||||
// Seed the random number generator with something simple, but
|
||||
// just to be interesting, don't use the unmodified current
|
||||
// time....
|
||||
QUtil::srandom((int)QUtil::get_current_time() ^ 0xcccc);
|
||||
seeded_random = true;
|
||||
}
|
||||
|
||||
#ifdef HAVE_RANDOM
|
||||
return ::random();
|
||||
#else
|
||||
return rand();
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
QUtil::srandom(unsigned int seed)
|
||||
{
|
||||
#ifdef HAVE_RANDOM
|
||||
::srandom(seed);
|
||||
#else
|
||||
srand(seed);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
QUtil::initializeWithRandomBytes(unsigned char* data, size_t len)
|
||||
{
|
||||
for (size_t i = 0; i < len; ++i)
|
||||
{
|
||||
data[i] = (unsigned char)((QUtil::random() & 0xff0) >> 4);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user