summaryrefslogtreecommitdiff
path: root/ext/sqlite/libsqlite/src/random.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sqlite/libsqlite/src/random.c')
-rw-r--r--ext/sqlite/libsqlite/src/random.c44
1 files changed, 14 insertions, 30 deletions
diff --git a/ext/sqlite/libsqlite/src/random.c b/ext/sqlite/libsqlite/src/random.c
index d18bebff6b..dd8bdd4c58 100644
--- a/ext/sqlite/libsqlite/src/random.c
+++ b/ext/sqlite/libsqlite/src/random.c
@@ -35,15 +35,15 @@
** on RC4, which we know works very well.
*/
static int randomByte(){
- int t;
+ unsigned char t;
/* All threads share a single random number generator.
** This structure is the current state of the generator.
*/
static struct {
- int isInit; /* True if initialized */
- int i, j; /* State variables */
- int s[256]; /* State variables */
+ unsigned char isInit; /* True if initialized */
+ unsigned char i, j; /* State variables */
+ unsigned char s[256]; /* State variables */
} prng;
/* Initialize the state of the random number generator once,
@@ -65,8 +65,7 @@ static int randomByte(){
prng.s[i] = i;
}
for(i=0; i<256; i++){
- int t;
- prng.j = (prng.j + prng.s[i] + k[i]) & 0xff;
+ prng.j += prng.s[i] + k[i];
t = prng.s[prng.j];
prng.s[prng.j] = prng.s[i];
prng.s[i] = t;
@@ -76,38 +75,23 @@ static int randomByte(){
/* Generate and return single random byte
*/
- prng.i = (prng.i + 1) & 0xff;
- prng.j = (prng.j + prng.s[prng.i]) & 0xff;
+ prng.i++;
t = prng.s[prng.i];
+ prng.j += t;
prng.s[prng.i] = prng.s[prng.j];
prng.s[prng.j] = t;
- t = prng.s[prng.i] + prng.s[prng.j];
- return prng.s[t & 0xff];
+ t += prng.s[prng.i];
+ return prng.s[t];
}
/*
-** Return an random 8-bit integer.
+** Return N random bytes.
*/
-int sqliteRandomByte(){
- int r;
+void sqliteRandomness(int N, void *pBuf){
+ unsigned char *zBuf = pBuf;
sqliteOsEnterMutex();
- r = randomByte();
- sqliteOsLeaveMutex();
- return r;
-}
-
-/*
-** Return a random 32-bit integer. The integer is generated by making
-** 4 calls to sqliteRandomByte().
-*/
-int sqliteRandomInteger(){
- int r;
- int i;
- sqliteOsEnterMutex();
- r = randomByte();
- for(i=1; i<4; i++){
- r = (r<<8) + randomByte();
+ while( N-- ){
+ *(zBuf++) = randomByte();
}
sqliteOsLeaveMutex();
- return r;
}