int YubiKeyUtil::generateRandom(unsigned char *result, size_t resultLen) { size_t bufSize = resultLen; unsigned char buf[bufSize]; memset(&buf, 0, sizeof(buf)); size_t bufLen = 0; #ifdef Q_WS_WIN CRandom random; random.getRand(buf, bufSize); bufLen = sizeof(buf); #else const char *random_places[] = { "/dev/srandom", "/dev/urandom", "/dev/random", 0 }; const char **random_place; for (random_place = random_places; *random_place; random_place++) { FILE *random_file = fopen(*random_place, "r"); if (random_file) { size_t read_bytes = 0; while (read_bytes < bufSize) { size_t n = fread(&buf[read_bytes], 1, bufSize - read_bytes, random_file); read_bytes += n; } fclose(random_file); bufLen = sizeof(buf); break; /* from for loop */ } } #endif if(bufLen > 0) { memcpy(result, buf, bufLen); return 1; } return 0; }