URI: 
       sha1block.c - 9base - revived minimalist port of Plan 9 userland to Unix
  HTML git clone git://git.suckless.org/9base
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       sha1block.c (4673B)
       ---
            1 #include "os.h"
            2 
            3 void
            4 _sha1block(uchar *p, ulong len, u32int *s)
            5 {
            6         u32int a, b, c, d, e, x;
            7         uchar *end;
            8         u32int *wp, *wend;
            9         u32int w[80];
           10 
           11         /* at this point, we have a multiple of 64 bytes */
           12         for(end = p+len; p < end;){
           13                 a = s[0];
           14                 b = s[1];
           15                 c = s[2];
           16                 d = s[3];
           17                 e = s[4];
           18 
           19                 wend = w + 15;
           20                 for(wp = w; wp < wend; wp += 5){
           21                         wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
           22                         e += ((a<<5) | (a>>27)) + wp[0];
           23                         e += 0x5a827999 + (((c^d)&b)^d);
           24                         b = (b<<30)|(b>>2);
           25 
           26                         wp[1] = (p[4]<<24) | (p[5]<<16) | (p[6]<<8) | p[7];
           27                         d += ((e<<5) | (e>>27)) + wp[1];
           28                         d += 0x5a827999 + (((b^c)&a)^c);
           29                         a = (a<<30)|(a>>2);
           30 
           31                         wp[2] = (p[8]<<24) | (p[9]<<16) | (p[10]<<8) | p[11];
           32                         c += ((d<<5) | (d>>27)) + wp[2];
           33                         c += 0x5a827999 + (((a^b)&e)^b);
           34                         e = (e<<30)|(e>>2);
           35 
           36                         wp[3] = (p[12]<<24) | (p[13]<<16) | (p[14]<<8) | p[15];
           37                         b += ((c<<5) | (c>>27)) + wp[3];
           38                         b += 0x5a827999 + (((e^a)&d)^a);
           39                         d = (d<<30)|(d>>2);
           40 
           41                         wp[4] = (p[16]<<24) | (p[17]<<16) | (p[18]<<8) | p[19];
           42                         a += ((b<<5) | (b>>27)) + wp[4];
           43                         a += 0x5a827999 + (((d^e)&c)^e);
           44                         c = (c<<30)|(c>>2);
           45                         
           46                         p += 20;
           47                 }
           48 
           49                 wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
           50                 e += ((a<<5) | (a>>27)) + wp[0];
           51                 e += 0x5a827999 + (((c^d)&b)^d);
           52                 b = (b<<30)|(b>>2);
           53 
           54                 x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
           55                 wp[1] = (x<<1) | (x>>31);
           56                 d += ((e<<5) | (e>>27)) + wp[1];
           57                 d += 0x5a827999 + (((b^c)&a)^c);
           58                 a = (a<<30)|(a>>2);
           59 
           60                 x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
           61                 wp[2] = (x<<1) | (x>>31);
           62                 c += ((d<<5) | (d>>27)) + wp[2];
           63                 c += 0x5a827999 + (((a^b)&e)^b);
           64                 e = (e<<30)|(e>>2);
           65 
           66                 x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
           67                 wp[3] = (x<<1) | (x>>31);
           68                 b += ((c<<5) | (c>>27)) + wp[3];
           69                 b += 0x5a827999 + (((e^a)&d)^a);
           70                 d = (d<<30)|(d>>2);
           71 
           72                 x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
           73                 wp[4] = (x<<1) | (x>>31);
           74                 a += ((b<<5) | (b>>27)) + wp[4];
           75                 a += 0x5a827999 + (((d^e)&c)^e);
           76                 c = (c<<30)|(c>>2);
           77 
           78                 wp += 5;
           79                 p += 4;
           80 
           81                 wend = w + 40;
           82                 for(; wp < wend; wp += 5){
           83                         x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
           84                         wp[0] = (x<<1) | (x>>31);
           85                         e += ((a<<5) | (a>>27)) + wp[0];
           86                         e += 0x6ed9eba1 + (b^c^d);
           87                         b = (b<<30)|(b>>2);
           88 
           89                         x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
           90                         wp[1] = (x<<1) | (x>>31);
           91                         d += ((e<<5) | (e>>27)) + wp[1];
           92                         d += 0x6ed9eba1 + (a^b^c);
           93                         a = (a<<30)|(a>>2);
           94 
           95                         x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
           96                         wp[2] = (x<<1) | (x>>31);
           97                         c += ((d<<5) | (d>>27)) + wp[2];
           98                         c += 0x6ed9eba1 + (e^a^b);
           99                         e = (e<<30)|(e>>2);
          100 
          101                         x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
          102                         wp[3] = (x<<1) | (x>>31);
          103                         b += ((c<<5) | (c>>27)) + wp[3];
          104                         b += 0x6ed9eba1 + (d^e^a);
          105                         d = (d<<30)|(d>>2);
          106 
          107                         x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
          108                         wp[4] = (x<<1) | (x>>31);
          109                         a += ((b<<5) | (b>>27)) + wp[4];
          110                         a += 0x6ed9eba1 + (c^d^e);
          111                         c = (c<<30)|(c>>2);
          112                 }
          113 
          114                 wend = w + 60;
          115                 for(; wp < wend; wp += 5){
          116                         x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
          117                         wp[0] = (x<<1) | (x>>31);
          118                         e += ((a<<5) | (a>>27)) + wp[0];
          119                         e += 0x8f1bbcdc + ((b&c)|((b|c)&d));
          120                         b = (b<<30)|(b>>2);
          121 
          122                         x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
          123                         wp[1] = (x<<1) | (x>>31);
          124                         d += ((e<<5) | (e>>27)) + wp[1];
          125                         d += 0x8f1bbcdc + ((a&b)|((a|b)&c));
          126                         a = (a<<30)|(a>>2);
          127 
          128                         x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
          129                         wp[2] = (x<<1) | (x>>31);
          130                         c += ((d<<5) | (d>>27)) + wp[2];
          131                         c += 0x8f1bbcdc + ((e&a)|((e|a)&b));
          132                         e = (e<<30)|(e>>2);
          133 
          134                         x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
          135                         wp[3] = (x<<1) | (x>>31);
          136                         b += ((c<<5) | (c>>27)) + wp[3];
          137                         b += 0x8f1bbcdc + ((d&e)|((d|e)&a));
          138                         d = (d<<30)|(d>>2);
          139 
          140                         x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
          141                         wp[4] = (x<<1) | (x>>31);
          142                         a += ((b<<5) | (b>>27)) + wp[4];
          143                         a += 0x8f1bbcdc + ((c&d)|((c|d)&e));
          144                         c = (c<<30)|(c>>2);
          145                 }
          146 
          147                 wend = w + 80;
          148                 for(; wp < wend; wp += 5){
          149                         x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16];
          150                         wp[0] = (x<<1) | (x>>31);
          151                         e += ((a<<5) | (a>>27)) + wp[0];
          152                         e += 0xca62c1d6 + (b^c^d);
          153                         b = (b<<30)|(b>>2);
          154 
          155                         x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15];
          156                         wp[1] = (x<<1) | (x>>31);
          157                         d += ((e<<5) | (e>>27)) + wp[1];
          158                         d += 0xca62c1d6 + (a^b^c);
          159                         a = (a<<30)|(a>>2);
          160 
          161                         x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14];
          162                         wp[2] = (x<<1) | (x>>31);
          163                         c += ((d<<5) | (d>>27)) + wp[2];
          164                         c += 0xca62c1d6 + (e^a^b);
          165                         e = (e<<30)|(e>>2);
          166 
          167                         x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13];
          168                         wp[3] = (x<<1) | (x>>31);
          169                         b += ((c<<5) | (c>>27)) + wp[3];
          170                         b += 0xca62c1d6 + (d^e^a);
          171                         d = (d<<30)|(d>>2);
          172 
          173                         x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12];
          174                         wp[4] = (x<<1) | (x>>31);
          175                         a += ((b<<5) | (b>>27)) + wp[4];
          176                         a += 0xca62c1d6 + (c^d^e);
          177                         c = (c<<30)|(c>>2);
          178                 }
          179 
          180                 /* save state */
          181                 s[0] += a;
          182                 s[1] += b;
          183                 s[2] += c;
          184                 s[3] += d;
          185                 s[4] += e;
          186         }
          187 }