$ od -c -N 50000 [_CDCSL_93-16_]<1>Cedar>release>SHS>OneM.c 0000000 / * \n * C o p y r i g h t 0000020 323 1 9 9 2 b y X e r o x 0000040 C o r p o r a t i o n . A 0000060 l l r i g h t s r e s e r v 0000100 e d . \n * C a r l H a u s 0000120 e r , F e b r u a r y 7 , 0000140 1 9 9 2 \n * A s t r a i g 0000160 h t f o r w a r d i m p l e m 0000200 e n t a t i o n o f t h e 0000220 i n n e r 1 6 - w o r d c o 0000240 m p u t a t i o n \n * o f 0000260 t h e p r o p o s e d S e c 0000300 u r e H a s h S t a n d a r 0000320 d ( S H S ) , d a t e d 2 0000340 2 J a n u a r y 1 9 9 2 \n 0000360 * T h i s f u n c t i o n 0000400 i s a p p l i e d t o s u 0000420 c c e s s i v e 1 6 w o r d 0000440 b l o c k s o f t h e f 0000460 i n a l \n * p a d d e d m 0000500 e s s a g e . ( T h e p a 0000520 d d i n g h a s t o b e 0000540 d o n e s e p a r a t e l y - 0000560 - s e e s e c t i o n 4 \n 0000600 * o f t h e S H S s t 0000620 a n d a r d ) \n * \n * T o 0000640 u s e : i n i t i a l i z e 0000660 a f i v e w o r d a r r 0000700 a y , h , t o \n * { 0 0000720 x 6 7 4 5 2 3 0 1 , 0 x 0 e f 0000740 c d a b 8 9 , 0 x 9 8 b a d c 0000760 f e , 0 x 1 0 3 2 5 4 7 6 , 0001000 0 x 0 c 3 d 2 e 1 f 0 } \n * 0001020 a n d t h e n p a s s h 0001040 a n d p o i n t e r s t o 0001060 s u c c e s s i v e 1 6 w 0001100 o r d m e s s a g e b l o c 0001120 k s \n * t o p a r a m e 0001140 t e r s h a n d m o f 0001160 o n e m . \n * T h e f 0001200 i v e w o r d h a s h i s 0001220 t h e c o n t e n t s o f 0001240 h a f t e r t h e l a s 0001260 t b l o c k \n * h a s 0001300 b e e n p r o c e s s e d . 0001320 \n * / \n \n # d e f i n e S 5 0001340 ( x ) ( ( ( x ) < < 5 ) | 0001360 ( ( x ) > > 2 7 ) ) \n # d e f i 0001400 n e S 3 0 ( x ) ( ( ( x ) < 0001420 < 3 0 ) | ( ( x ) > > 2 ) ) 0001440 \n # d e f i n e K 0 0 x 5 a 0001460 8 2 7 9 9 9 \n # d e f i n e K 0001500 1 0 x 6 e d 9 e b a 1 \n # d e 0001520 f i n e K 2 0 x 8 f 1 b b c 0001540 d c \n # d e f i n e K 3 0 x 0001560 0 c a 6 2 c 1 d 6 \n # d e f i n 0001600 e A N D ( x , y ) ( ( x ) & 0001620 ( y ) ) \n # d e f i n e F 0 ( 0001640 x , y , z ) ( A N D ( x , y ) 0001660 | A N D ( ~ ( x ) , z ) ) \n 0001700 # d e f i n e F 1 ( x , y , z 0001720 ) ( ( x ) ^ ( y ) ^ ( z ) ) \n 0001740 # d e f i n e F 2 ( x , y , z 0001760 ) ( A N D ( x , y ) | A N 0002000 D ( x , z ) | A N D ( y , z 0002020 ) ) \n # d e f i n e w o r d 0002040 u n s i g n e d l o n g \n s t 0002060 a t i c r e v e r s e b y t e 0002100 s ( w ) \n w o r d * w ; \n { \n 0002120 c h a r * p = ( c 0002140 h a r * ) w ; \n c h 0002160 a r t ; \n t = * p 0002200 ; \n * p = * ( p + 3 0002220 ) ; \n * ( p + 3 ) = 0002240 t ; \n t = * ( p + 1 0002260 ) ; \n * ( p + 1 ) = 0002300 * ( p + 2 ) ; \n * ( p + 0002320 2 ) = t ; \n } \n \n v o i d 0002340 o n e m ( m , h ) \n w o r d 0002360 m [ 1 6 ] ; \n w o r d h [ 5 ] 0002400 ; \n { \n w o r d w [ 8 0002420 0 ] ; \n i n t t ; \n 0002440 w o r d A , B , C , 0002460 D , E ; \n w o r d 0002500 * p , * q ; \n w o r d 0002520 * p m 3 , * p m 8 , * p m 0002540 1 4 , * p m 1 6 ; \n w 0002560 o r d t e m p ; \n i n 0002600 t i ; \n # i f d e f L I T T 0002620 L E _ E N D I A N \n f o 0002640 r ( i = 0 ; i < 1 6 ; i + 0002660 + ) { \n r e v e 0002700 r s e b y t e s ( & ( m [ i ) ) 0002720 ; \n } ; \n # e n d i f \n 0002740 A = h [ 0 ] ; B = 0002760 h [ 1 ] ; C = h [ 2 ] ; D = 0003000 h [ 3 ] ; E = h [ 4 ] ; \n 0003020 f o r ( p = m , q = 0003040 w ; p < m + 1 6 ; p + + 0003060 , q + + ) { \n 0003100 * q = * p ; \n 0003120 } \n p m 3 = w + 0003140 1 3 ; p m 8 = w + 8 ; p 0003160 m 1 4 = w + 2 ; p m 1 6 = w ; 0003200 \n f o r ( p = w + 1 6 0003220 ; p < w + 8 0 ; p + + , 0003240 p m 3 + + , p m 8 + + , p 0003260 m 1 4 + + , p m 1 6 + + ) { 0003300 \n * p = * p 0003320 m 3 ^ * p m 8 ^ * p m 1 0003340 4 ^ * p m 1 6 ; \n 0003360 } \n f o r ( i = 0003400 0 ; i < 2 0 ; i + + ) { \n 0003420 t e m p = S 0003440 5 ( A ) + F 0 ( B , C , D ) 0003460 + E + w [ i ] + K 0 0003500 ; \n E = D ; D 0003520 = C ; C = S 3 0 ( B ) ; B = 0003540 A ; A = t e m p ; \n 0003560 } \n f o r ( i = 0003600 2 0 ; i < 4 0 ; i + + ) { 0003620 \n t e m p = 0003640 S 5 ( A ) + F 1 ( B , C , D 0003660 ) + E + w [ i ] + K 0003700 1 ; \n E = D ; 0003720 D = C ; C = S 3 0 ( B ) ; B 0003740 = A ; A = t e m p ; \n 0003760 } \n f o r ( i 0004000 = 4 0 ; i < 6 0 ; i + + ) 0004020 { \n t e m p = 0004040 S 5 ( A ) + F 2 ( B , C , 0004060 D ) + E + w [ i ] + 0004100 K 2 ; \n E = D ; 0004120 D = C ; C = S 3 0 ( B ) ; 0004140 B = A ; A = t e m p ; \n 0004160 } \n f o r ( 0004200 i = 6 0 ; i < 8 0 ; i + + ) 0004220 { \n t e m p 0004240 = S 5 ( A ) + F 1 ( B , C 0004260 , D ) + E + w [ i ] + 0004300 K 3 ; \n E = D 0004320 ; D = C ; C = S 3 0 ( B ) ; 0004340 B = A ; A = t e m p ; \n 0004360 } \n h [ 0 ] 0004400 = h [ 0 ] + A ; \n h [ 1 0004420 ] = h [ 1 ] + B ; \n h [ 0004440 2 ] = h [ 2 ] + C ; \n h 0004460 [ 3 ] = h [ 3 ] + D ; \n 0004500 h [ 4 ] = h [ 4 ] + E ; \n 0004520 } \n 0004527