|
|
Message-ID: <20120613061032.GH17860@port70.net>
Date: Wed, 13 Jun 2012 08:10:32 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: FreeSec crypt()
* Rich Felker <dalias@...ifal.cx> [2012-06-12 21:18:42 -0400]:
> On Wed, Jun 13, 2012 at 03:51:13AM +0400, Solar Designer wrote:
> > Rich -
> >
> > As discussed on IRC, here is a revision of the FreeSec crypt() code with
>
> Thanks. Here's a _really_ quick draft, untested, of the direction I
> wanted to take it with making the tables static-initialized. Note that
my comments:
> #include <sys/types.h>
> #include <string.h>
>
> struct _crypt_extended_local {
> u_int32_t saltbits;
> u_int32_t en_keysl[16], en_keysr[16];
> };
>
-#include <sys/types.h>
+#include <stdint.h>
s/u_int32_t/uint32_t/g
s/u_char/unsigned char/g
> static inline int
> ascii_to_bin(int ch)
> {
> int sch = ch>127 ? -(256-ch) : ch;
> int retval;
>
> retval = sch - '.';
> if (sch >= 'A') {
> retval = sch - ('A' - 12);
> if (sch >= 'a')
> retval = sch - ('a' - 38);
> }
> retval &= 0x3f;
>
> return retval;
> }
>
s/inline//
on [-128,255] the following code gives the same result:
static int ascii_to_bin2(int c)
{
if (c >= 128)
c += -128 + 18;
else if (c >= 97)
c += -97 + 38;
else if (c >= 65)
c += -65 + 12;
else
c += 128 + 18;
return (unsigned)c % 64;
}
> char *
> _crypt_extended_r(const char *key, const char *setting, char *output)
> {
...
> while (q - (u_char *) keybuf < sizeof(keybuf)) {
> *q++ = *key << 1;
implementation-defined signed shift
> for (i = 1, count = 0; i < 5; i++) {
> int value = ascii_to_bin(setting[i]);
> if (ascii64[value] != setting[i])
> return NULL;
> count |= value << (i - 1) * 6;
> }
signed shift (harmless)
> while (q - (u_char *) keybuf < sizeof(keybuf) && *key)
> *q++ ^= *key++ << 1;
signed shift
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.