Send commitlog mailing list submissions to
commitlog@lists.openmoko.org
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
[EMAIL PROTECTED]
You can reach the person managing the list at
[EMAIL PROTECTED]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:
1. Openmoko's OpenEmbedded repository. This is used to build the
Openmoko distribution: Changes to 'org.openmoko.dev'
([EMAIL PROTECTED])
2. Openmoko's OpenEmbedded repository. This is used to build the
Openmoko distribution: Changes to 'org.openmoko.dev'
([EMAIL PROTECTED])
3. Openmoko's OpenEmbedded repository. This is used to build the
Openmoko distribution: Changes to 'org.openmoko.dev'
([EMAIL PROTECTED])
4. r4704 - in developers/werner/wep: . tests
([EMAIL PROTECTED])
5. r4705 - in developers/werner/wep: . tests
([EMAIL PROTECTED])
6. Holger's qtopia repo: Changes to 'master' ([EMAIL PROTECTED])
7. Holger's qtopia repo: Changes to 'master' ([EMAIL PROTECTED])
8. r4704 - in developers/werner/wep: . tests
([EMAIL PROTECTED])
--- Begin Message ---
packages/tasks/task-openmoko-basic.bb | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
New commits:
commit 1830b113b8035eb7bea3b8a7ba3b6c2330e6af92
Author: Holger Hans Peter Freyther <[EMAIL PROTECTED]>
Date: Wed Oct 8 04:01:45 2008 +0200
[tasks] Set PACKAGE_ARCH after inherit task
Continue with d2ff2d4cd486e939c72b113fbfc808a743bd436e. Setting
PACKAGE_ARCH
before inherit task will set PACKAGE_ARCH to "all". In this case the
package
arch should be the machine as it contains a machine specific xserver.
ALLOW_EMPTY is already set by thate bb class as well...
--- End Message ---
--- Begin Message ---
packages/qtopia-phone/qtopia-phone-x11_git.bb | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
New commits:
commit 1631ce345412070debbe3d268b31a7196ef8c327
Author: I-Fan, Chen <[EMAIL PROTECTED]>
Date: Wed Oct 8 11:51:23 2008 +0800
[Qtopia] Fix the missmatch of packages alias.
--- End Message ---
--- Begin Message ---
packages/qtopia-phone/qtopia-phone-x11_git.bb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
New commits:
commit 2b7be62e987af9ae069c0da9e930236ee522fe4a
Author: I-Fan, Chen <[EMAIL PROTECTED]>
Date: Wed Oct 8 11:54:29 2008 +0800
[Qtopia] Sorry forgot adding PR. Update PR to 48
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2008-10-08 07:09:09 +0200 (Wed, 08 Oct 2008)
New Revision: 4704
Added:
developers/werner/wep/tests/Common
developers/werner/wep/tests/empty
developers/werner/wep/tests/index
Modified:
developers/werner/wep/Makefile
developers/werner/wep/tests/foobar
developers/werner/wep/wep.c
developers/werner/wep/wepkey.c
developers/werner/wep/wepkey.h
Log:
Lots of small cleanup.
- wepkey.c (wepkey_128, wepkey_64): also fail if the key index is out of range
or if the key length is zero
- wepkey.c (wepkey_64): simplified the PRNG loops and avoided an ugly cast
- wep.c (dump): allow errors (-1) to be passed and report them
- wep.c (main, usage): accept key index as optional argument
- wep.c (main): reversed order of 64-bit and 128-bit invocation
- wepkey.h: added description of general purpose and the arguments
- Makefile: added dependencies
- Makefile (clean): it's $(OBJS), not $(WEPKEY)
- tests/foobar, tests/Common: separated test harness from test
- tests/index: test retrieval by index and error handling
- tests/empty: test handling of empty key string
Modified: developers/werner/wep/Makefile
===================================================================
--- developers/werner/wep/Makefile 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/Makefile 2008-10-08 05:09:09 UTC (rev 4704)
@@ -3,18 +3,26 @@
OBJS=wep.o wepkey.o
-.PHONY: all test tests clean spotless
+.PHONY: all depend dep test tests clean spotless
all: wep
wep: $(OBJS)
+depend dep:
+ $(CPP) $(CFLAGS) -MM -MG *.c >.depend || \
+ { rm -f .depend; exit 1; }
+
+ifeq (.depend,$(wildcard .depend))
+include .depend
+endif
+
test tests: wep
$(MAKE) -C tests
clean:
- rm -f $(WEPKEY)
+ rm -f $(OBJS) .depend
spotless: clean
rm -f wep
Added: developers/werner/wep/tests/Common
===================================================================
--- developers/werner/wep/tests/Common (rev 0)
+++ developers/werner/wep/tests/Common 2008-10-08 05:09:09 UTC (rev 4704)
@@ -0,0 +1,27 @@
+fail()
+{
+ echo "$title:" FAILED 1>&2
+ exit 1
+}
+
+
+wep()
+{
+ title="$1"
+ shift
+ ../wep "$@" >_out 2>&1 || fail
+ diff -u - _out || fail
+ rm -f _out
+ echo "$title:" PASS 1>&2
+}
+
+
+wep_error()
+{
+ title="$1"
+ shift
+ ../wep "$@" >_out 2>&1 && fail
+ diff -u - _out || fail
+ rm -f _out
+ echo "$title:" PASS 1>&2
+}
Added: developers/werner/wep/tests/empty
===================================================================
--- developers/werner/wep/tests/empty (rev 0)
+++ developers/werner/wep/tests/empty 2008-10-08 05:09:09 UTC (rev 4704)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+. ./Common
+
+wep_error "Empty key string" "" <<EOF
+error
+EOF
Property changes on: developers/werner/wep/tests/empty
___________________________________________________________________
Name: svn:executable
+ *
Modified: developers/werner/wep/tests/foobar
===================================================================
--- developers/werner/wep/tests/foobar 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/tests/foobar 2008-10-08 05:09:09 UTC (rev 4704)
@@ -1,23 +1,14 @@
#!/bin/sh
-fail()
-{
- echo TEST FAILED 1>&2
- exit 1
-}
+. ./Common
-
-../wep foobar >_out || fail
-diff -u - _out <<EOF || fail
-49d68437b1ffb0db3fdf2d4a93
-a240f0feabe487bfcb2cfdb05b
-0c81b0bfab27187ea7b5467c63
-80b0656e46bc81e0627a046701
+wep "Hash 'foobar'" foobar <<EOF
a4beb3b8ec
b697e900c8
b5d2bb755b
197ea2abe7
+49d68437b1ffb0db3fdf2d4a93
+a240f0feabe487bfcb2cfdb05b
+0c81b0bfab27187ea7b5467c63
+80b0656e46bc81e0627a046701
EOF
-
-echo PASSED
-exit 0
Added: developers/werner/wep/tests/index
===================================================================
--- developers/werner/wep/tests/index (rev 0)
+++ developers/werner/wep/tests/index 2008-10-08 05:09:09 UTC (rev 4704)
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+. ./Common
+
+wep "Select key index (2)" Test 2 <<EOF
+0e3171a65e
+716af1404abc3220568da0818d
+EOF
+
+wep "Select key index (3)" Test 3 <<EOF
+a04dd8af33
+ec3c15db839815f12e7fca8494
+EOF
+
+wep_error "Negative index" foo -1 <<EOF
+error
+EOF
+
+wep_error "Index too big" bar 5 <<EOF
+error
+EOF
Property changes on: developers/werner/wep/tests/index
___________________________________________________________________
Name: svn:executable
+ *
Modified: developers/werner/wep/wep.c
===================================================================
--- developers/werner/wep/wep.c 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/wep.c 2008-10-08 05:09:09 UTC (rev 4704)
@@ -18,10 +18,14 @@
#include "wepkey.h"
-static void dump(void *buf, size_t len)
+static void dump(void *buf, ssize_t len)
{
uint8_t *p;
+ if (len < 0) {
+ fprintf(stderr, "error\n");
+ exit(1);
+ }
for (p = buf; p != buf+len; p++)
printf("%02x", *p);
putchar('\n');
@@ -30,7 +34,7 @@
static void usage(const char *name)
{
- fprintf(stderr, "usage: %s key_phrase\n", name);
+ fprintf(stderr, "usage: %s key_phrase [key_index]\n", name);
exit(1);
}
@@ -38,13 +42,28 @@
int main(int argc, char **argv)
{
char buf[13];
- int i;
+ int key_index;
- if (argc != 2)
+ switch (argc) {
+ case 2:
+ for (key_index = 0; key_index != 4; key_index++)
+ dump(buf,
+ wepkey_64(buf, sizeof(buf), argv[1], key_index));
+ for (key_index = 0; key_index != 4; key_index++)
+ dump(buf,
+ wepkey_128(buf, sizeof(buf), argv[1], key_index));
+ break;
+ case 3:
+ /*
+ * We intentionally don't sanitize this argument, so that we
+ * can test the error handling in wepkey_*.
+ */
+ key_index = atoi(argv[2]);
+ dump(buf, wepkey_64(buf, sizeof(buf), argv[1], key_index));
+ dump(buf, wepkey_128(buf, sizeof(buf), argv[1], key_index));
+ break;
+ default:
usage(*argv);
- for (i = 0; i != 4; i++)
- dump(buf, wepkey_128(buf, sizeof(buf), argv[1], i));
- for (i = 0; i != 4; i++)
- dump(buf, wepkey_64(buf, sizeof(buf), argv[1], i));
+ }
return 0;
}
Modified: developers/werner/wep/wepkey.c
===================================================================
--- developers/werner/wep/wepkey.c 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/wepkey.c 2008-10-08 05:09:09 UTC (rev 4704)
@@ -37,7 +37,13 @@
if (size < WEPKEY_128_BYTES)
return -1;
+ if (n < 0 || n >= 4)
+ return -1;
+
len = strlen(in);
+ if (!len)
+ return -1;
+
for (i = 0; i != sizeof(buf); i++) {
j = i % (len+n*3);
buf[i] = j < len ? in[j] : extra[j-len];
@@ -52,24 +58,30 @@
ssize_t wepkey_64(void *out, size_t size, const char *in, int n)
{
- int len, i, j;
+ int len, i;
uint32_t prn;
+ uint8_t *p;
if (size < WEPKEY_64_BYTES)
return -1;
+ if (n < 0 || n >= 4)
+ return -1;
+
+ len = strlen(in);
+ if (!len)
+ 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++) {
+ for (i = 0; i != n*WEPKEY_64_BYTES; i++) {
prn *= 0x343fd;
prn += 0x269ec3;
- ((uint8_t *) out)[i] = prn >> 16;
}
+ for (p = out; p != out+WEPKEY_64_BYTES; p++) {
+ prn *= 0x343fd;
+ prn += 0x269ec3;
+ *p = prn >> 16;
+ }
return WEPKEY_64_BYTES;
}
Modified: developers/werner/wep/wepkey.h
===================================================================
--- developers/werner/wep/wepkey.h 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/wepkey.h 2008-10-08 05:09:09 UTC (rev 4704)
@@ -11,6 +11,10 @@
* version 2.1 of the License, or (at your option) any later version.
*/
+/*
+ * wpkey_64 and wepkey_128 implement the keyphrase hash algorithm found in many
+ * (but not all) common access points, including the Linksys WRT54G series.
+ */
#ifndef WEPKEY_H
#define WEPKEY_H
@@ -22,6 +26,11 @@
#define WEPKEY_64_BYTES 5
+/*
+ * "size" is the size of the buffer at "out", in bytes. It has to be at least 5
+ * or 13 bytes, respectively. "n" is the key index, in the range 0...3.
+ */
+
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);
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2008-10-08 07:17:05 +0200 (Wed, 08 Oct 2008)
New Revision: 4705
Modified:
developers/werner/wep/Makefile
developers/werner/wep/tests/Makefile
developers/werner/wep/wepkey.c
developers/werner/wep/wepkey.h
Log:
Cleanup, part 2. Code move separated for clarity.
- wepkey.h, wepkey.c: reversed order of wepkey_64 and wepkey_128
- tests/Makefile (all): run all tests
- Makefile (clean): also clean up tests/
Modified: developers/werner/wep/Makefile
===================================================================
--- developers/werner/wep/Makefile 2008-10-08 05:09:09 UTC (rev 4704)
+++ developers/werner/wep/Makefile 2008-10-08 05:17:05 UTC (rev 4705)
@@ -23,6 +23,7 @@
clean:
rm -f $(OBJS) .depend
+ $(MAKE) -C tests clean
spotless: clean
rm -f wep
Modified: developers/werner/wep/tests/Makefile
===================================================================
--- developers/werner/wep/tests/Makefile 2008-10-08 05:09:09 UTC (rev
4704)
+++ developers/werner/wep/tests/Makefile 2008-10-08 05:17:05 UTC (rev
4705)
@@ -1,7 +1,10 @@
.PHONY: tests clean
+# We list all lower-case letter explicitly to keep localization from messing
+# with us.
+
all:
- ./foobar
+ for n in [abcdefghijklmnopqrstuvwxyz]*; do ./$$n || exit; done
clean:
rm -f _*
Modified: developers/werner/wep/wepkey.c
===================================================================
--- developers/werner/wep/wepkey.c 2008-10-08 05:09:09 UTC (rev 4704)
+++ developers/werner/wep/wepkey.c 2008-10-08 05:17:05 UTC (rev 4705)
@@ -27,35 +27,6 @@
#include "wepkey.h"
-ssize_t wepkey_128(void *out, size_t size, const char *in, int n)
-{
- const char extra[] = "#$%" "[EMAIL PROTECTED]" "%&^";
- MD5_CTX ctx;
- char buf[64];
- unsigned char tmp[16];
- int len, i, j;
-
- if (size < WEPKEY_128_BYTES)
- return -1;
- if (n < 0 || n >= 4)
- return -1;
-
- len = strlen(in);
- if (!len)
- return -1;
-
- for (i = 0; i != sizeof(buf); i++) {
- j = i % (len+n*3);
- buf[i] = j < len ? in[j] : extra[j-len];
- }
- MD5_Init(&ctx);
- MD5_Update(&ctx, buf, sizeof(buf));
- MD5_Final(tmp, &ctx);
- memcpy(out, tmp+n, WEPKEY_128_BYTES);
- return WEPKEY_128_BYTES;
-}
-
-
ssize_t wepkey_64(void *out, size_t size, const char *in, int n)
{
int len, i;
@@ -85,3 +56,32 @@
}
return WEPKEY_64_BYTES;
}
+
+
+ssize_t wepkey_128(void *out, size_t size, const char *in, int n)
+{
+ const char extra[] = "#$%" "[EMAIL PROTECTED]" "%&^";
+ MD5_CTX ctx;
+ char buf[64];
+ unsigned char tmp[16];
+ int len, i, j;
+
+ if (size < WEPKEY_128_BYTES)
+ return -1;
+ if (n < 0 || n >= 4)
+ return -1;
+
+ len = strlen(in);
+ if (!len)
+ return -1;
+
+ for (i = 0; i != sizeof(buf); i++) {
+ j = i % (len+n*3);
+ buf[i] = j < len ? in[j] : extra[j-len];
+ }
+ MD5_Init(&ctx);
+ MD5_Update(&ctx, buf, sizeof(buf));
+ MD5_Final(tmp, &ctx);
+ memcpy(out, tmp+n, WEPKEY_128_BYTES);
+ return WEPKEY_128_BYTES;
+}
Modified: developers/werner/wep/wepkey.h
===================================================================
--- developers/werner/wep/wepkey.h 2008-10-08 05:09:09 UTC (rev 4704)
+++ developers/werner/wep/wepkey.h 2008-10-08 05:17:05 UTC (rev 4705)
@@ -22,8 +22,8 @@
#include <sys/types.h>
+#define WEPKEY_64_BYTES 5
#define WEPKEY_128_BYTES 13
-#define WEPKEY_64_BYTES 5
/*
@@ -31,7 +31,7 @@
* or 13 bytes, respectively. "n" is the key index, in the range 0...3.
*/
+ssize_t wepkey_64(void *out, size_t size, const char *in, int n);
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 */
--- End Message ---
--- Begin Message ---
.../phonevendors/ficgta01/vendor_ficgta01.cpp | 5 ++++-
src/libraries/qtopiaphonemodem/qmodemservice.cpp | 11 +++++++++++
src/libraries/qtopiaphonemodem/qmodemservice.h | 5 +++++
3 files changed, 20 insertions(+), 1 deletions(-)
New commits:
commit 42a060964f35cfb7f8018e904e01150a780511c1
Author: Holger Freyther <[EMAIL PROTECTED]>
Date: Wed Oct 8 04:20:49 2008 +0200
[gsm] Tell everyone what charset we intend to use
AT+CSCS=UCS2 can have a influence on many commands when the
default encoding is used. Now everyone can ask the QModemService
they are associated with about the charset.
QModemSupplemntaryServices will be the first user for CUSD handling.
--- End Message ---
--- Begin Message ---
.../phonevendors/ficgta01/vendor_ficgta01.cpp | 5 ++++-
src/libraries/qtopiaphonemodem/qmodemservice.cpp | 11 +++++++++++
src/libraries/qtopiaphonemodem/qmodemservice.h | 5 +++++
3 files changed, 20 insertions(+), 1 deletions(-)
New commits:
commit 42a060964f35cfb7f8018e904e01150a780511c1
Author: Holger Freyther <[EMAIL PROTECTED]>
Date: Wed Oct 8 04:20:49 2008 +0200
[gsm] Tell everyone what charset we intend to use
AT+CSCS=UCS2 can have a influence on many commands when the
default encoding is used. Now everyone can ask the QModemService
they are associated with about the charset.
QModemSupplemntaryServices will be the first user for CUSD handling.
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2008-10-08 07:09:09 +0200 (Wed, 08 Oct 2008)
New Revision: 4704
Added:
developers/werner/wep/tests/Common
developers/werner/wep/tests/empty
developers/werner/wep/tests/index
Modified:
developers/werner/wep/Makefile
developers/werner/wep/tests/foobar
developers/werner/wep/wep.c
developers/werner/wep/wepkey.c
developers/werner/wep/wepkey.h
Log:
Lots of small cleanup.
- wepkey.c (wepkey_128, wepkey_64): also fail if the key index is out of range
or if the key length is zero
- wepkey.c (wepkey_64): simplified the PRNG loops and avoided an ugly cast
- wep.c (dump): allow errors (-1) to be passed and report them
- wep.c (main, usage): accept key index as optional argument
- wep.c (main): reversed order of 64-bit and 128-bit invocation
- wepkey.h: added description of general purpose and the arguments
- Makefile: added dependencies
- Makefile (clean): it's $(OBJS), not $(WEPKEY)
- tests/foobar, tests/Common: separated test harness from test
- tests/index: test retrieval by index and error handling
- tests/empty: test handling of empty key string
Modified: developers/werner/wep/Makefile
===================================================================
--- developers/werner/wep/Makefile 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/Makefile 2008-10-08 05:09:09 UTC (rev 4704)
@@ -3,18 +3,26 @@
OBJS=wep.o wepkey.o
-.PHONY: all test tests clean spotless
+.PHONY: all depend dep test tests clean spotless
all: wep
wep: $(OBJS)
+depend dep:
+ $(CPP) $(CFLAGS) -MM -MG *.c >.depend || \
+ { rm -f .depend; exit 1; }
+
+ifeq (.depend,$(wildcard .depend))
+include .depend
+endif
+
test tests: wep
$(MAKE) -C tests
clean:
- rm -f $(WEPKEY)
+ rm -f $(OBJS) .depend
spotless: clean
rm -f wep
Added: developers/werner/wep/tests/Common
===================================================================
--- developers/werner/wep/tests/Common (rev 0)
+++ developers/werner/wep/tests/Common 2008-10-08 05:09:09 UTC (rev 4704)
@@ -0,0 +1,27 @@
+fail()
+{
+ echo "$title:" FAILED 1>&2
+ exit 1
+}
+
+
+wep()
+{
+ title="$1"
+ shift
+ ../wep "$@" >_out 2>&1 || fail
+ diff -u - _out || fail
+ rm -f _out
+ echo "$title:" PASS 1>&2
+}
+
+
+wep_error()
+{
+ title="$1"
+ shift
+ ../wep "$@" >_out 2>&1 && fail
+ diff -u - _out || fail
+ rm -f _out
+ echo "$title:" PASS 1>&2
+}
Added: developers/werner/wep/tests/empty
===================================================================
--- developers/werner/wep/tests/empty (rev 0)
+++ developers/werner/wep/tests/empty 2008-10-08 05:09:09 UTC (rev 4704)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+. ./Common
+
+wep_error "Empty key string" "" <<EOF
+error
+EOF
Property changes on: developers/werner/wep/tests/empty
___________________________________________________________________
Name: svn:executable
+ *
Modified: developers/werner/wep/tests/foobar
===================================================================
--- developers/werner/wep/tests/foobar 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/tests/foobar 2008-10-08 05:09:09 UTC (rev 4704)
@@ -1,23 +1,14 @@
#!/bin/sh
-fail()
-{
- echo TEST FAILED 1>&2
- exit 1
-}
+. ./Common
-
-../wep foobar >_out || fail
-diff -u - _out <<EOF || fail
-49d68437b1ffb0db3fdf2d4a93
-a240f0feabe487bfcb2cfdb05b
-0c81b0bfab27187ea7b5467c63
-80b0656e46bc81e0627a046701
+wep "Hash 'foobar'" foobar <<EOF
a4beb3b8ec
b697e900c8
b5d2bb755b
197ea2abe7
+49d68437b1ffb0db3fdf2d4a93
+a240f0feabe487bfcb2cfdb05b
+0c81b0bfab27187ea7b5467c63
+80b0656e46bc81e0627a046701
EOF
-
-echo PASSED
-exit 0
Added: developers/werner/wep/tests/index
===================================================================
--- developers/werner/wep/tests/index (rev 0)
+++ developers/werner/wep/tests/index 2008-10-08 05:09:09 UTC (rev 4704)
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+. ./Common
+
+wep "Select key index (2)" Test 2 <<EOF
+0e3171a65e
+716af1404abc3220568da0818d
+EOF
+
+wep "Select key index (3)" Test 3 <<EOF
+a04dd8af33
+ec3c15db839815f12e7fca8494
+EOF
+
+wep_error "Negative index" foo -1 <<EOF
+error
+EOF
+
+wep_error "Index too big" bar 5 <<EOF
+error
+EOF
Property changes on: developers/werner/wep/tests/index
___________________________________________________________________
Name: svn:executable
+ *
Modified: developers/werner/wep/wep.c
===================================================================
--- developers/werner/wep/wep.c 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/wep.c 2008-10-08 05:09:09 UTC (rev 4704)
@@ -18,10 +18,14 @@
#include "wepkey.h"
-static void dump(void *buf, size_t len)
+static void dump(void *buf, ssize_t len)
{
uint8_t *p;
+ if (len < 0) {
+ fprintf(stderr, "error\n");
+ exit(1);
+ }
for (p = buf; p != buf+len; p++)
printf("%02x", *p);
putchar('\n');
@@ -30,7 +34,7 @@
static void usage(const char *name)
{
- fprintf(stderr, "usage: %s key_phrase\n", name);
+ fprintf(stderr, "usage: %s key_phrase [key_index]\n", name);
exit(1);
}
@@ -38,13 +42,28 @@
int main(int argc, char **argv)
{
char buf[13];
- int i;
+ int key_index;
- if (argc != 2)
+ switch (argc) {
+ case 2:
+ for (key_index = 0; key_index != 4; key_index++)
+ dump(buf,
+ wepkey_64(buf, sizeof(buf), argv[1], key_index));
+ for (key_index = 0; key_index != 4; key_index++)
+ dump(buf,
+ wepkey_128(buf, sizeof(buf), argv[1], key_index));
+ break;
+ case 3:
+ /*
+ * We intentionally don't sanitize this argument, so that we
+ * can test the error handling in wepkey_*.
+ */
+ key_index = atoi(argv[2]);
+ dump(buf, wepkey_64(buf, sizeof(buf), argv[1], key_index));
+ dump(buf, wepkey_128(buf, sizeof(buf), argv[1], key_index));
+ break;
+ default:
usage(*argv);
- for (i = 0; i != 4; i++)
- dump(buf, wepkey_128(buf, sizeof(buf), argv[1], i));
- for (i = 0; i != 4; i++)
- dump(buf, wepkey_64(buf, sizeof(buf), argv[1], i));
+ }
return 0;
}
Modified: developers/werner/wep/wepkey.c
===================================================================
--- developers/werner/wep/wepkey.c 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/wepkey.c 2008-10-08 05:09:09 UTC (rev 4704)
@@ -37,7 +37,13 @@
if (size < WEPKEY_128_BYTES)
return -1;
+ if (n < 0 || n >= 4)
+ return -1;
+
len = strlen(in);
+ if (!len)
+ return -1;
+
for (i = 0; i != sizeof(buf); i++) {
j = i % (len+n*3);
buf[i] = j < len ? in[j] : extra[j-len];
@@ -52,24 +58,30 @@
ssize_t wepkey_64(void *out, size_t size, const char *in, int n)
{
- int len, i, j;
+ int len, i;
uint32_t prn;
+ uint8_t *p;
if (size < WEPKEY_64_BYTES)
return -1;
+ if (n < 0 || n >= 4)
+ return -1;
+
+ len = strlen(in);
+ if (!len)
+ 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++) {
+ for (i = 0; i != n*WEPKEY_64_BYTES; i++) {
prn *= 0x343fd;
prn += 0x269ec3;
- ((uint8_t *) out)[i] = prn >> 16;
}
+ for (p = out; p != out+WEPKEY_64_BYTES; p++) {
+ prn *= 0x343fd;
+ prn += 0x269ec3;
+ *p = prn >> 16;
+ }
return WEPKEY_64_BYTES;
}
Modified: developers/werner/wep/wepkey.h
===================================================================
--- developers/werner/wep/wepkey.h 2008-10-07 21:48:14 UTC (rev 4703)
+++ developers/werner/wep/wepkey.h 2008-10-08 05:09:09 UTC (rev 4704)
@@ -11,6 +11,10 @@
* version 2.1 of the License, or (at your option) any later version.
*/
+/*
+ * wpkey_64 and wepkey_128 implement the keyphrase hash algorithm found in many
+ * (but not all) common access points, including the Linksys WRT54G series.
+ */
#ifndef WEPKEY_H
#define WEPKEY_H
@@ -22,6 +26,11 @@
#define WEPKEY_64_BYTES 5
+/*
+ * "size" is the size of the buffer at "out", in bytes. It has to be at least 5
+ * or 13 bytes, respectively. "n" is the key index, in the range 0...3.
+ */
+
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);
--- End Message ---
_______________________________________________
commitlog mailing list
commitlog@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/commitlog