Re: MD5 removal of int64 code - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: MD5 removal of int64 code |
Date | |
Msg-id | 200108250139.f7P1dWH22647@candle.pha.pa.us Whole thread Raw |
List | pgsql-patches |
Sorry, this was supposed to go to patches. Also, I applied it to CVS by accident while fixing a jdbc problem. Forgot it was in my CVS tree. Anyway, it is applied. > I have applied the following patch to remove MD5 usage of int64 types. > I split it into two int32 values and did the job that way. I also > changed the code to use standard c.h data types, and changes 0xFF to > 0xff. > > > -- > Bruce Momjian | http://candle.pha.pa.us > pgman@candle.pha.pa.us | (610) 853-3000 > + If your life is a hard drive, | 830 Blythe Avenue > + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 > Index: src/backend/libpq/md5.c > =================================================================== > RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/libpq/md5.c,v > retrieving revision 1.4 > diff -c -r1.4 md5.c > *** src/backend/libpq/md5.c 2001/08/17 02:59:19 1.4 > --- src/backend/libpq/md5.c 2001/08/25 01:00:23 > *************** > *** 24,33 **** > * PRIVATE FUNCTIONS > */ > > - typedef unsigned char unsigned8; > - typedef unsigned int unsigned32; > - typedef unsigned long unsigned64; > - > #ifdef FRONTEND > #undef palloc > #define palloc malloc > --- 24,29 ---- > *************** > *** 39,51 **** > * The returned array is allocated using malloc. the caller should free it > * when it is no longer needed. > */ > ! static unsigned8 * > ! createPaddedCopyWithLength(unsigned8 *b, unsigned32 *l) > { > ! unsigned8 *ret; > ! unsigned32 q; > ! unsigned32 len, newLen448; > ! unsigned64 len64; > > len = ((b == NULL) ? 0 : *l); > newLen448 = len + 64 - (len % 64) - 8; > --- 35,47 ---- > * The returned array is allocated using malloc. the caller should free it > * when it is no longer needed. > */ > ! static uint8 * > ! createPaddedCopyWithLength(uint8 *b, uint32 *l) > { > ! uint8 *ret; > ! uint32 q; > ! uint32 len, newLen448; > ! uint32 len_high, len_low; /* 64-bit value split into 32-bit sections */ > > len = ((b == NULL) ? 0 : *l); > newLen448 = len + 64 - (len % 64) - 8; > *************** > *** 53,63 **** > newLen448 += 64; > > *l = newLen448 + 8; > ! if ((ret = (unsigned8 *) malloc(sizeof(unsigned8) * *l)) == NULL) > return NULL; > > if (b != NULL) > ! memcpy(ret, b, sizeof(unsigned8) * len); > > /* pad */ > ret[len] = 0x80; > --- 49,59 ---- > newLen448 += 64; > > *l = newLen448 + 8; > ! if ((ret = (uint8 *) malloc(sizeof(uint8) * *l)) == NULL) > return NULL; > > if (b != NULL) > ! memcpy(ret, b, sizeof(uint8) * len); > > /* pad */ > ret[len] = 0x80; > *************** > *** 65,88 **** > ret[q] = 0x00; > > /* append length as a 64 bit bitcount */ > ! len64 = len; > ! len64 <<= 3; > q = newLen448; > ! ret[q++] = (len64 & 0xFF); > ! len64 >>= 8; > ! ret[q++] = (len64 & 0xFF); > ! len64 >>= 8; > ! ret[q++] = (len64 & 0xFF); > ! len64 >>= 8; > ! ret[q++] = (len64 & 0xFF); > ! len64 >>= 8; > ! ret[q++] = (len64 & 0xFF); > ! len64 >>= 8; > ! ret[q++] = (len64 & 0xFF); > ! len64 >>= 8; > ! ret[q++] = (len64 & 0xFF); > ! len64 >>= 8; > ! ret[q] = (len64 & 0xFF); > > return ret; > } > --- 61,86 ---- > ret[q] = 0x00; > > /* append length as a 64 bit bitcount */ > ! len_low = len; > ! /* split into two 32-bit values */ > ! /* we only look at the bottom 32-bits */ > ! len_high = len >> 29; > ! len_low <<= 3; > q = newLen448; > ! ret[q++] = (len_low & 0xff); > ! len_low >>= 8; > ! ret[q++] = (len_low & 0xff); > ! len_low >>= 8; > ! ret[q++] = (len_low & 0xff); > ! len_low >>= 8; > ! ret[q++] = (len_low & 0xff); > ! ret[q++] = (len_high & 0xff); > ! len_high >>= 8; > ! ret[q++] = (len_high & 0xff); > ! len_high >>= 8; > ! ret[q++] = (len_high & 0xff); > ! len_high >>= 8; > ! ret[q] = (len_high & 0xff); > > return ret; > } > *************** > *** 94,102 **** > #define ROT_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) > > static void > ! doTheRounds(unsigned32 X[16], unsigned32 state[4]) > { > ! unsigned32 a, b, c, d; > > a = state[0]; > b = state[1]; > --- 92,100 ---- > #define ROT_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) > > static void > ! doTheRounds(uint32 X[16], uint32 state[4]) > { > ! uint32 a, b, c, d; > > a = state[0]; > b = state[1]; > *************** > *** 182,194 **** > } > > static int > ! calculateDigestFromBuffer(unsigned8 *b, unsigned32 len, unsigned8 sum[16]) > { > ! register unsigned32 i, j, k, newI; > ! unsigned32 l; > ! unsigned8 *input; > ! register unsigned32 *wbp; > ! unsigned32 workBuff[16], state[4]; > > l = len; > > --- 180,192 ---- > } > > static int > ! calculateDigestFromBuffer(uint8 *b, uint32 len, uint8 sum[16]) > { > ! register uint32 i, j, k, newI; > ! uint32 l; > ! uint8 *input; > ! register uint32 *wbp; > ! uint32 workBuff[16], state[4]; > > l = len; > > *************** > *** 223,241 **** > j = 0; > for (i = 0; i < 4; i++) { > k = state[i]; > ! sum[j++] = (k & 0xFF); > k >>= 8; > ! sum[j++] = (k & 0xFF); > k >>= 8; > ! sum[j++] = (k & 0xFF); > k >>= 8; > ! sum[j++] = (k & 0xFF); > } > return 1; > } > > static void > ! bytesToHex(unsigned8 b[16], char *s) > { > static char *hex = "0123456789abcdef"; > int q, w; > --- 221,239 ---- > j = 0; > for (i = 0; i < 4; i++) { > k = state[i]; > ! sum[j++] = (k & 0xff); > k >>= 8; > ! sum[j++] = (k & 0xff); > k >>= 8; > ! sum[j++] = (k & 0xff); > k >>= 8; > ! sum[j++] = (k & 0xff); > } > return 1; > } > > static void > ! bytesToHex(uint8 b[16], char *s) > { > static char *hex = "0123456789abcdef"; > int q, w; > *************** > *** 280,288 **** > bool > md5_hash(const void *buff, size_t len, char *hexsum) > { > ! unsigned8 sum[16]; > > ! if (!calculateDigestFromBuffer((unsigned8 *) buff, len, sum)) > return false; > > bytesToHex(sum, hexsum); > --- 278,286 ---- > bool > md5_hash(const void *buff, size_t len, char *hexsum) > { > ! uint8 sum[16]; > > ! if (!calculateDigestFromBuffer((uint8 *) buff, len, sum)) > return false; > > bytesToHex(sum, hexsum); -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
pgsql-patches by date: