2011-11-09 18:26:31 +04:00
/ *
* Serpent C i p h e r 4 - w a y p a r a l l e l a l g o r i t h m ( i 5 8 6 / S S E 2 )
*
* Copyright ( C ) 2 0 1 1 J u s s i K i v i l i n n a < j u s s i . k i v i l i n n a @mbnet.fi>
*
* Based o n c r y p t o / s e r p e n t . c b y
* Copyright ( C ) 2 0 0 2 D a g A r n e O s v i k < o s v i k @ii.uib.no>
* 2 0 0 3 Herbert V a l e r i o R i e d e l < h v r @gnu.org>
*
* This p r o g r a m i s f r e e s o f t w a r e ; you can redistribute it and/or modify
* it u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e a s p u b l i s h e d b y
* the F r e e S o f t w a r e F o u n d a t i o n ; either version 2 of the License, or
* ( at y o u r o p t i o n ) a n y l a t e r v e r s i o n .
*
* This p r o g r a m i s d i s t r i b u t e d i n t h e h o p e t h a t i t w i l l b e u s e f u l ,
* but W I T H O U T A N Y W A R R A N T Y ; without even the implied warranty of
* MERCHANTABILITY o r F I T N E S S F O R A P A R T I C U L A R P U R P O S E . S e e t h e
* GNU G e n e r a l P u b l i c L i c e n s e f o r m o r e d e t a i l s .
*
* You s h o u l d h a v e r e c e i v e d a c o p y o f t h e G N U G e n e r a l P u b l i c L i c e n s e
* along w i t h t h i s p r o g r a m ; if not, write to the Free Software
* Foundation, I n c . , 5 9 T e m p l e P l a c e , S u i t e 3 3 0 , B o s t o n , M A 0 2 1 1 1 - 1 3 0 7
* USA
*
* /
2013-01-19 15:39:36 +04:00
# include < l i n u x / l i n k a g e . h >
2011-11-09 18:26:31 +04:00
.file " serpent- s s e 2 - i 5 8 6 - a s m _ 3 2 . S "
.text
# define a r g _ c t x 4
# define a r g _ d s t 8
# define a r g _ s r c 1 2
# define a r g _ x o r 1 6
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4 - way S S E 2 s e r p e n t
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
# define C T X % e d x
# define R A % x m m 0
# define R B % x m m 1
# define R C % x m m 2
# define R D % x m m 3
# define R E % x m m 4
# define R T 0 % x m m 5
# define R T 1 % x m m 6
# define R N O T % x m m 7
# define g e t _ k e y ( i , j , t ) \
movd ( 4 * ( i ) + ( j ) ) * 4 ( C T X ) , t ; \
pshufd $ 0 , t , t ;
# define K ( x0 , x1 , x2 , x3 , x4 , i ) \
get_ k e y ( i , 0 , x4 ) ; \
get_ k e y ( i , 1 , R T 0 ) ; \
get_ k e y ( i , 2 , R T 1 ) ; \
pxor x4 , x0 ; \
pxor R T 0 , x1 ; \
pxor R T 1 , x2 ; \
get_ k e y ( i , 3 , x4 ) ; \
pxor x4 , x3 ;
# define L K ( x0 , x1 , x2 , x3 , x4 , i ) \
movdqa x0 , x4 ; \
pslld $ 1 3 , x0 ; \
psrld $ ( 3 2 - 1 3 ) , x4 ; \
por x4 , x0 ; \
pxor x0 , x1 ; \
movdqa x2 , x4 ; \
pslld $ 3 , x2 ; \
psrld $ ( 3 2 - 3 ) , x4 ; \
por x4 , x2 ; \
pxor x2 , x1 ; \
movdqa x1 , x4 ; \
pslld $ 1 , x1 ; \
psrld $ ( 3 2 - 1 ) , x4 ; \
por x4 , x1 ; \
movdqa x0 , x4 ; \
pslld $ 3 , x4 ; \
pxor x2 , x3 ; \
pxor x4 , x3 ; \
movdqa x3 , x4 ; \
pslld $ 7 , x3 ; \
psrld $ ( 3 2 - 7 ) , x4 ; \
por x4 , x3 ; \
movdqa x1 , x4 ; \
pslld $ 7 , x4 ; \
pxor x1 , x0 ; \
pxor x3 , x0 ; \
pxor x3 , x2 ; \
pxor x4 , x2 ; \
movdqa x0 , x4 ; \
get_ k e y ( i , 1 , R T 0 ) ; \
pxor R T 0 , x1 ; \
get_ k e y ( i , 3 , R T 0 ) ; \
pxor R T 0 , x3 ; \
pslld $ 5 , x0 ; \
psrld $ ( 3 2 - 5 ) , x4 ; \
por x4 , x0 ; \
movdqa x2 , x4 ; \
pslld $ 2 2 , x2 ; \
psrld $ ( 3 2 - 2 2 ) , x4 ; \
por x4 , x2 ; \
get_ k e y ( i , 0 , R T 0 ) ; \
pxor R T 0 , x0 ; \
get_ k e y ( i , 2 , R T 0 ) ; \
pxor R T 0 , x2 ;
# define K L ( x0 , x1 , x2 , x3 , x4 , i ) \
K( x0 , x1 , x2 , x3 , x4 , i ) ; \
movdqa x0 , x4 ; \
psrld $ 5 , x0 ; \
pslld $ ( 3 2 - 5 ) , x4 ; \
por x4 , x0 ; \
movdqa x2 , x4 ; \
psrld $ 2 2 , x2 ; \
pslld $ ( 3 2 - 2 2 ) , x4 ; \
por x4 , x2 ; \
pxor x3 , x2 ; \
pxor x3 , x0 ; \
movdqa x1 , x4 ; \
pslld $ 7 , x4 ; \
pxor x1 , x0 ; \
pxor x4 , x2 ; \
movdqa x1 , x4 ; \
psrld $ 1 , x1 ; \
pslld $ ( 3 2 - 1 ) , x4 ; \
por x4 , x1 ; \
movdqa x3 , x4 ; \
psrld $ 7 , x3 ; \
pslld $ ( 3 2 - 7 ) , x4 ; \
por x4 , x3 ; \
pxor x0 , x1 ; \
movdqa x0 , x4 ; \
pslld $ 3 , x4 ; \
pxor x4 , x3 ; \
movdqa x0 , x4 ; \
psrld $ 1 3 , x0 ; \
pslld $ ( 3 2 - 1 3 ) , x4 ; \
por x4 , x0 ; \
pxor x2 , x1 ; \
pxor x2 , x3 ; \
movdqa x2 , x4 ; \
psrld $ 3 , x2 ; \
pslld $ ( 3 2 - 3 ) , x4 ; \
por x4 , x2 ;
# define S 0 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x3 , x4 ; \
por x0 , x3 ; \
pxor x4 , x0 ; \
pxor x2 , x4 ; \
pxor R N O T , x4 ; \
pxor x1 , x3 ; \
pand x0 , x1 ; \
pxor x4 , x1 ; \
pxor x0 , x2 ; \
pxor x3 , x0 ; \
por x0 , x4 ; \
pxor x2 , x0 ; \
pand x1 , x2 ; \
pxor x2 , x3 ; \
pxor R N O T , x1 ; \
pxor x4 , x2 ; \
pxor x2 , x1 ;
# define S 1 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x1 , x4 ; \
pxor x0 , x1 ; \
pxor x3 , x0 ; \
pxor R N O T , x3 ; \
pand x1 , x4 ; \
por x1 , x0 ; \
pxor x2 , x3 ; \
pxor x3 , x0 ; \
pxor x3 , x1 ; \
pxor x4 , x3 ; \
por x4 , x1 ; \
pxor x2 , x4 ; \
pand x0 , x2 ; \
pxor x1 , x2 ; \
por x0 , x1 ; \
pxor R N O T , x0 ; \
pxor x2 , x0 ; \
pxor x1 , x4 ;
# define S 2 ( x0 , x1 , x2 , x3 , x4 ) \
pxor R N O T , x3 ; \
pxor x0 , x1 ; \
movdqa x0 , x4 ; \
pand x2 , x0 ; \
pxor x3 , x0 ; \
por x4 , x3 ; \
pxor x1 , x2 ; \
pxor x1 , x3 ; \
pand x0 , x1 ; \
pxor x2 , x0 ; \
pand x3 , x2 ; \
por x1 , x3 ; \
pxor R N O T , x0 ; \
pxor x0 , x3 ; \
pxor x0 , x4 ; \
pxor x2 , x0 ; \
por x2 , x1 ;
# define S 3 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x1 , x4 ; \
pxor x3 , x1 ; \
por x0 , x3 ; \
pand x0 , x4 ; \
pxor x2 , x0 ; \
pxor x1 , x2 ; \
pand x3 , x1 ; \
pxor x3 , x2 ; \
por x4 , x0 ; \
pxor x3 , x4 ; \
pxor x0 , x1 ; \
pand x3 , x0 ; \
pand x4 , x3 ; \
pxor x2 , x3 ; \
por x1 , x4 ; \
pand x1 , x2 ; \
pxor x3 , x4 ; \
pxor x3 , x0 ; \
pxor x2 , x3 ;
# define S 4 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x3 , x4 ; \
pand x0 , x3 ; \
pxor x4 , x0 ; \
pxor x2 , x3 ; \
por x4 , x2 ; \
pxor x1 , x0 ; \
pxor x3 , x4 ; \
por x0 , x2 ; \
pxor x1 , x2 ; \
pand x0 , x1 ; \
pxor x4 , x1 ; \
pand x2 , x4 ; \
pxor x3 , x2 ; \
pxor x0 , x4 ; \
por x1 , x3 ; \
pxor R N O T , x1 ; \
pxor x0 , x3 ;
# define S 5 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x1 , x4 ; \
por x0 , x1 ; \
pxor x1 , x2 ; \
pxor R N O T , x3 ; \
pxor x0 , x4 ; \
pxor x2 , x0 ; \
pand x4 , x1 ; \
por x3 , x4 ; \
pxor x0 , x4 ; \
pand x3 , x0 ; \
pxor x3 , x1 ; \
pxor x2 , x3 ; \
pxor x1 , x0 ; \
pand x4 , x2 ; \
pxor x2 , x1 ; \
pand x0 , x2 ; \
pxor x2 , x3 ;
# define S 6 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x1 , x4 ; \
pxor x0 , x3 ; \
pxor x2 , x1 ; \
pxor x0 , x2 ; \
pand x3 , x0 ; \
por x3 , x1 ; \
pxor R N O T , x4 ; \
pxor x1 , x0 ; \
pxor x2 , x1 ; \
pxor x4 , x3 ; \
pxor x0 , x4 ; \
pand x0 , x2 ; \
pxor x1 , x4 ; \
pxor x3 , x2 ; \
pand x1 , x3 ; \
pxor x0 , x3 ; \
pxor x2 , x1 ;
# define S 7 ( x0 , x1 , x2 , x3 , x4 ) \
pxor R N O T , x1 ; \
movdqa x1 , x4 ; \
pxor R N O T , x0 ; \
pand x2 , x1 ; \
pxor x3 , x1 ; \
por x4 , x3 ; \
pxor x2 , x4 ; \
pxor x3 , x2 ; \
pxor x0 , x3 ; \
por x1 , x0 ; \
pand x0 , x2 ; \
pxor x4 , x0 ; \
pxor x3 , x4 ; \
pand x0 , x3 ; \
pxor x1 , x4 ; \
pxor x4 , x2 ; \
pxor x1 , x3 ; \
por x0 , x4 ; \
pxor x1 , x4 ;
# define S I 0 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x3 , x4 ; \
pxor x0 , x1 ; \
por x1 , x3 ; \
pxor x1 , x4 ; \
pxor R N O T , x0 ; \
pxor x3 , x2 ; \
pxor x0 , x3 ; \
pand x1 , x0 ; \
pxor x2 , x0 ; \
pand x3 , x2 ; \
pxor x4 , x3 ; \
pxor x3 , x2 ; \
pxor x3 , x1 ; \
pand x0 , x3 ; \
pxor x0 , x1 ; \
pxor x2 , x0 ; \
pxor x3 , x4 ;
# define S I 1 ( x0 , x1 , x2 , x3 , x4 ) \
pxor x3 , x1 ; \
movdqa x0 , x4 ; \
pxor x2 , x0 ; \
pxor R N O T , x2 ; \
por x1 , x4 ; \
pxor x3 , x4 ; \
pand x1 , x3 ; \
pxor x2 , x1 ; \
pand x4 , x2 ; \
pxor x1 , x4 ; \
por x3 , x1 ; \
pxor x0 , x3 ; \
pxor x0 , x2 ; \
por x4 , x0 ; \
pxor x4 , x2 ; \
pxor x0 , x1 ; \
pxor x1 , x4 ;
# define S I 2 ( x0 , x1 , x2 , x3 , x4 ) \
pxor x1 , x2 ; \
movdqa x3 , x4 ; \
pxor R N O T , x3 ; \
por x2 , x3 ; \
pxor x4 , x2 ; \
pxor x0 , x4 ; \
pxor x1 , x3 ; \
por x2 , x1 ; \
pxor x0 , x2 ; \
pxor x4 , x1 ; \
por x3 , x4 ; \
pxor x3 , x2 ; \
pxor x2 , x4 ; \
pand x1 , x2 ; \
pxor x3 , x2 ; \
pxor x4 , x3 ; \
pxor x0 , x4 ;
# define S I 3 ( x0 , x1 , x2 , x3 , x4 ) \
pxor x1 , x2 ; \
movdqa x1 , x4 ; \
pand x2 , x1 ; \
pxor x0 , x1 ; \
por x4 , x0 ; \
pxor x3 , x4 ; \
pxor x3 , x0 ; \
por x1 , x3 ; \
pxor x2 , x1 ; \
pxor x3 , x1 ; \
pxor x2 , x0 ; \
pxor x3 , x2 ; \
pand x1 , x3 ; \
pxor x0 , x1 ; \
pand x2 , x0 ; \
pxor x3 , x4 ; \
pxor x0 , x3 ; \
pxor x1 , x0 ;
# define S I 4 ( x0 , x1 , x2 , x3 , x4 ) \
pxor x3 , x2 ; \
movdqa x0 , x4 ; \
pand x1 , x0 ; \
pxor x2 , x0 ; \
por x3 , x2 ; \
pxor R N O T , x4 ; \
pxor x0 , x1 ; \
pxor x2 , x0 ; \
pand x4 , x2 ; \
pxor x0 , x2 ; \
por x4 , x0 ; \
pxor x3 , x0 ; \
pand x2 , x3 ; \
pxor x3 , x4 ; \
pxor x1 , x3 ; \
pand x0 , x1 ; \
pxor x1 , x4 ; \
pxor x3 , x0 ;
# define S I 5 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x1 , x4 ; \
por x2 , x1 ; \
pxor x4 , x2 ; \
pxor x3 , x1 ; \
pand x4 , x3 ; \
pxor x3 , x2 ; \
por x0 , x3 ; \
pxor R N O T , x0 ; \
pxor x2 , x3 ; \
por x0 , x2 ; \
pxor x1 , x4 ; \
pxor x4 , x2 ; \
pand x0 , x4 ; \
pxor x1 , x0 ; \
pxor x3 , x1 ; \
pand x2 , x0 ; \
pxor x3 , x2 ; \
pxor x2 , x0 ; \
pxor x4 , x2 ; \
pxor x3 , x4 ;
# define S I 6 ( x0 , x1 , x2 , x3 , x4 ) \
pxor x2 , x0 ; \
movdqa x0 , x4 ; \
pand x3 , x0 ; \
pxor x3 , x2 ; \
pxor x2 , x0 ; \
pxor x1 , x3 ; \
por x4 , x2 ; \
pxor x3 , x2 ; \
pand x0 , x3 ; \
pxor R N O T , x0 ; \
pxor x1 , x3 ; \
pand x2 , x1 ; \
pxor x0 , x4 ; \
pxor x4 , x3 ; \
pxor x2 , x4 ; \
pxor x1 , x0 ; \
pxor x0 , x2 ;
# define S I 7 ( x0 , x1 , x2 , x3 , x4 ) \
movdqa x3 , x4 ; \
pand x0 , x3 ; \
pxor x2 , x0 ; \
por x4 , x2 ; \
pxor x1 , x4 ; \
pxor R N O T , x0 ; \
por x3 , x1 ; \
pxor x0 , x4 ; \
pand x2 , x0 ; \
pxor x1 , x0 ; \
pand x2 , x1 ; \
pxor x2 , x3 ; \
pxor x3 , x4 ; \
pand x3 , x2 ; \
por x0 , x3 ; \
pxor x4 , x1 ; \
pxor x4 , x3 ; \
pand x0 , x4 ; \
pxor x2 , x4 ;
2011-12-20 14:58:06 +04:00
# define t r a n s p o s e _ 4 x4 ( x0 , x1 , x2 , x3 , t 0 , t 1 , t 2 ) \
2011-11-09 18:26:31 +04:00
movdqa x0 , t 2 ; \
2011-12-20 14:58:06 +04:00
punpckldq x1 , x0 ; \
punpckhdq x1 , t 2 ; \
movdqa x2 , t 1 ; \
punpckhdq x3 , x2 ; \
punpckldq x3 , t 1 ; \
movdqa x0 , x1 ; \
punpcklqdq t 1 , x0 ; \
punpckhqdq t 1 , x1 ; \
movdqa t 2 , x3 ; \
punpcklqdq x2 , t 2 ; \
punpckhqdq x2 , x3 ; \
movdqa t 2 , x2 ;
2011-11-09 18:26:31 +04:00
# define r e a d _ b l o c k s ( i n , x0 , x1 , x2 , x3 , t 0 , t 1 , t 2 ) \
movdqu ( 0 * 4 * 4 ) ( i n ) , x0 ; \
movdqu ( 1 * 4 * 4 ) ( i n ) , x1 ; \
movdqu ( 2 * 4 * 4 ) ( i n ) , x2 ; \
movdqu ( 3 * 4 * 4 ) ( i n ) , x3 ; \
\
transpose_ 4 x4 ( x0 , x1 , x2 , x3 , t 0 , t 1 , t 2 )
# define w r i t e _ b l o c k s ( o u t , x0 , x1 , x2 , x3 , t 0 , t 1 , t 2 ) \
transpose_ 4 x4 ( x0 , x1 , x2 , x3 , t 0 , t 1 , t 2 ) \
\
movdqu x0 , ( 0 * 4 * 4 ) ( o u t ) ; \
movdqu x1 , ( 1 * 4 * 4 ) ( o u t ) ; \
movdqu x2 , ( 2 * 4 * 4 ) ( o u t ) ; \
movdqu x3 , ( 3 * 4 * 4 ) ( o u t ) ;
# define x o r _ b l o c k s ( o u t , x0 , x1 , x2 , x3 , t 0 , t 1 , t 2 ) \
transpose_ 4 x4 ( x0 , x1 , x2 , x3 , t 0 , t 1 , t 2 ) \
\
movdqu ( 0 * 4 * 4 ) ( o u t ) , t 0 ; \
pxor t 0 , x0 ; \
movdqu x0 , ( 0 * 4 * 4 ) ( o u t ) ; \
movdqu ( 1 * 4 * 4 ) ( o u t ) , t 0 ; \
pxor t 0 , x1 ; \
movdqu x1 , ( 1 * 4 * 4 ) ( o u t ) ; \
movdqu ( 2 * 4 * 4 ) ( o u t ) , t 0 ; \
pxor t 0 , x2 ; \
movdqu x2 , ( 2 * 4 * 4 ) ( o u t ) ; \
movdqu ( 3 * 4 * 4 ) ( o u t ) , t 0 ; \
pxor t 0 , x3 ; \
movdqu x3 , ( 3 * 4 * 4 ) ( o u t ) ;
2013-01-19 15:39:36 +04:00
ENTRY( _ _ s e r p e n t _ e n c _ b l k _ 4 w a y )
2011-11-09 18:26:31 +04:00
/ * input :
* arg_ c t x ( % e s p ) : c t x , C T X
* arg_ d s t ( % e s p ) : d s t
* arg_ s r c ( % e s p ) : s r c
* arg_ x o r ( % e s p ) : b o o l , i f t r u e : x o r o u t p u t
* /
pcmpeqd R N O T , R N O T ;
movl a r g _ c t x ( % e s p ) , C T X ;
movl a r g _ s r c ( % e s p ) , % e a x ;
read_ b l o c k s ( % e a x , R A , R B , R C , R D , R T 0 , R T 1 , R E ) ;
K( R A , R B , R C , R D , R E , 0 ) ;
S0 ( R A , R B , R C , R D , R E ) ; LK(RC, RB, RD, RA, RE, 1);
S1 ( R C , R B , R D , R A , R E ) ; LK(RE, RD, RA, RC, RB, 2);
S2 ( R E , R D , R A , R C , R B ) ; LK(RB, RD, RE, RC, RA, 3);
S3 ( R B , R D , R E , R C , R A ) ; LK(RC, RA, RD, RB, RE, 4);
S4 ( R C , R A , R D , R B , R E ) ; LK(RA, RD, RB, RE, RC, 5);
S5 ( R A , R D , R B , R E , R C ) ; LK(RC, RA, RD, RE, RB, 6);
S6 ( R C , R A , R D , R E , R B ) ; LK(RD, RB, RA, RE, RC, 7);
S7 ( R D , R B , R A , R E , R C ) ; LK(RC, RA, RE, RD, RB, 8);
S0 ( R C , R A , R E , R D , R B ) ; LK(RE, RA, RD, RC, RB, 9);
S1 ( R E , R A , R D , R C , R B ) ; LK(RB, RD, RC, RE, RA, 10);
S2 ( R B , R D , R C , R E , R A ) ; LK(RA, RD, RB, RE, RC, 11);
S3 ( R A , R D , R B , R E , R C ) ; LK(RE, RC, RD, RA, RB, 12);
S4 ( R E , R C , R D , R A , R B ) ; LK(RC, RD, RA, RB, RE, 13);
S5 ( R C , R D , R A , R B , R E ) ; LK(RE, RC, RD, RB, RA, 14);
S6 ( R E , R C , R D , R B , R A ) ; LK(RD, RA, RC, RB, RE, 15);
S7 ( R D , R A , R C , R B , R E ) ; LK(RE, RC, RB, RD, RA, 16);
S0 ( R E , R C , R B , R D , R A ) ; LK(RB, RC, RD, RE, RA, 17);
S1 ( R B , R C , R D , R E , R A ) ; LK(RA, RD, RE, RB, RC, 18);
S2 ( R A , R D , R E , R B , R C ) ; LK(RC, RD, RA, RB, RE, 19);
S3 ( R C , R D , R A , R B , R E ) ; LK(RB, RE, RD, RC, RA, 20);
S4 ( R B , R E , R D , R C , R A ) ; LK(RE, RD, RC, RA, RB, 21);
S5 ( R E , R D , R C , R A , R B ) ; LK(RB, RE, RD, RA, RC, 22);
S6 ( R B , R E , R D , R A , R C ) ; LK(RD, RC, RE, RA, RB, 23);
S7 ( R D , R C , R E , R A , R B ) ; LK(RB, RE, RA, RD, RC, 24);
S0 ( R B , R E , R A , R D , R C ) ; LK(RA, RE, RD, RB, RC, 25);
S1 ( R A , R E , R D , R B , R C ) ; LK(RC, RD, RB, RA, RE, 26);
S2 ( R C , R D , R B , R A , R E ) ; LK(RE, RD, RC, RA, RB, 27);
S3 ( R E , R D , R C , R A , R B ) ; LK(RA, RB, RD, RE, RC, 28);
S4 ( R A , R B , R D , R E , R C ) ; LK(RB, RD, RE, RC, RA, 29);
S5 ( R B , R D , R E , R C , R A ) ; LK(RA, RB, RD, RC, RE, 30);
S6 ( R A , R B , R D , R C , R E ) ; LK(RD, RE, RB, RC, RA, 31);
S7 ( R D , R E , R B , R C , R A ) ; K(RA, RB, RC, RD, RE, 32);
movl a r g _ d s t ( % e s p ) , % e a x ;
cmpb $ 0 , a r g _ x o r ( % e s p ) ;
2013-01-19 15:39:36 +04:00
jnz . L _ _ e n c _ x o r4 ;
2011-11-09 18:26:31 +04:00
write_ b l o c k s ( % e a x , R A , R B , R C , R D , R T 0 , R T 1 , R E ) ;
ret;
2013-01-19 15:39:36 +04:00
.L__enc_xor4 :
2011-11-09 18:26:31 +04:00
xor_ b l o c k s ( % e a x , R A , R B , R C , R D , R T 0 , R T 1 , R E ) ;
ret;
2013-01-19 15:39:36 +04:00
ENDPROC( _ _ s e r p e n t _ e n c _ b l k _ 4 w a y )
2011-11-09 18:26:31 +04:00
2013-01-19 15:39:36 +04:00
ENTRY( s e r p e n t _ d e c _ b l k _ 4 w a y )
2011-11-09 18:26:31 +04:00
/ * input :
* arg_ c t x ( % e s p ) : c t x , C T X
* arg_ d s t ( % e s p ) : d s t
* arg_ s r c ( % e s p ) : s r c
* /
pcmpeqd R N O T , R N O T ;
movl a r g _ c t x ( % e s p ) , C T X ;
movl a r g _ s r c ( % e s p ) , % e a x ;
read_ b l o c k s ( % e a x , R A , R B , R C , R D , R T 0 , R T 1 , R E ) ;
K( R A , R B , R C , R D , R E , 3 2 ) ;
SI7 ( R A , R B , R C , R D , R E ) ; KL(RB, RD, RA, RE, RC, 31);
SI6 ( R B , R D , R A , R E , R C ) ; KL(RA, RC, RE, RB, RD, 30);
SI5 ( R A , R C , R E , R B , R D ) ; KL(RC, RD, RA, RE, RB, 29);
SI4 ( R C , R D , R A , R E , R B ) ; KL(RC, RA, RB, RE, RD, 28);
SI3 ( R C , R A , R B , R E , R D ) ; KL(RB, RC, RD, RE, RA, 27);
SI2 ( R B , R C , R D , R E , R A ) ; KL(RC, RA, RE, RD, RB, 26);
SI1 ( R C , R A , R E , R D , R B ) ; KL(RB, RA, RE, RD, RC, 25);
SI0 ( R B , R A , R E , R D , R C ) ; KL(RE, RC, RA, RB, RD, 24);
SI7 ( R E , R C , R A , R B , R D ) ; KL(RC, RB, RE, RD, RA, 23);
SI6 ( R C , R B , R E , R D , R A ) ; KL(RE, RA, RD, RC, RB, 22);
SI5 ( R E , R A , R D , R C , R B ) ; KL(RA, RB, RE, RD, RC, 21);
SI4 ( R A , R B , R E , R D , R C ) ; KL(RA, RE, RC, RD, RB, 20);
SI3 ( R A , R E , R C , R D , R B ) ; KL(RC, RA, RB, RD, RE, 19);
SI2 ( R C , R A , R B , R D , R E ) ; KL(RA, RE, RD, RB, RC, 18);
SI1 ( R A , R E , R D , R B , R C ) ; KL(RC, RE, RD, RB, RA, 17);
SI0 ( R C , R E , R D , R B , R A ) ; KL(RD, RA, RE, RC, RB, 16);
SI7 ( R D , R A , R E , R C , R B ) ; KL(RA, RC, RD, RB, RE, 15);
SI6 ( R A , R C , R D , R B , R E ) ; KL(RD, RE, RB, RA, RC, 14);
SI5 ( R D , R E , R B , R A , R C ) ; KL(RE, RC, RD, RB, RA, 13);
SI4 ( R E , R C , R D , R B , R A ) ; KL(RE, RD, RA, RB, RC, 12);
SI3 ( R E , R D , R A , R B , R C ) ; KL(RA, RE, RC, RB, RD, 11);
SI2 ( R A , R E , R C , R B , R D ) ; KL(RE, RD, RB, RC, RA, 10);
SI1 ( R E , R D , R B , R C , R A ) ; KL(RA, RD, RB, RC, RE, 9);
SI0 ( R A , R D , R B , R C , R E ) ; KL(RB, RE, RD, RA, RC, 8);
SI7 ( R B , R E , R D , R A , R C ) ; KL(RE, RA, RB, RC, RD, 7);
SI6 ( R E , R A , R B , R C , R D ) ; KL(RB, RD, RC, RE, RA, 6);
SI5 ( R B , R D , R C , R E , R A ) ; KL(RD, RA, RB, RC, RE, 5);
SI4 ( R D , R A , R B , R C , R E ) ; KL(RD, RB, RE, RC, RA, 4);
SI3 ( R D , R B , R E , R C , R A ) ; KL(RE, RD, RA, RC, RB, 3);
SI2 ( R E , R D , R A , R C , R B ) ; KL(RD, RB, RC, RA, RE, 2);
SI1 ( R D , R B , R C , R A , R E ) ; KL(RE, RB, RC, RA, RD, 1);
SI0 ( R E , R B , R C , R A , R D ) ; K(RC, RD, RB, RE, RA, 0);
movl a r g _ d s t ( % e s p ) , % e a x ;
write_ b l o c k s ( % e a x , R C , R D , R B , R E , R T 0 , R T 1 , R A ) ;
ret;
2013-01-19 15:39:36 +04:00
ENDPROC( s e r p e n t _ d e c _ b l k _ 4 w a y )