$ od -c -N 50000 [_CDCSL_93-16_]<1>Cedar>release>SHS>SHS.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 * S e p t e m b e r 0000120 3 0 , 1 9 9 2 \n * A s 0000140 t r a i g h t f o r w a r d i 0000160 m p l e m e n t a t i o n o f 0000200 t h e p r o p o s e d S e 0000220 c u r e \n * H a s h S t 0000240 a n d a r d ( S H S ) , d a 0000260 t e d 2 2 J a n u a r y 1 0000300 9 9 2 . \n * \n * T o u s 0000320 e : a l l o c a t e a n S 0000340 H S _ C T X a n d p a s s 0000360 i t t o S H S I n i t ; \n 0000400 * r e p e a t e d l y c a l 0000420 l S H S U p d a t e o n s 0000440 u c c e s s i v e c h u n k s 0000460 o f t h e m e s s a g e \n 0000500 * t h e n c a l l S H S 0000520 F i n a l ( h a s h , c t x ) 0000540 . \n * T h e h a s h i s 0000560 i n c t x - > s t a t e , 0000600 a s 4 b y t e i n t e g e 0000620 r s \n * a n d , p r o p e 0000640 r l y r e o r g a n i z e d 0000660 f o r e n d i a n - n e s s , 0000700 i n * h a s h . \n * \n * 0000720 / \n \n # i n c l u d e " S H S 0000740 . h " \n \n s t a t i c v o i d 0000760 o n e m ( ) ; \n \n s t a t i c 0001000 c h a r e n d i a n T e s t 0001020 [ 4 ] = { 0 , 0 , 0 , 0001040 1 } ; \n s t a t i c i n t l 0001060 i t t l e E n d i a n ; \n \n s t 0001100 a t i c v o i d i n t F r o 0001120 m C h a r s ( ) ; \n \n v o i d 0001140 S H S I n i t ( c t x ) \n 0001160 S H S _ C T X * c t x ; 0001200 \n { \n i n t t e s t I 0001220 n t ; \n \n i n t 0001240 F r o m C h a r s ( & t e s t 0001260 I n t , e n d i a n T e s t 0001300 ) ; \n l i t t l e E n d 0001320 i a n = ( * ( ( i n t * ) 0001340 e n d i a n T e s t ) = = 1 ? 0001360 0 : 1 ) ; \n \n 0001400 c t x - > s t a t e [ 0 ] 0001420 = 0 x 6 7 4 5 2 3 0 1 ; \n 0001440 c t x - > s t a t e [ 1 ] 0001460 = 0 x 0 e f c d a b 8 9 ; \n 0001500 c t x - > s t a t e [ 2 ] 0001520 = 0 x 9 8 b a d c f e ; \n 0001540 c t x - > s t a t e [ 3 ] 0001560 = 0 x 1 0 3 2 5 4 7 6 ; \n 0001600 c t x - > s t a t e [ 4 ] 0001620 = 0 x 0 c 3 d 2 e 1 f 0 ; \n 0001640 \n c t x - > c o u n t [ 0001660 0 ] = 0 ; \n c t x - 0001700 > c o u n t [ 1 ] = 0 ; \n \n 0001720 } \n \n v o i d S H S U p d a t 0001740 e ( c t x , b y t e s , n 0001760 B y t e s ) \n S H S _ 0002000 C T X * c t x ; \n u 0002020 n s i g n e d c h a r * b y 0002040 t e s ; \n u n s i g n 0002060 e d i n t n B y t e s ; \n { 0002100 \n u n s i g n e d i n 0002120 t i n B u f f e r = ( u n 0002140 s i g n e d i n t ) ( ( c t x 0002160 - > c o u n t [ 1 ] / 8 ) % 0002200 6 4 ) ; \n / * 0002220 n u m b e r o f b y t e s 0002240 l e f t i n b u f f e r f 0002260 r o m p r e v i o u s c a l 0002300 l * / \n \n 0002320 u n s i g n e d i n t i 0002340 n p = 0 ; \n \n i f 0002360 ( ( c t x - > c o u n t [ 1 ] 0002400 + = ( ( U I N T 4 ) n B y t e 0002420 s < < 3 ) ) < ( ( U I N 0002440 T 4 ) n B y t e s < < 3 ) ) 0002460 \n c t x - > 0002500 c o u n t [ 0 ] + + ; \n 0002520 c t x - > c o u n t [ 0 ] + = 0002540 ( ( U I N T 4 ) n B y t e s 0002560 > > 2 9 ) ; \n \n i f 0002600 ( i n B u f f e r ! = 0 ) 0002620 { \n i f ( ( i 0002640 n B u f f e r + n B y t e s ) 0002660 > = 6 4 ) { \n 0002700 b c o p y ( b y t e 0002720 s , & c t x - > b u f f e r [ 0002740 i n B u f f e r ] , i n p = ( 0002760 6 4 - i n B u f f e r ) ) ; \n 0003000 o n e m 0003020 ( c t x - > b u f f e r , c 0003040 t x - > s t a t e ) ; \n 0003060 i n B u f f e 0003100 r = 0 ; \n } \n 0003120 } ; \n 0003140 \n \n w h i l 0003160 e ( i n p + 6 4 < = n B y 0003200 t e s ) { \n 0003220 o n e m ( b y t e s [ i n p ] 0003240 , c t x - > s t a t e ) ; \n 0003260 i n p + = 6 0003300 4 ; \n } ; \n 0003320 \n b c o p y 0003340 ( b y t e s + i n p , & ( c 0003360 t x - > b u f f e r [ i n B u f 0003400 f e r ] ) , n B y t e s - i n 0003420 p ) ; \n \n } \n \n \n s t 0003440 a t i c v o i d c h a r s F 0003460 r o m I n t ( p , i ) \n 0003500 u n s i g n e d c h a r 0003520 * p ; \n u n s i g n e d 0003540 i n t i ; \n { \n i n 0003560 t j ; \n f o r 0003600 ( j = 3 ; j > = 0 ; 0003620 j - - ) { \n p 0003640 [ j ] = i % 2 5 6 ; \n 0003660 i = i / 2 0003700 5 6 ; \n } \n } \n \n s t a 0003720 t i c v o i d i n t F r o m 0003740 C h a r s ( i , p ) \n 0003760 u n s i g n e d i n t * i 0004000 ; \n u n s i g n e d c 0004020 h a r * p ; \n { \n u n 0004040 s i g n e d i n t s u m = 0004060 0 ; \n u n s i g n e d 0004100 i n t j ; \n \n 0004120 f o r ( j = 0 ; j < 0004140 4 ; j + + ) { \n 0004160 s u m = ( s u m ) * 2 5 0004200 6 + p [ j ] ; \n } ; 0004220 \n * i = s u m ; \n } 0004240 \n \n v o i d S H S F i n a l 0004260 ( h a s h , c t x ) \n 0004300 u n s i g n e d c h a r 0004320 h a s h [ 2 0 ] ; \n S H 0004340 S _ C T X * c t x ; \n { \n 0004360 u n s i g n e d c h a r 0004400 c o u n t A s C h a r s [ 8 ] ; 0004420 \n u n s i g n e d i n 0004440 t i n B u f f e r ; \n 0004460 u n s i g n e d c h a r t 0004500 e r m i n a t o r = 0 x 8 0 0004520 ; \n \n / 0004540 * n u m b e r o f b y t e 0004560 s l e f t i n b u f f e r 0004600 f r o m p r e v i o u s c 0004620 a l l * / \n \n 0004640 c h a r s F r o m I n t 0004660 ( & ( c o u n t A s C h a r s [ 0004700 0 ] ) , c t x - > c o u n t [ 0004720 0 ] ) ; \n c h a r s F r 0004740 o m I n t ( & ( c o u n t A s C 0004760 h a r s [ 4 ] ) , c t x - > c 0005000 o u n t [ 1 ] ) ; \n S H 0005020 S U p d a t e ( c t x , & t 0005040 e r m i n a t o r , 1 ) ; \n 0005060 i n B u f f e r = ( 0005100 u n s i g n e d i n t ) ( ( c 0005120 t x - > c o u n t [ 1 ] / 8 ) 0005140 % 6 4 ) ; \n i f ( i 0005160 n B u f f e r > 6 4 - 8 ) 0005200 { \n b z e r o ( & 0005220 ( c t x - > b u f f e r [ i n B 0005240 u f f e r ] ) , 6 4 - i n B u 0005260 f f e r ) ; \n o n 0005300 e m ( c t x - > b u f f e r , 0005320 c t x - > s t a t e ) ; \n 0005340 i n B u f f e r = 0005360 0 ; \n } ; \n b 0005400 z e r o ( & ( c t x - > b u f f 0005420 e r [ i n B u f f e r ] ) , ( 0005440 6 4 - 8 ) - i n B u f f e r ) ; 0005460 \n b c o p y ( c o u n t 0005500 A s C h a r s , & ( c t x - > 0005520 b u f f e r [ 6 4 - 8 ] ) , 8 0005540 ) ; \n o n e m ( c t x 0005560 - > b u f f e r , c t x - > s 0005600 t a t e ) ; \n \n { \n 0005620 u n s i g n e d 0005640 i n t i ; \n c 0005660 h a r * p ; \n 0005700 \n f o r ( ( i 0005720 = 0 , \n 0005740 p = ( c h a r * ) h a s h ) 0005760 ; i < 5 ; ( i + + , p + 0006000 = 4 ) ) { \n 0006020 c h a r s F r o m I n t 0006040 ( p , c t x - > s t a t e [ 0006060 i ] ) ; \n } \n 0006100 } \n } \n \n # d e f i n e 0006120 S 5 ( x ) ( ( ( x ) < < 5 ) 0006140 | ( ( x ) > > 2 7 ) ) \n # d 0006160 e f i n e S 3 0 ( x ) ( ( ( 0006200 x ) < < 3 0 ) | ( ( x ) > > 0006220 2 ) ) \n # d e f i n e K 0 0 0006240 x 5 a 8 2 7 9 9 9 \n # d e f i n 0006260 e K 1 0 x 6 e d 9 e b a 1 \n 0006300 # d e f i n e K 2 0 x 8 f 1 0006320 b b c d c \n # d e f i n e K 3 0006340 0 x 0 c a 6 2 c 1 d 6 \n # d e 0006360 f i n e A N D ( x , y ) ( ( 0006400 x ) & ( y ) ) \n # d e f i n e 0006420 F 0 ( x , y , z ) ( A N D ( x 0006440 , y ) | A N D ( ~ ( x ) , z 0006460 ) ) \n # d e f i n e F 1 ( x , 0006500 y , z ) ( ( x ) ^ ( y ) ^ ( z 0006520 ) ) \n # d e f i n e F 2 ( x , 0006540 y , z ) ( A N D ( x , y ) | 0006560 A N D ( x , z ) | A N D ( 0006600 y , z ) ) \n # d e f i n e w o 0006620 r d u n s i g n e d l o n g 0006640 \n \n \n s t a t i c v o i d o 0006660 n e m ( m , h ) \n w o r d m 0006700 [ 1 6 ] ; \n w o r d h [ 5 ] ; 0006720 \n { \n w o r d w [ 8 0 0006740 ] ; \n i n t t ; \n 0006760 w o r d A , B , C , 0007000 D , E ; \n w o r d * 0007020 p , * q ; \n w o r d 0007040 * p m 3 , * p m 8 , * p m 1 0007060 4 , * p m 1 6 ; \n w o 0007100 r d t e m p ; \n i n t 0007120 i ; \n i f ( l i t t 0007140 l e E n d i a n ) \n 0007160 f o r ( i = 0 ; i < 0007200 1 6 ; i + + ) { \n 0007220 i n t F r o m C 0007240 h a r s ( & ( m [ i ] ) , & ( 0007260 m [ i ] ) ) ; \n 0007300 } ; \n A = h [ 0 ] 0007320 ; B = h [ 1 ] ; C = h [ 2 ] 0007340 ; D = h [ 3 ] ; E = h [ 4 ] 0007360 ; \n f o r ( p = m 0007400 , q = w ; p < m + 1 6 ; 0007420 p + + , q + + ) { \n 0007440 * q = * p ; \n 0007460 } \n p m 3 0007500 = w + 1 3 ; p m 8 = w + 0007520 8 ; p m 1 4 = w + 2 ; p m 1 0007540 6 = w ; \n f o r ( p = 0007560 w + 1 6 ; p < w + 8 0 ; 0007600 p + + , p m 3 + + , p m 8 + 0007620 + , p m 1 4 + + , p m 1 6 + 0007640 + ) { \n * p 0007660 = * p m 3 ^ * p m 8 ^ 0007700 * p m 1 4 ^ * p m 1 6 ; \n 0007720 } \n f o r 0007740 ( i = 0 ; i < 2 0 ; i + + 0007760 ) { \n t e m p 0010000 = S 5 ( A ) + F 0 ( B , 0010020 C , D ) + E + w [ i ] 0010040 + K 0 ; \n E = 0010060 D ; D = C ; C = S 3 0 ( B ) 0010100 ; B = A ; A = t e m p ; \n 0010120 } \n f o r 0010140 ( i = 2 0 ; i < 4 0 ; i + 0010160 + ) { \n t e m 0010200 p = S 5 ( A ) + F 1 ( B 0010220 , C , D ) + E + w [ i ] 0010240 + K 1 ; \n E 0010260 = D ; D = C ; C = S 3 0 ( B 0010300 ) ; B = A ; A = t e m p ; \n 0010320 } \n f o 0010340 r ( i = 4 0 ; i < 6 0 ; i 0010360 + + ) { \n t e 0010400 m p = S 5 ( A ) + F 2 ( 0010420 B , C , D ) + E + w [ i 0010440 ] + K 2 ; \n 0010460 E = D ; D = C ; C = S 3 0 ( 0010500 B ) ; B = A ; A = t e m p ; 0010520 \n } \n f 0010540 o r ( i = 6 0 ; i < 8 0 ; 0010560 i + + ) { \n t 0010600 e m p = S 5 ( A ) + F 1 0010620 ( B , C , D ) + E + w [ 0010640 i ] + K 3 ; \n 0010660 E = D ; D = C ; C = S 3 0 0010700 ( B ) ; B = A ; A = t e m p 0010720 ; \n } \n 0010740 h [ 0 ] = h [ 0 ] + A ; \n 0010760 h [ 1 ] = h [ 1 ] + B ; \n 0011000 h [ 2 ] = h [ 2 ] + C ; \n 0011020 h [ 3 ] = h [ 3 ] + D ; \n 0011040 h [ 4 ] = h [ 4 ] + E ; 0011060 \n } \n 0011073