projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
updates.
[silc.git]
/
lib
/
silccrypt
/
silcrng.c
diff --git
a/lib/silccrypt/silcrng.c
b/lib/silccrypt/silcrng.c
index e9fe1c81ffe3d596b1572aeafa355104f388a2dc..485a60aae4dccaafd25b7368a966b805fd9eefba 100644
(file)
--- a/
lib/silccrypt/silcrng.c
+++ b/
lib/silccrypt/silcrng.c
@@
-115,6
+115,7
@@
typedef struct SilcRngObjectStruct {
SilcRngState state;
SilcHash sha1;
uint8 threshhold;
SilcRngState state;
SilcHash sha1;
uint8 threshhold;
+ char *devrandom;
} SilcRngObject;
/* Allocates new RNG object. */
} SilcRngObject;
/* Allocates new RNG object. */
@@
-132,6
+133,8
@@
SilcRng silc_rng_alloc()
new->state = NULL;
silc_hash_alloc("sha1", &new->sha1);
new->state = NULL;
silc_hash_alloc("sha1", &new->sha1);
+ new->devrandom = strdup("/dev/random");
+
return new;
}
return new;
}
@@
-142,7
+145,8
@@
void silc_rng_free(SilcRng rng)
if (rng) {
memset(rng->pool, 0, sizeof(rng->pool));
memset(rng->key, 0, sizeof(rng->key));
if (rng) {
memset(rng->pool, 0, sizeof(rng->pool));
memset(rng->key, 0, sizeof(rng->key));
- silc_free(rng->sha1);
+ silc_hash_free(rng->sha1);
+ silc_free(new->devrandom);
silc_free(rng);
}
}
silc_free(rng);
}
}
@@
-185,6
+189,8
@@
void silc_rng_init(SilcRng rng)
silc_rng_get_medium_noise(rng);
silc_rng_get_hard_noise(rng);
silc_rng_get_soft_noise(rng);
silc_rng_get_medium_noise(rng);
silc_rng_get_hard_noise(rng);
silc_rng_get_soft_noise(rng);
+ silc_free(rng->devrandom);
+ rng->devrandom = strdup("/dev/urandom");
}
/* This function gets 'soft' noise from environment. */
}
/* This function gets 'soft' noise from environment. */
@@
-275,8
+281,8
@@
static void silc_rng_get_hard_noise(SilcRng rng)
char buf[32];
int fd, len, i;
char buf[32];
int fd, len, i;
- /* Get noise from /dev/random if available */
- fd = open(
"/dev/random"
, O_RDONLY);
+ /* Get noise from /dev/
[u]
random if available */
+ fd = open(
rnd->devrandom
, O_RDONLY);
if (fd < 0)
return;
if (fd < 0)
return;
@@
-370,7
+376,7
@@
static void silc_rng_stir_pool(SilcRng rng)
uint32 iv[5];
/* Get the IV */
uint32 iv[5];
/* Get the IV */
- memcpy(iv, &rng->pool[
SILC_RNG_POOLSIZE - 25
6], sizeof(iv));
+ memcpy(iv, &rng->pool[
1
6], sizeof(iv));
/* First CFB pass */
for (i = 0; i < SILC_RNG_POOLSIZE; i += 5) {
/* First CFB pass */
for (i = 0; i < SILC_RNG_POOLSIZE; i += 5) {