/[rdesktop]/sourceforge.net/trunk/rdesktop/crypto/sha_locl.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/crypto/sha_locl.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 31 by matty, Tue Aug 15 10:32:09 2000 UTC revision 32 by matty, Sat Sep 15 09:37:17 2001 UTC
# Line 1  Line 1 
1  /* crypto/sha/sha_locl.h */  /* crypto/sha/sha_locl.h */
2  /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)  /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3   * All rights reserved.   * All rights reserved.
4   *   *
5   * This package is an SSL implementation written   * This package is an SSL implementation written
# Line 59  Line 59 
59  #include <stdlib.h>  #include <stdlib.h>
60  #include <string.h>  #include <string.h>
61    
62  #ifdef undef  #include "sha.h"
63  /* one or the other needs to be defined */  
64  #ifndef SHA_1 /* FIPE 180-1 */  #ifndef SHA_LONG_LOG2
65  #define SHA_0 /* FIPS 180   */  #define SHA_LONG_LOG2   2       /* default to 32 bits */
 #endif  
 #endif  
   
 #define ULONG   unsigned long  
 #define UCHAR   unsigned char  
 #define UINT    unsigned int  
   
 #ifdef NOCONST  
 #define const  
 #endif  
   
 #undef c2nl  
 #define c2nl(c,l)       (l =(((unsigned long)(*((c)++)))<<24), \  
                          l|=(((unsigned long)(*((c)++)))<<16), \  
                          l|=(((unsigned long)(*((c)++)))<< 8), \  
                          l|=(((unsigned long)(*((c)++)))    ))  
   
 #undef p_c2nl  
 #define p_c2nl(c,l,n)   { \  
                         switch (n) { \  
                         case 0: l =((unsigned long)(*((c)++)))<<24; \  
                         case 1: l|=((unsigned long)(*((c)++)))<<16; \  
                         case 2: l|=((unsigned long)(*((c)++)))<< 8; \  
                         case 3: l|=((unsigned long)(*((c)++))); \  
                                 } \  
                         }  
   
 #undef c2nl_p  
 /* NOTE the pointer is not incremented at the end of this */  
 #define c2nl_p(c,l,n)   { \  
                         l=0; \  
                         (c)+=n; \  
                         switch (n) { \  
                         case 3: l =((unsigned long)(*(--(c))))<< 8; \  
                         case 2: l|=((unsigned long)(*(--(c))))<<16; \  
                         case 1: l|=((unsigned long)(*(--(c))))<<24; \  
                                 } \  
                         }  
   
 #undef p_c2nl_p  
 #define p_c2nl_p(c,l,sc,len) { \  
                         switch (sc) \  
                                 { \  
                         case 0: l =((unsigned long)(*((c)++)))<<24; \  
                                 if (--len == 0) break; \  
                         case 1: l|=((unsigned long)(*((c)++)))<<16; \  
                                 if (--len == 0) break; \  
                         case 2: l|=((unsigned long)(*((c)++)))<< 8; \  
                                 } \  
                         }  
   
 #undef nl2c  
 #define nl2c(l,c)       (*((c)++)=(unsigned char)(((l)>>24)&0xff), \  
                          *((c)++)=(unsigned char)(((l)>>16)&0xff), \  
                          *((c)++)=(unsigned char)(((l)>> 8)&0xff), \  
                          *((c)++)=(unsigned char)(((l)    )&0xff))  
   
 #undef c2l  
 #define c2l(c,l)        (l =(((unsigned long)(*((c)++)))    ), \  
                          l|=(((unsigned long)(*((c)++)))<< 8), \  
                          l|=(((unsigned long)(*((c)++)))<<16), \  
                          l|=(((unsigned long)(*((c)++)))<<24))  
   
 #undef p_c2l  
 #define p_c2l(c,l,n)    { \  
                         switch (n) { \  
                         case 0: l =((unsigned long)(*((c)++))); \  
                         case 1: l|=((unsigned long)(*((c)++)))<< 8; \  
                         case 2: l|=((unsigned long)(*((c)++)))<<16; \  
                         case 3: l|=((unsigned long)(*((c)++)))<<24; \  
                                 } \  
                         }  
   
 #undef c2l_p  
 /* NOTE the pointer is not incremented at the end of this */  
 #define c2l_p(c,l,n)    { \  
                         l=0; \  
                         (c)+=n; \  
                         switch (n) { \  
                         case 3: l =((unsigned long)(*(--(c))))<<16; \  
                         case 2: l|=((unsigned long)(*(--(c))))<< 8; \  
                         case 1: l|=((unsigned long)(*(--(c)))); \  
                                 } \  
                         }  
   
 #undef p_c2l_p  
 #define p_c2l_p(c,l,sc,len) { \  
                         switch (sc) \  
                                 { \  
                         case 0: l =((unsigned long)(*((c)++))); \  
                                 if (--len == 0) break; \  
                         case 1: l|=((unsigned long)(*((c)++)))<< 8; \  
                                 if (--len == 0) break; \  
                         case 2: l|=((unsigned long)(*((c)++)))<<16; \  
                                 } \  
                         }  
   
 #undef l2c  
 #define l2c(l,c)        (*((c)++)=(unsigned char)(((l)    )&0xff), \  
                          *((c)++)=(unsigned char)(((l)>> 8)&0xff), \  
                          *((c)++)=(unsigned char)(((l)>>16)&0xff), \  
                          *((c)++)=(unsigned char)(((l)>>24)&0xff))  
   
 #undef ROTATE  
 #if defined(WIN32)  
 #define ROTATE(a,n)     _lrotl(a,n)  
 #else  
 #define ROTATE(a,n)     (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))  
66  #endif  #endif
67    
68  /* A nice byte order reversal from Wei Dai <weidai@eskimo.com> */  #define DATA_ORDER_IS_BIG_ENDIAN
69  #if defined(WIN32)  
70  /* 5 instructions with rotate instruction, else 9 */  #define HASH_LONG               SHA_LONG
71  #define Endian_Reverse32(a) \  #define HASH_LONG_LOG2          SHA_LONG_LOG2
72          { \  #define HASH_CTX                SHA_CTX
73          unsigned long l=(a); \  #define HASH_CBLOCK             SHA_CBLOCK
74          (a)=((ROTATE(l,8)&0x00FF00FF)|(ROTATE(l,24)&0xFF00FF00)); \  #define HASH_LBLOCK             SHA_LBLOCK
75          }  #define HASH_MAKE_STRING(c,s)   do {    \
76            unsigned long ll;               \
77            ll=(c)->h0; HOST_l2c(ll,(s));   \
78            ll=(c)->h1; HOST_l2c(ll,(s));   \
79            ll=(c)->h2; HOST_l2c(ll,(s));   \
80            ll=(c)->h3; HOST_l2c(ll,(s));   \
81            ll=(c)->h4; HOST_l2c(ll,(s));   \
82            } while (0)
83    
84    #if defined(SHA_0)
85    
86    # define HASH_UPDATE                    SHA_Update
87    # define HASH_TRANSFORM                 SHA_Transform
88    # define HASH_FINAL                     SHA_Final
89    # define HASH_INIT                      SHA_Init
90    # define HASH_BLOCK_HOST_ORDER          sha_block_host_order
91    # define HASH_BLOCK_DATA_ORDER          sha_block_data_order
92    # define Xupdate(a,ix,ia,ib,ic,id)      (ix=(a)=(ia^ib^ic^id))
93    
94      void sha_block_host_order (SHA_CTX *c, const void *p,int num);
95      void sha_block_data_order (SHA_CTX *c, const void *p,int num);
96    
97    #elif defined(SHA_1)
98    
99    # define HASH_UPDATE                    SHA1_Update
100    # define HASH_TRANSFORM                 SHA1_Transform
101    # define HASH_FINAL                     SHA1_Final
102    # define HASH_INIT                      SHA1_Init
103    # define HASH_BLOCK_HOST_ORDER          sha1_block_host_order
104    # define HASH_BLOCK_DATA_ORDER          sha1_block_data_order
105    # if defined(__MWERKS__) && defined(__MC68K__)
106       /* Metrowerks for Motorola fails otherwise:-( <appro@fy.chalmers.se> */
107    #  define Xupdate(a,ix,ia,ib,ic,id)     do { (a)=(ia^ib^ic^id);         \
108                                                 ix=(a)=ROTATE((a),1);      \
109                                            } while (0)
110    # else
111    #  define Xupdate(a,ix,ia,ib,ic,id)     ( (a)=(ia^ib^ic^id),    \
112                                              ix=(a)=ROTATE((a),1)  \
113                                            )
114    # endif
115    
116    # ifdef SHA1_ASM
117    #  if defined(__i386) || defined(_M_IX86) || defined(__INTEL__)
118    #   define sha1_block_host_order                sha1_block_asm_host_order
119    #   define DONT_IMPLEMENT_BLOCK_HOST_ORDER
120    #   define sha1_block_data_order                sha1_block_asm_data_order
121    #   define DONT_IMPLEMENT_BLOCK_DATA_ORDER
122    #   define HASH_BLOCK_DATA_ORDER_ALIGNED        sha1_block_asm_data_order
123    #  endif
124    # endif
125      void sha1_block_host_order (SHA_CTX *c, const void *p,int num);
126      void sha1_block_data_order (SHA_CTX *c, const void *p,int num);
127    
128  #else  #else
129  /* 6 instructions with rotate instruction, else 8 */  # error "Either SHA_0 or SHA_1 must be defined."
 #define Endian_Reverse32(a) \  
         { \  
         unsigned long l=(a); \  
         l=(((l&0xFF00FF00)>>8L)|((l&0x00FF00FF)<<8L)); \  
         (a)=ROTATE(l,16L); \  
         }  
130  #endif  #endif
131    
132    #include "md32_common.h"
133    
134    #define INIT_DATA_h0 0x67452301UL
135    #define INIT_DATA_h1 0xefcdab89UL
136    #define INIT_DATA_h2 0x98badcfeUL
137    #define INIT_DATA_h3 0x10325476UL
138    #define INIT_DATA_h4 0xc3d2e1f0UL
139    
140    void HASH_INIT (SHA_CTX *c)
141            {
142            c->h0=INIT_DATA_h0;
143            c->h1=INIT_DATA_h1;
144            c->h2=INIT_DATA_h2;
145            c->h3=INIT_DATA_h3;
146            c->h4=INIT_DATA_h4;
147            c->Nl=0;
148            c->Nh=0;
149            c->num=0;
150            }
151    
152    #define K_00_19 0x5a827999UL
153    #define K_20_39 0x6ed9eba1UL
154    #define K_40_59 0x8f1bbcdcUL
155    #define K_60_79 0xca62c1d6UL
156    
157  /* As  pointed out by Wei Dai <weidai@eskimo.com>, F() below can be  /* As  pointed out by Wei Dai <weidai@eskimo.com>, F() below can be
158   * simplified to the code in F_00_19.  Wei attributes these optimisations   * simplified to the code in F_00_19.  Wei attributes these optimisations
159   * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.   * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
# Line 203  Line 166 
166  #define F_40_59(b,c,d)  (((b) & (c)) | (((b)|(c)) & (d)))  #define F_40_59(b,c,d)  (((b) & (c)) | (((b)|(c)) & (d)))
167  #define F_60_79(b,c,d)  F_20_39(b,c,d)  #define F_60_79(b,c,d)  F_20_39(b,c,d)
168    
169  #ifdef SHA_0  #define BODY_00_15(i,a,b,c,d,e,f,xi) \
170  #undef Xupdate          (f)=xi+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
 #define Xupdate(a,i,ia,ib,ic,id) X[(i)&0x0f]=(a)=\  
         (ia[(i)&0x0f]^ib[((i)+2)&0x0f]^ic[((i)+8)&0x0f]^id[((i)+13)&0x0f]);  
 #endif  
 #ifdef SHA_1  
 #undef Xupdate  
 #define Xupdate(a,i,ia,ib,ic,id) (a)=\  
         (ia[(i)&0x0f]^ib[((i)+2)&0x0f]^ic[((i)+8)&0x0f]^id[((i)+13)&0x0f]);\  
         X[(i)&0x0f]=(a)=ROTATE((a),1);  
 #endif  
   
 #define BODY_00_15(i,a,b,c,d,e,f,xa) \  
         (f)=xa[i]+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \  
171          (b)=ROTATE((b),30);          (b)=ROTATE((b),30);
172    
173  #define BODY_16_19(i,a,b,c,d,e,f,xa,xb,xc,xd) \  #define BODY_16_19(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
174          Xupdate(f,i,xa,xb,xc,xd); \          Xupdate(f,xi,xa,xb,xc,xd); \
175          (f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \          (f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
176          (b)=ROTATE((b),30);          (b)=ROTATE((b),30);
177    
178  #define BODY_20_31(i,a,b,c,d,e,f,xa,xb,xc,xd) \  #define BODY_20_31(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
179          Xupdate(f,i,xa,xb,xc,xd); \          Xupdate(f,xi,xa,xb,xc,xd); \
180          (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \          (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
181          (b)=ROTATE((b),30);          (b)=ROTATE((b),30);
182    
183  #define BODY_32_39(i,a,b,c,d,e,f,xa) \  #define BODY_32_39(i,a,b,c,d,e,f,xa,xb,xc,xd) \
184          Xupdate(f,i,xa,xa,xa,xa); \          Xupdate(f,xa,xa,xb,xc,xd); \
185          (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \          (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
186          (b)=ROTATE((b),30);          (b)=ROTATE((b),30);
187    
188  #define BODY_40_59(i,a,b,c,d,e,f,xa) \  #define BODY_40_59(i,a,b,c,d,e,f,xa,xb,xc,xd) \
189          Xupdate(f,i,xa,xa,xa,xa); \          Xupdate(f,xa,xa,xb,xc,xd); \
190          (f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \          (f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \
191          (b)=ROTATE((b),30);          (b)=ROTATE((b),30);
192    
193  #define BODY_60_79(i,a,b,c,d,e,f,xa) \  #define BODY_60_79(i,a,b,c,d,e,f,xa,xb,xc,xd) \
194          Xupdate(f,i,xa,xa,xa,xa); \          Xupdate(f,xa,xa,xb,xc,xd); \
195          (f)=X[(i)&0x0f]+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \          (f)=xa+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
196          (b)=ROTATE((b),30);          (b)=ROTATE((b),30);
197    
198    #ifdef X
199    #undef X
200    #endif
201    #ifndef MD32_XARRAY
202      /*
203       * Originally X was an array. As it's automatic it's natural
204       * to expect RISC compiler to accomodate at least part of it in
205       * the register bank, isn't it? Unfortunately not all compilers
206       * "find" this expectation reasonable:-( On order to make such
207       * compilers generate better code I replace X[] with a bunch of
208       * X0, X1, etc. See the function body below...
209       *                                    <appro@fy.chalmers.se>
210       */
211    # define X(i)   XX##i
212    #else
213      /*
214       * However! Some compilers (most notably HP C) get overwhelmed by
215       * that many local variables so that we have to have the way to
216       * fall down to the original behavior.
217       */
218    # define X(i)   XX[i]
219    #endif
220    
221    #ifndef DONT_IMPLEMENT_BLOCK_HOST_ORDER
222    void HASH_BLOCK_HOST_ORDER (SHA_CTX *c, const void *d, int num)
223            {
224            const SHA_LONG *W=d;
225            register unsigned long A,B,C,D,E,T;
226    #ifndef MD32_XARRAY
227            unsigned long   XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
228                            XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
229    #else
230            SHA_LONG        XX[16];
231    #endif
232    
233            A=c->h0;
234            B=c->h1;
235            C=c->h2;
236            D=c->h3;
237            E=c->h4;
238    
239            for (;;)
240                    {
241            BODY_00_15( 0,A,B,C,D,E,T,W[ 0]);
242            BODY_00_15( 1,T,A,B,C,D,E,W[ 1]);
243            BODY_00_15( 2,E,T,A,B,C,D,W[ 2]);
244            BODY_00_15( 3,D,E,T,A,B,C,W[ 3]);
245            BODY_00_15( 4,C,D,E,T,A,B,W[ 4]);
246            BODY_00_15( 5,B,C,D,E,T,A,W[ 5]);
247            BODY_00_15( 6,A,B,C,D,E,T,W[ 6]);
248            BODY_00_15( 7,T,A,B,C,D,E,W[ 7]);
249            BODY_00_15( 8,E,T,A,B,C,D,W[ 8]);
250            BODY_00_15( 9,D,E,T,A,B,C,W[ 9]);
251            BODY_00_15(10,C,D,E,T,A,B,W[10]);
252            BODY_00_15(11,B,C,D,E,T,A,W[11]);
253            BODY_00_15(12,A,B,C,D,E,T,W[12]);
254            BODY_00_15(13,T,A,B,C,D,E,W[13]);
255            BODY_00_15(14,E,T,A,B,C,D,W[14]);
256            BODY_00_15(15,D,E,T,A,B,C,W[15]);
257    
258            BODY_16_19(16,C,D,E,T,A,B,X( 0),W[ 0],W[ 2],W[ 8],W[13]);
259            BODY_16_19(17,B,C,D,E,T,A,X( 1),W[ 1],W[ 3],W[ 9],W[14]);
260            BODY_16_19(18,A,B,C,D,E,T,X( 2),W[ 2],W[ 4],W[10],W[15]);
261            BODY_16_19(19,T,A,B,C,D,E,X( 3),W[ 3],W[ 5],W[11],X( 0));
262    
263            BODY_20_31(20,E,T,A,B,C,D,X( 4),W[ 4],W[ 6],W[12],X( 1));
264            BODY_20_31(21,D,E,T,A,B,C,X( 5),W[ 5],W[ 7],W[13],X( 2));
265            BODY_20_31(22,C,D,E,T,A,B,X( 6),W[ 6],W[ 8],W[14],X( 3));
266            BODY_20_31(23,B,C,D,E,T,A,X( 7),W[ 7],W[ 9],W[15],X( 4));
267            BODY_20_31(24,A,B,C,D,E,T,X( 8),W[ 8],W[10],X( 0),X( 5));
268            BODY_20_31(25,T,A,B,C,D,E,X( 9),W[ 9],W[11],X( 1),X( 6));
269            BODY_20_31(26,E,T,A,B,C,D,X(10),W[10],W[12],X( 2),X( 7));
270            BODY_20_31(27,D,E,T,A,B,C,X(11),W[11],W[13],X( 3),X( 8));
271            BODY_20_31(28,C,D,E,T,A,B,X(12),W[12],W[14],X( 4),X( 9));
272            BODY_20_31(29,B,C,D,E,T,A,X(13),W[13],W[15],X( 5),X(10));
273            BODY_20_31(30,A,B,C,D,E,T,X(14),W[14],X( 0),X( 6),X(11));
274            BODY_20_31(31,T,A,B,C,D,E,X(15),W[15],X( 1),X( 7),X(12));
275    
276            BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
277            BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
278            BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
279            BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
280            BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
281            BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
282            BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
283            BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
284    
285            BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
286            BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
287            BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
288            BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
289            BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
290            BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
291            BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
292            BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
293            BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
294            BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
295            BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
296            BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
297            BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
298            BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
299            BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
300            BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
301            BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
302            BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
303            BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
304            BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
305    
306            BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
307            BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
308            BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
309            BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
310            BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
311            BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
312            BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
313            BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
314            BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
315            BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
316            BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
317            BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
318            BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
319            BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
320            BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
321            BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
322            BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
323            BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
324            BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
325            BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
326            
327            c->h0=(c->h0+E)&0xffffffffL;
328            c->h1=(c->h1+T)&0xffffffffL;
329            c->h2=(c->h2+A)&0xffffffffL;
330            c->h3=(c->h3+B)&0xffffffffL;
331            c->h4=(c->h4+C)&0xffffffffL;
332    
333            if (--num <= 0) break;
334    
335            A=c->h0;
336            B=c->h1;
337            C=c->h2;
338            D=c->h3;
339            E=c->h4;
340    
341            W+=SHA_LBLOCK;
342                    }
343            }
344    #endif
345    
346    #ifndef DONT_IMPLEMENT_BLOCK_DATA_ORDER
347    void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, int num)
348            {
349            const unsigned char *data=p;
350            register unsigned long A,B,C,D,E,T,l;
351    #ifndef MD32_XARRAY
352            unsigned long   XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
353                            XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
354    #else
355            SHA_LONG        XX[16];
356    #endif
357    
358            A=c->h0;
359            B=c->h1;
360            C=c->h2;
361            D=c->h3;
362            E=c->h4;
363    
364            for (;;)
365                    {
366    
367            HOST_c2l(data,l); X( 0)=l;              HOST_c2l(data,l); X( 1)=l;
368            BODY_00_15( 0,A,B,C,D,E,T,X( 0));       HOST_c2l(data,l); X( 2)=l;
369            BODY_00_15( 1,T,A,B,C,D,E,X( 1));       HOST_c2l(data,l); X( 3)=l;
370            BODY_00_15( 2,E,T,A,B,C,D,X( 2));       HOST_c2l(data,l); X( 4)=l;
371            BODY_00_15( 3,D,E,T,A,B,C,X( 3));       HOST_c2l(data,l); X( 5)=l;
372            BODY_00_15( 4,C,D,E,T,A,B,X( 4));       HOST_c2l(data,l); X( 6)=l;
373            BODY_00_15( 5,B,C,D,E,T,A,X( 5));       HOST_c2l(data,l); X( 7)=l;
374            BODY_00_15( 6,A,B,C,D,E,T,X( 6));       HOST_c2l(data,l); X( 8)=l;
375            BODY_00_15( 7,T,A,B,C,D,E,X( 7));       HOST_c2l(data,l); X( 9)=l;
376            BODY_00_15( 8,E,T,A,B,C,D,X( 8));       HOST_c2l(data,l); X(10)=l;
377            BODY_00_15( 9,D,E,T,A,B,C,X( 9));       HOST_c2l(data,l); X(11)=l;
378            BODY_00_15(10,C,D,E,T,A,B,X(10));       HOST_c2l(data,l); X(12)=l;
379            BODY_00_15(11,B,C,D,E,T,A,X(11));       HOST_c2l(data,l); X(13)=l;
380            BODY_00_15(12,A,B,C,D,E,T,X(12));       HOST_c2l(data,l); X(14)=l;
381            BODY_00_15(13,T,A,B,C,D,E,X(13));       HOST_c2l(data,l); X(15)=l;
382            BODY_00_15(14,E,T,A,B,C,D,X(14));
383            BODY_00_15(15,D,E,T,A,B,C,X(15));
384    
385            BODY_16_19(16,C,D,E,T,A,B,X( 0),X( 0),X( 2),X( 8),X(13));
386            BODY_16_19(17,B,C,D,E,T,A,X( 1),X( 1),X( 3),X( 9),X(14));
387            BODY_16_19(18,A,B,C,D,E,T,X( 2),X( 2),X( 4),X(10),X(15));
388            BODY_16_19(19,T,A,B,C,D,E,X( 3),X( 3),X( 5),X(11),X( 0));
389    
390            BODY_20_31(20,E,T,A,B,C,D,X( 4),X( 4),X( 6),X(12),X( 1));
391            BODY_20_31(21,D,E,T,A,B,C,X( 5),X( 5),X( 7),X(13),X( 2));
392            BODY_20_31(22,C,D,E,T,A,B,X( 6),X( 6),X( 8),X(14),X( 3));
393            BODY_20_31(23,B,C,D,E,T,A,X( 7),X( 7),X( 9),X(15),X( 4));
394            BODY_20_31(24,A,B,C,D,E,T,X( 8),X( 8),X(10),X( 0),X( 5));
395            BODY_20_31(25,T,A,B,C,D,E,X( 9),X( 9),X(11),X( 1),X( 6));
396            BODY_20_31(26,E,T,A,B,C,D,X(10),X(10),X(12),X( 2),X( 7));
397            BODY_20_31(27,D,E,T,A,B,C,X(11),X(11),X(13),X( 3),X( 8));
398            BODY_20_31(28,C,D,E,T,A,B,X(12),X(12),X(14),X( 4),X( 9));
399            BODY_20_31(29,B,C,D,E,T,A,X(13),X(13),X(15),X( 5),X(10));
400            BODY_20_31(30,A,B,C,D,E,T,X(14),X(14),X( 0),X( 6),X(11));
401            BODY_20_31(31,T,A,B,C,D,E,X(15),X(15),X( 1),X( 7),X(12));
402    
403            BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
404            BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
405            BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
406            BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
407            BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
408            BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
409            BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
410            BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
411    
412            BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
413            BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
414            BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
415            BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
416            BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
417            BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
418            BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
419            BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
420            BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
421            BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
422            BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
423            BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
424            BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
425            BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
426            BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
427            BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
428            BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
429            BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
430            BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
431            BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
432    
433            BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
434            BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
435            BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
436            BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
437            BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
438            BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
439            BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
440            BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
441            BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
442            BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
443            BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
444            BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
445            BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
446            BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
447            BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
448            BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
449            BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
450            BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
451            BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
452            BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
453            
454            c->h0=(c->h0+E)&0xffffffffL;
455            c->h1=(c->h1+T)&0xffffffffL;
456            c->h2=(c->h2+A)&0xffffffffL;
457            c->h3=(c->h3+B)&0xffffffffL;
458            c->h4=(c->h4+C)&0xffffffffL;
459    
460            if (--num <= 0) break;
461    
462            A=c->h0;
463            B=c->h1;
464            C=c->h2;
465            D=c->h3;
466            E=c->h4;
467    
468                    }
469            }
470    #endif

Legend:
Removed from v.31  
changed lines
  Added in v.32

  ViewVC Help
Powered by ViewVC 1.1.26