=================================================================== RCS file: /home/cvs/OpenXM/src/ox_ntl/crypt/sha1/sha1.c,v retrieving revision 1.1 retrieving revision 1.3 diff -u -p -r1.1 -r1.3 --- OpenXM/src/ox_ntl/crypt/sha1/sha1.c 2004/01/12 13:16:28 1.1 +++ OpenXM/src/ox_ntl/crypt/sha1/sha1.c 2004/05/16 15:02:39 1.3 @@ -1,7 +1,10 @@ -/* $OpenXM$ */ -/* RFC 3174 */ +/* $OpenXM: OpenXM/src/ox_ntl/crypt/sha1/sha1.c,v 1.2 2004/03/25 13:34:19 iwane Exp $ */ +/* RFC 3174 - SHA-1 (US Secure Hash Algorithm 1 (SHA1))*/ +#include +#include "sha1.h" + /* Global Constant */ static const unsigned int K[4] = {0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6}; static const unsigned int H[5] = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; @@ -72,7 +75,7 @@ f(unsigned int t, unsigned int b, unsigned int c, unsi return ((b & c) | (b & d) | (c & d)); } - // Invalid Parameter. + /* Invalid Parameter. */ return (0); } @@ -80,15 +83,15 @@ f(unsigned int t, unsigned int b, unsigned int c, unsi /* sizeof(msg) == 512 / 8. * padding. */ -static void -md(unsigned int *h, const unsigned char *msg) +void +sha1_md(unsigned int *h, const unsigned char *msg) { int t; unsigned int a, b, c, d, e, temp; int i; unsigned int w[80]; - /* .... */ + /* ... */ for (t = 0; t < 16; t++) { w[t] = 0; for (i = 0; i < 4; i++) { @@ -113,7 +116,6 @@ md(unsigned int *h, const unsigned char *msg) c = lshift32(b, 30); b = a; a = temp; - } h[0] += a; @@ -124,20 +126,26 @@ md(unsigned int *h, const unsigned char *msg) } int -sha1_h(unsigned char *Ph, const unsigned char *msg, int len, unsigned int *h) +sha1_h(unsigned char *Ph, const unsigned char *msg, int len, const unsigned int *hp) { int i, j, cnt, l = len; unsigned char buf[1024]; + unsigned int h[sizeof(H) / sizeof(H[0])]; + if (hp == NULL) + memcpy(h, H, sizeof(H)); + else + memcpy(h, hp, sizeof(h)); + while (l > BLOCK) { - md(h, msg); + sha1_md(h, msg); msg += BLOCK; l -= BLOCK; } cnt = padding(buf, msg, len); for (i = 0; i < cnt; i++) { - md(h, buf + BLOCK * i); + sha1_md(h, buf + BLOCK * i); } memset(Ph, 0x00, sizeof(H)); @@ -147,7 +155,6 @@ sha1_h(unsigned char *Ph, const unsigned char *msg, in } } - return (0); } @@ -155,12 +162,7 @@ sha1_h(unsigned char *Ph, const unsigned char *msg, in int sha1(unsigned char *Ph, const unsigned char *msg, int len) { - unsigned int h[sizeof(H) / sizeof(H[0])]; - - memcpy(h, H, sizeof(H)); - - return (sha1_h(Ph, msg, len, h)); - + return (sha1_h(Ph, msg, len, NULL)); }