void OCFillRandomMem(uint8_t * location, uint16_t len)
{
- int i, j, rand_idx;
- i = len;
if (!location)
{
return;
}
+ uint16_t i, rand_idx;
+ uint8_t *loc;
+ i = len;
+ loc = location;
for (; i--;)
{
- *location++ = OCGetRandomByte();
- }
- uint8_t *temp = (char *) OICCalloc(len, sizeof(char));
- int *mask = (int *) OICCalloc(len, sizeof(int));
- for (i = 0; i < len; i++)
- {
- mask[i] = 0;
+ *loc++ = OCGetRandomByte();
}
- j = 0;
- for (i = 0; i < len; i++)
- {
- rand_idx = lrand48() % len;
- while((rand_idx < len) && (mask[rand_idx] != 0))
- {
- rand_idx++;
- }
- if(rand_idx == len)
- {
- rand_idx = 0;
- while(mask[rand_idx] != 0)
- {
- rand_idx++;
- }
- }
- temp[rand_idx] = location[j];
- mask[rand_idx] = 1;
- j++;
- }
- for (i = 0; i < len; i++)
+ uint8_t temp;
+ i = len;
+ while(i > 1)
{
- location[i] = temp[i];
+ rand_idx = lrand48() % i;
+ temp = location[i - 1];
+ location[i - 1] = location[rand_idx];
+ location[rand_idx] = temp;
+ i--;
}
- OICFree(temp);
- OICFree(mask);
}
uint32_t OCGetRandom()