[BACK]Return to sha1.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_ntl / crypt / sha1

Diff for /OpenXM/src/ox_ntl/crypt/sha1/sha1.c between version 1.1 and 1.3

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

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.3

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>