summaryrefslogtreecommitdiff
path: root/sbin/isakmpd
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/isakmpd')
-rw-r--r--sbin/isakmpd/sysdep/common/libsysdep/arc4random.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/sbin/isakmpd/sysdep/common/libsysdep/arc4random.c b/sbin/isakmpd/sysdep/common/libsysdep/arc4random.c
index d6fe39aa683..9fe87876d30 100644
--- a/sbin/isakmpd/sysdep/common/libsysdep/arc4random.c
+++ b/sbin/isakmpd/sysdep/common/libsysdep/arc4random.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: arc4random.c,v 1.5 2004/08/10 09:47:59 ho Exp $ */
+/* $OpenBSD: arc4random.c,v 1.6 2004/10/08 15:18:26 hshoexer Exp $ */
/*
* Arc4 random number generator for OpenBSD.
@@ -45,9 +45,10 @@ struct arc4_stream {
int rs_initialized;
static struct arc4_stream rs;
+static inline u_int8_t arc4_getbyte(struct arc4_stream *);
+
static inline void
-arc4_init(as)
- struct arc4_stream *as;
+arc4_init(struct arc4_stream *as)
{
int n;
@@ -58,10 +59,7 @@ arc4_init(as)
}
static inline void
-arc4_addrandom(as, dat, datlen)
- struct arc4_stream *as;
- u_char *dat;
- int datlen;
+arc4_addrandom(struct arc4_stream *as, u_char *dat, int datlen)
{
int n;
u_int8_t si;
@@ -74,11 +72,11 @@ arc4_addrandom(as, dat, datlen)
as->s[as->i] = as->s[as->j];
as->s[as->j] = si;
}
+ as->j = as->i;
}
static void
-arc4_stir(as)
- struct arc4_stream *as;
+arc4_stir(struct arc4_stream *as)
{
int fd;
struct {
@@ -97,12 +95,18 @@ arc4_stir(as)
/* fd < 0? Ah, what the heck. We'll just take whatever was on the
* stack... */
- arc4_addrandom(as, (void *) &rdat, sizeof(rdat));
+ arc4_addrandom(as, (void *)&rdat, sizeof(rdat));
+
+ /*
+ * Discard early keystream, as per recommendations in:
+ * http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps
+ */
+ for (i = 0; i < 256; i++)
+ (void)arc4_getbyte(as);
}
static inline u_int8_t
-arc4_getbyte(as)
- struct arc4_stream *as;
+arc4_getbyte(struct arc4_stream *as)
{
u_int8_t si, sj;
@@ -116,8 +120,7 @@ arc4_getbyte(as)
}
static inline u_int32_t
-arc4_getword(as)
- struct arc4_stream *as;
+arc4_getword(struct arc4_stream *as)
{
u_int32_t val;
val = arc4_getbyte(as) << 24;
@@ -128,7 +131,7 @@ arc4_getword(as)
}
void
-arc4random_stir()
+arc4random_stir(void)
{
if (!rs_initialized) {
arc4_init(&rs);
@@ -138,9 +141,7 @@ arc4random_stir()
}
void
-arc4random_addrandom(dat, datlen)
- u_char *dat;
- int datlen;
+arc4random_addrandom(u_char *dat, int datlen)
{
if (!rs_initialized)
arc4random_stir();
@@ -148,7 +149,7 @@ arc4random_addrandom(dat, datlen)
}
u_int32_t
-arc4random()
+arc4random(void)
{
if (!rs_initialized)
arc4random_stir();