#ifdef USE_SSL
#if defined(__linux__)
#include <openssl/rand.h>
#endif
#endif

#include "RandomHex.hxx"
#include "Lock.hxx"
#include "support.hxx"
#include "cpLog.h"

Vocal::Threads::Mutex RandomHex::_mutex;

//#if !defined(__linux__)

#ifdef USE_SSL
void
RandomHex::initialize()
{
   assert(RAND_status() == 1);
}

Data
RandomHex::get(unsigned int len)
{
   unsigned char buffer[len];
   int ret = RAND_bytes(buffer, len);
   assert (ret == 1);
   
   Data result;
   result = convertToHex(buffer, len);
   
   return result;
}

#else

#include "CryptoRandom.hxx"

void
RandomHex::initialize()
{
}

Data
RandomHex::get(unsigned int len)
{
   Vocal::Threads::Lock lock(_mutex);
   static CryptoRandom random;
   
   //unsigned char* buffer;
   unsigned char *buffer = new unsigned char[len];

   random.getRandom(buffer, len);
   
   Data result;
   result = convertToHex(buffer, len);
   delete[] buffer;
   return result;
}

#endif


syntax highlighted by Code2HTML, v. 0.9.1