r4702 - in developers/werner: . wep wep/tests

werner at docs.openmoko.org werner at docs.openmoko.org
Tue Oct 7 23:30:45 CEST 2008


Author: werner
Date: 2008-10-07 23:30:44 +0200 (Tue, 07 Oct 2008)
New Revision: 4702

Added:
   developers/werner/wep/
   developers/werner/wep/Makefile
   developers/werner/wep/tests/
   developers/werner/wep/tests/Makefile
   developers/werner/wep/tests/foobar
   developers/werner/wep/wep.c
   developers/werner/wep/wepkey.c
   developers/werner/wep/wepkey.h
Log:
WEP keyphrase hash.



Added: developers/werner/wep/Makefile
===================================================================
--- developers/werner/wep/Makefile	                        (rev 0)
+++ developers/werner/wep/Makefile	2008-10-07 21:30:44 UTC (rev 4702)
@@ -0,0 +1,20 @@
+CFLAGS=-Wall
+LDFLAGS=-lssl
+
+OBJS=wep.o wepkey.o
+
+.PHONY:		all test tests clean spotless
+
+
+all:		wep
+
+wep:		$(OBJS)
+
+test tests:	wep
+		$(MAKE) -C tests
+
+clean:
+		rm -f $(WEPKEY)
+
+spotless:	clean
+		rm -f wep

Added: developers/werner/wep/tests/Makefile
===================================================================
--- developers/werner/wep/tests/Makefile	                        (rev 0)
+++ developers/werner/wep/tests/Makefile	2008-10-07 21:30:44 UTC (rev 4702)
@@ -0,0 +1,7 @@
+.PHONY:	tests clean
+
+all:
+	./foobar
+
+clean:
+	rm -f _*

Added: developers/werner/wep/tests/foobar
===================================================================
--- developers/werner/wep/tests/foobar	                        (rev 0)
+++ developers/werner/wep/tests/foobar	2008-10-07 21:30:44 UTC (rev 4702)
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+fail()
+{
+    echo TEST FAILED 1>&2
+    exit 1
+}
+
+
+../wep foobar >_out || fail
+diff -u - _out <<EOF || fail
+49d68437b1ffb0db3fdf2d4a93
+a4beb3b8ec
+b697e900c8
+b5d2bb755b
+197ea2abe7
+EOF
+
+echo PASSED
+exit 0


Property changes on: developers/werner/wep/tests/foobar
___________________________________________________________________
Name: svn:executable
   + *

Added: developers/werner/wep/wep.c
===================================================================
--- developers/werner/wep/wep.c	                        (rev 0)
+++ developers/werner/wep/wep.c	2008-10-07 21:30:44 UTC (rev 4702)
@@ -0,0 +1,49 @@
+/*
+ * wep.c - Generate WEP keys from a passphrase
+ *
+ * Copyright (C) 2008 by OpenMoko, Inc.
+ * Written by Werner Almesberger <werner at openmoko.org>
+ * All Rights Reserved
+ *  
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "wepkey.h"
+
+
+static void dump(void *buf, size_t len)
+{
+	uint8_t *p;
+
+	for (p = buf; p != buf+len; p++)
+		printf("%02x", *p);
+	putchar('\n');
+}
+
+
+static void usage(const char *name)
+{
+	fprintf(stderr, "usage: %s key_phrase\n", name);
+	exit(1);
+}
+
+
+int main(int argc, char **argv)
+{
+	char buf[13];
+	int i;
+
+	if (argc != 2)
+		usage(*argv);
+	dump(buf, wepkey_128(buf, sizeof(buf), argv[1], 0));
+	for (i = 0; i != 4; i++)
+		dump(buf, wepkey_64(buf, sizeof(buf), argv[1], i));
+	return 0;
+}

Added: developers/werner/wep/wepkey.c
===================================================================
--- developers/werner/wep/wepkey.c	                        (rev 0)
+++ developers/werner/wep/wepkey.c	2008-10-07 21:30:44 UTC (rev 4702)
@@ -0,0 +1,74 @@
+/*
+ * wepkey.c - Generate WEP keys from a passphrase
+ *
+ * Copyright (C) 2008 by OpenMoko, Inc.
+ * Written by Werner Almesberger <werner at openmoko.org>
+ * All Rights Reserved
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ */
+
+/*
+ * Thanks to dd-wrt.com for the algorithm !
+ *
+ * http://svn.dd-wrt.com:8000/dd-wrt/browser/src/router/httpd/modules/wepkey.c?rev=631
+ */
+
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <openssl/md5.h>
+
+#include "wepkey.h"
+
+
+ssize_t wepkey_128(void *out, size_t size, const char *in, int n)
+{
+	MD5_CTX ctx;
+	char buf[64];
+	unsigned char tmp[16];
+	int len, i;
+
+	if (n)
+		abort(); /* not yet implemented */
+	if (size < WEPKEY_128_BYTES)
+		return -1;
+	len = strlen(in);
+	for (i = 0; i != sizeof(buf); i++)
+		buf[i] = in[i % len];
+	MD5_Init(&ctx);
+	MD5_Update(&ctx, buf, sizeof(buf));
+	MD5_Final(tmp, &ctx);
+	memcpy(out, tmp, WEPKEY_128_BYTES);
+	return WEPKEY_128_BYTES;
+}
+
+
+ssize_t wepkey_64(void *out, size_t size, const char *in, int n)
+{
+	int len, i, j;
+	uint32_t prn;
+
+	if (size < WEPKEY_64_BYTES)
+		return -1;
+	prn = 0;
+	len = strlen(in);
+	for (i = 0; i != len; i++)
+		prn ^= ((uint8_t *) in)[i] << (8*(i & 3));
+	for (i = 0; i != n; i++)
+		for (j = 0; j != WEPKEY_64_BYTES; j++) {
+			prn *= 0x343fd;
+			prn += 0x269ec3;
+		}
+	for (i = 0; i != WEPKEY_64_BYTES; i++) {
+		prn *= 0x343fd;
+		prn += 0x269ec3;
+		((uint8_t *) out)[i] = prn >> 16;
+	}
+	return WEPKEY_64_BYTES;
+}

Added: developers/werner/wep/wepkey.h
===================================================================
--- developers/werner/wep/wepkey.h	                        (rev 0)
+++ developers/werner/wep/wepkey.h	2008-10-07 21:30:44 UTC (rev 4702)
@@ -0,0 +1,28 @@
+/*
+ * wepkey.h - Generate WEP keys from a passphrase
+ *
+ * Copyright (C) 2008 by OpenMoko, Inc.
+ * Written by Werner Almesberger <werner at openmoko.org>
+ * All Rights Reserved
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ */
+
+
+#ifndef WEPKEY_H
+#define WEPKEY_H
+
+#include <sys/types.h>
+
+
+#define WEPKEY_128_BYTES	13
+#define WEPKEY_64_BYTES		5
+
+
+ssize_t wepkey_128(void *out, size_t size, const char *in, int n);
+ssize_t wepkey_64(void *out, size_t size, const char *in, int n);
+
+#endif /* !WEPKEY_H */




More information about the commitlog mailing list