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