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

Reply via email to