2019-05-27 08:55:05 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2011-11-09 16:26:25 +02:00
/ *
* Serpent C i p h e r 8 - w a y p a r a l l e l a l g o r i t h m ( x86 _ 6 4 / 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>
* /
2013-01-19 13:39:36 +02:00
# include < l i n u x / l i n k a g e . h >
2011-11-09 16:26:25 +02:00
.file " serpent- s s e 2 - x86 _ 6 4 - a s m _ 6 4 . S "
.text
# define C T X % r d i
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
8 - way S S E 2 s e r p e n t
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
# define R A 1 % x m m 0
# define R B 1 % x m m 1
# define R C 1 % x m m 2
# define R D 1 % x m m 3
# define R E 1 % x m m 4
# define R A 2 % x m m 5
# define R B 2 % x m m 6
# define R C 2 % x m m 7
# define R D 2 % x m m 8
# define R E 2 % x m m 9
# define R N O T % x m m 1 0
# define R K 0 % x m m 1 1
# define R K 1 % x m m 1 2
# define R K 2 % x m m 1 3
# define R K 3 % x m m 1 4
# define S 0 _ 1 ( 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 ;
# define S 0 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 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 ;
# define S 1 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S 2 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S 3 _ 2 ( x0 , x1 , x2 , 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 _ 1 ( 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 ;
# define S 4 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S 5 _ 2 ( x0 , x1 , x2 , x3 , 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 _ 1 ( 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 ;
# define S 6 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S 7 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S I 0 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 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 ;
# define S I 1 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S I 2 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S I 3 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S I 4 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S I 5 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S I 6 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 _ 1 ( 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 ;
# define S I 7 _ 2 ( x0 , x1 , x2 , x3 , x4 ) \
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 ;
# 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 2 ( x0 , x1 , x2 , x3 , x4 , i ) \
get_ k e y ( i , 0 , R K 0 ) ; \
get_ k e y ( i , 1 , R K 1 ) ; \
get_ k e y ( i , 2 , R K 2 ) ; \
get_ k e y ( i , 3 , R K 3 ) ; \
pxor R K 0 , x0 ## 1 ; \
pxor R K 1 , x1 ## 1 ; \
pxor R K 2 , x2 ## 1 ; \
pxor R K 3 , x3 ## 1 ; \
pxor R K 0 , x0 ## 2 ; \
pxor R K 1 , x1 ## 2 ; \
pxor R K 2 , x2 ## 2 ; \
pxor R K 3 , x3 ## 2 ;
# define L K 2 ( x0 , x1 , x2 , x3 , x4 , i ) \
movdqa x0 ## 1 , x4 ## 1 ; \
pslld $ 1 3 , x0 ## 1 ; \
psrld $ ( 3 2 - 1 3 ) , x4 ## 1 ; \
por x4 ## 1 , x0 ## 1 ; \
pxor x0 ## 1 , x1 ## 1 ; \
movdqa x2 ## 1 , x4 ## 1 ; \
pslld $ 3 , x2 ## 1 ; \
psrld $ ( 3 2 - 3 ) , x4 ## 1 ; \
por x4 ## 1 , x2 ## 1 ; \
pxor x2 ## 1 , x1 ## 1 ; \
movdqa x0 ## 2 , x4 ## 2 ; \
pslld $ 1 3 , x0 ## 2 ; \
psrld $ ( 3 2 - 1 3 ) , x4 ## 2 ; \
por x4 ## 2 , x0 ## 2 ; \
pxor x0 ## 2 , x1 ## 2 ; \
movdqa x2 ## 2 , x4 ## 2 ; \
pslld $ 3 , x2 ## 2 ; \
psrld $ ( 3 2 - 3 ) , x4 ## 2 ; \
por x4 ## 2 , x2 ## 2 ; \
pxor x2 ## 2 , x1 ## 2 ; \
movdqa x1 ## 1 , x4 ## 1 ; \
pslld $ 1 , x1 ## 1 ; \
psrld $ ( 3 2 - 1 ) , x4 ## 1 ; \
por x4 ## 1 , x1 ## 1 ; \
movdqa x0 ## 1 , x4 ## 1 ; \
pslld $ 3 , x4 ## 1 ; \
pxor x2 ## 1 , x3 ## 1 ; \
pxor x4 ## 1 , x3 ## 1 ; \
movdqa x3 ## 1 , x4 ## 1 ; \
get_ k e y ( i , 1 , R K 1 ) ; \
movdqa x1 ## 2 , x4 ## 2 ; \
pslld $ 1 , x1 ## 2 ; \
psrld $ ( 3 2 - 1 ) , x4 ## 2 ; \
por x4 ## 2 , x1 ## 2 ; \
movdqa x0 ## 2 , x4 ## 2 ; \
pslld $ 3 , x4 ## 2 ; \
pxor x2 ## 2 , x3 ## 2 ; \
pxor x4 ## 2 , x3 ## 2 ; \
movdqa x3 ## 2 , x4 ## 2 ; \
get_ k e y ( i , 3 , R K 3 ) ; \
pslld $ 7 , x3 ## 1 ; \
psrld $ ( 3 2 - 7 ) , x4 ## 1 ; \
por x4 ## 1 , x3 ## 1 ; \
movdqa x1 ## 1 , x4 ## 1 ; \
pslld $ 7 , x4 ## 1 ; \
pxor x1 ## 1 , x0 ## 1 ; \
pxor x3 ## 1 , x0 ## 1 ; \
pxor x3 ## 1 , x2 ## 1 ; \
pxor x4 ## 1 , x2 ## 1 ; \
get_ k e y ( i , 0 , R K 0 ) ; \
pslld $ 7 , x3 ## 2 ; \
psrld $ ( 3 2 - 7 ) , x4 ## 2 ; \
por x4 ## 2 , x3 ## 2 ; \
movdqa x1 ## 2 , x4 ## 2 ; \
pslld $ 7 , x4 ## 2 ; \
pxor x1 ## 2 , x0 ## 2 ; \
pxor x3 ## 2 , x0 ## 2 ; \
pxor x3 ## 2 , x2 ## 2 ; \
pxor x4 ## 2 , x2 ## 2 ; \
get_ k e y ( i , 2 , R K 2 ) ; \
pxor R K 1 , x1 ## 1 ; \
pxor R K 3 , x3 ## 1 ; \
movdqa x0 ## 1 , x4 ## 1 ; \
pslld $ 5 , x0 ## 1 ; \
psrld $ ( 3 2 - 5 ) , x4 ## 1 ; \
por x4 ## 1 , x0 ## 1 ; \
movdqa x2 ## 1 , x4 ## 1 ; \
pslld $ 2 2 , x2 ## 1 ; \
psrld $ ( 3 2 - 2 2 ) , x4 ## 1 ; \
por x4 ## 1 , x2 ## 1 ; \
pxor R K 0 , x0 ## 1 ; \
pxor R K 2 , x2 ## 1 ; \
pxor R K 1 , x1 ## 2 ; \
pxor R K 3 , x3 ## 2 ; \
movdqa x0 ## 2 , x4 ## 2 ; \
pslld $ 5 , x0 ## 2 ; \
psrld $ ( 3 2 - 5 ) , x4 ## 2 ; \
por x4 ## 2 , x0 ## 2 ; \
movdqa x2 ## 2 , x4 ## 2 ; \
pslld $ 2 2 , x2 ## 2 ; \
psrld $ ( 3 2 - 2 2 ) , x4 ## 2 ; \
por x4 ## 2 , x2 ## 2 ; \
pxor R K 0 , x0 ## 2 ; \
pxor R K 2 , x2 ## 2 ;
# define K L 2 ( x0 , x1 , x2 , x3 , x4 , i ) \
pxor R K 0 , x0 ## 1 ; \
pxor R K 2 , x2 ## 1 ; \
movdqa x0 ## 1 , x4 ## 1 ; \
psrld $ 5 , x0 ## 1 ; \
pslld $ ( 3 2 - 5 ) , x4 ## 1 ; \
por x4 ## 1 , x0 ## 1 ; \
pxor R K 3 , x3 ## 1 ; \
pxor R K 1 , x1 ## 1 ; \
movdqa x2 ## 1 , x4 ## 1 ; \
psrld $ 2 2 , x2 ## 1 ; \
pslld $ ( 3 2 - 2 2 ) , x4 ## 1 ; \
por x4 ## 1 , x2 ## 1 ; \
pxor x3 ## 1 , x2 ## 1 ; \
pxor R K 0 , x0 ## 2 ; \
pxor R K 2 , x2 ## 2 ; \
movdqa x0 ## 2 , x4 ## 2 ; \
psrld $ 5 , x0 ## 2 ; \
pslld $ ( 3 2 - 5 ) , x4 ## 2 ; \
por x4 ## 2 , x0 ## 2 ; \
pxor R K 3 , x3 ## 2 ; \
pxor R K 1 , x1 ## 2 ; \
movdqa x2 ## 2 , x4 ## 2 ; \
psrld $ 2 2 , x2 ## 2 ; \
pslld $ ( 3 2 - 2 2 ) , x4 ## 2 ; \
por x4 ## 2 , x2 ## 2 ; \
pxor x3 ## 2 , x2 ## 2 ; \
pxor x3 ## 1 , x0 ## 1 ; \
movdqa x1 ## 1 , x4 ## 1 ; \
pslld $ 7 , x4 ## 1 ; \
pxor x1 ## 1 , x0 ## 1 ; \
pxor x4 ## 1 , x2 ## 1 ; \
movdqa x1 ## 1 , x4 ## 1 ; \
psrld $ 1 , x1 ## 1 ; \
pslld $ ( 3 2 - 1 ) , x4 ## 1 ; \
por x4 ## 1 , x1 ## 1 ; \
pxor x3 ## 2 , x0 ## 2 ; \
movdqa x1 ## 2 , x4 ## 2 ; \
pslld $ 7 , x4 ## 2 ; \
pxor x1 ## 2 , x0 ## 2 ; \
pxor x4 ## 2 , x2 ## 2 ; \
movdqa x1 ## 2 , x4 ## 2 ; \
psrld $ 1 , x1 ## 2 ; \
pslld $ ( 3 2 - 1 ) , x4 ## 2 ; \
por x4 ## 2 , x1 ## 2 ; \
movdqa x3 ## 1 , x4 ## 1 ; \
psrld $ 7 , x3 ## 1 ; \
pslld $ ( 3 2 - 7 ) , x4 ## 1 ; \
por x4 ## 1 , x3 ## 1 ; \
pxor x0 ## 1 , x1 ## 1 ; \
movdqa x0 ## 1 , x4 ## 1 ; \
pslld $ 3 , x4 ## 1 ; \
pxor x4 ## 1 , x3 ## 1 ; \
movdqa x0 ## 1 , x4 ## 1 ; \
movdqa x3 ## 2 , x4 ## 2 ; \
psrld $ 7 , x3 ## 2 ; \
pslld $ ( 3 2 - 7 ) , x4 ## 2 ; \
por x4 ## 2 , x3 ## 2 ; \
pxor x0 ## 2 , x1 ## 2 ; \
movdqa x0 ## 2 , x4 ## 2 ; \
pslld $ 3 , x4 ## 2 ; \
pxor x4 ## 2 , x3 ## 2 ; \
movdqa x0 ## 2 , x4 ## 2 ; \
psrld $ 1 3 , x0 ## 1 ; \
pslld $ ( 3 2 - 1 3 ) , x4 ## 1 ; \
por x4 ## 1 , x0 ## 1 ; \
pxor x2 ## 1 , x1 ## 1 ; \
pxor x2 ## 1 , x3 ## 1 ; \
movdqa x2 ## 1 , x4 ## 1 ; \
psrld $ 3 , x2 ## 1 ; \
pslld $ ( 3 2 - 3 ) , x4 ## 1 ; \
por x4 ## 1 , x2 ## 1 ; \
psrld $ 1 3 , x0 ## 2 ; \
pslld $ ( 3 2 - 1 3 ) , x4 ## 2 ; \
por x4 ## 2 , x0 ## 2 ; \
pxor x2 ## 2 , x1 ## 2 ; \
pxor x2 ## 2 , x3 ## 2 ; \
movdqa x2 ## 2 , x4 ## 2 ; \
psrld $ 3 , x2 ## 2 ; \
pslld $ ( 3 2 - 3 ) , x4 ## 2 ; \
por x4 ## 2 , x2 ## 2 ;
# define S ( S B O X , x0 , x1 , x2 , x3 , x4 ) \
SBOX ## _ 1 ( x0 ## 1 , x1 ## 1 , x2 ## 1 , x3 ## 1 , x4 ## 1 ) ; \
SBOX ## _ 2 ( x0 ## 1 , x1 ## 1 , x2 ## 1 , x3 ## 1 , x4 ## 1 ) ; \
SBOX ## _ 1 ( x0 ## 2 , x1 ## 2 , x2 ## 2 , x3 ## 2 , x4 ## 2 ) ; \
SBOX ## _ 2 ( x0 ## 2 , x1 ## 2 , x2 ## 2 , x3 ## 2 , x4 ## 2 ) ;
# define S P ( S B O X , x0 , x1 , x2 , x3 , x4 , i ) \
get_ k e y ( i , 0 , R K 0 ) ; \
SBOX ## _ 1 ( x0 ## 1 , x1 ## 1 , x2 ## 1 , x3 ## 1 , x4 ## 1 ) ; \
get_ k e y ( i , 2 , R K 2 ) ; \
SBOX ## _ 1 ( x0 ## 2 , x1 ## 2 , x2 ## 2 , x3 ## 2 , x4 ## 2 ) ; \
get_ k e y ( i , 3 , R K 3 ) ; \
SBOX ## _ 2 ( x0 ## 1 , x1 ## 1 , x2 ## 1 , x3 ## 1 , x4 ## 1 ) ; \
get_ k e y ( i , 1 , R K 1 ) ; \
SBOX ## _ 2 ( x0 ## 2 , x1 ## 2 , x2 ## 2 , x3 ## 2 , x4 ## 2 ) ; \
2011-12-20 12:58:06 +02: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 16:26:25 +02:00
movdqa x0 , t 2 ; \
2011-12-20 12:58:06 +02: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 16:26:25 +02: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 ) ;
2019-10-11 13:51:04 +02:00
SYM_ F U N C _ S T A R T ( _ _ s e r p e n t _ e n c _ b l k _ 8 w a y )
2011-11-09 16:26:25 +02:00
/ * input :
* % rdi : ctx, C T X
* % rsi : dst
* % rdx : src
* % rcx : bool, i f t r u e : x o r o u t p u t
* /
pcmpeqd R N O T , R N O T ;
leaq ( 4 * 4 * 4 ) ( % r d x ) , % r a x ;
read_ b l o c k s ( % r d x , R A 1 , R B 1 , R C 1 , R D 1 , R K 0 , R K 1 , R K 2 ) ;
read_ b l o c k s ( % r a x , R A 2 , R B 2 , R C 2 , R D 2 , R K 0 , R K 1 , R K 2 ) ;
K2 ( R A , R B , R C , R D , R E , 0 ) ;
S( S 0 , R A , R B , R C , R D , R E ) ; LK2(RC, RB, RD, RA, RE, 1);
S( S 1 , R C , R B , R D , R A , R E ) ; LK2(RE, RD, RA, RC, RB, 2);
S( S 2 , R E , R D , R A , R C , R B ) ; LK2(RB, RD, RE, RC, RA, 3);
S( S 3 , R B , R D , R E , R C , R A ) ; LK2(RC, RA, RD, RB, RE, 4);
S( S 4 , R C , R A , R D , R B , R E ) ; LK2(RA, RD, RB, RE, RC, 5);
S( S 5 , R A , R D , R B , R E , R C ) ; LK2(RC, RA, RD, RE, RB, 6);
S( S 6 , R C , R A , R D , R E , R B ) ; LK2(RD, RB, RA, RE, RC, 7);
S( S 7 , R D , R B , R A , R E , R C ) ; LK2(RC, RA, RE, RD, RB, 8);
S( S 0 , R C , R A , R E , R D , R B ) ; LK2(RE, RA, RD, RC, RB, 9);
S( S 1 , R E , R A , R D , R C , R B ) ; LK2(RB, RD, RC, RE, RA, 10);
S( S 2 , R B , R D , R C , R E , R A ) ; LK2(RA, RD, RB, RE, RC, 11);
S( S 3 , R A , R D , R B , R E , R C ) ; LK2(RE, RC, RD, RA, RB, 12);
S( S 4 , R E , R C , R D , R A , R B ) ; LK2(RC, RD, RA, RB, RE, 13);
S( S 5 , R C , R D , R A , R B , R E ) ; LK2(RE, RC, RD, RB, RA, 14);
S( S 6 , R E , R C , R D , R B , R A ) ; LK2(RD, RA, RC, RB, RE, 15);
S( S 7 , R D , R A , R C , R B , R E ) ; LK2(RE, RC, RB, RD, RA, 16);
S( S 0 , R E , R C , R B , R D , R A ) ; LK2(RB, RC, RD, RE, RA, 17);
S( S 1 , R B , R C , R D , R E , R A ) ; LK2(RA, RD, RE, RB, RC, 18);
S( S 2 , R A , R D , R E , R B , R C ) ; LK2(RC, RD, RA, RB, RE, 19);
S( S 3 , R C , R D , R A , R B , R E ) ; LK2(RB, RE, RD, RC, RA, 20);
S( S 4 , R B , R E , R D , R C , R A ) ; LK2(RE, RD, RC, RA, RB, 21);
S( S 5 , R E , R D , R C , R A , R B ) ; LK2(RB, RE, RD, RA, RC, 22);
S( S 6 , R B , R E , R D , R A , R C ) ; LK2(RD, RC, RE, RA, RB, 23);
S( S 7 , R D , R C , R E , R A , R B ) ; LK2(RB, RE, RA, RD, RC, 24);
S( S 0 , R B , R E , R A , R D , R C ) ; LK2(RA, RE, RD, RB, RC, 25);
S( S 1 , R A , R E , R D , R B , R C ) ; LK2(RC, RD, RB, RA, RE, 26);
S( S 2 , R C , R D , R B , R A , R E ) ; LK2(RE, RD, RC, RA, RB, 27);
S( S 3 , R E , R D , R C , R A , R B ) ; LK2(RA, RB, RD, RE, RC, 28);
S( S 4 , R A , R B , R D , R E , R C ) ; LK2(RB, RD, RE, RC, RA, 29);
S( S 5 , R B , R D , R E , R C , R A ) ; LK2(RA, RB, RD, RC, RE, 30);
S( S 6 , R A , R B , R D , R C , R E ) ; LK2(RD, RE, RB, RC, RA, 31);
S( S 7 , R D , R E , R B , R C , R A ) ; K2(RA, RB, RC, RD, RE, 32);
leaq ( 4 * 4 * 4 ) ( % r s i ) , % r a x ;
testb % c l , % c l ;
2013-01-19 13:39:36 +02:00
jnz . L _ _ e n c _ x o r8 ;
2011-11-09 16:26:25 +02:00
write_ b l o c k s ( % r s i , R A 1 , R B 1 , R C 1 , R D 1 , R K 0 , R K 1 , R K 2 ) ;
write_ b l o c k s ( % r a x , R A 2 , R B 2 , R C 2 , R D 2 , R K 0 , R K 1 , R K 2 ) ;
2021-12-04 14:43:40 +01:00
RET;
2011-11-09 16:26:25 +02:00
2013-01-19 13:39:36 +02:00
.L__enc_xor8 :
2011-11-09 16:26:25 +02:00
xor_ b l o c k s ( % r s i , R A 1 , R B 1 , R C 1 , R D 1 , R K 0 , R K 1 , R K 2 ) ;
xor_ b l o c k s ( % r a x , R A 2 , R B 2 , R C 2 , R D 2 , R K 0 , R K 1 , R K 2 ) ;
2021-12-04 14:43:40 +01:00
RET;
2019-10-11 13:51:04 +02:00
SYM_ F U N C _ E N D ( _ _ s e r p e n t _ e n c _ b l k _ 8 w a y )
2011-11-09 16:26:25 +02:00
2019-10-11 13:51:04 +02:00
SYM_ F U N C _ S T A R T ( s e r p e n t _ d e c _ b l k _ 8 w a y )
2011-11-09 16:26:25 +02:00
/ * input :
* % rdi : ctx, C T X
* % rsi : dst
* % rdx : src
* /
pcmpeqd R N O T , R N O T ;
leaq ( 4 * 4 * 4 ) ( % r d x ) , % r a x ;
read_ b l o c k s ( % r d x , R A 1 , R B 1 , R C 1 , R D 1 , R K 0 , R K 1 , R K 2 ) ;
read_ b l o c k s ( % r a x , R A 2 , R B 2 , R C 2 , R D 2 , R K 0 , R K 1 , R K 2 ) ;
K2 ( R A , R B , R C , R D , R E , 3 2 ) ;
SP( S I 7 , R A , R B , R C , R D , R E , 3 1 ) ; KL2(RB, RD, RA, RE, RC, 31);
SP( S I 6 , R B , R D , R A , R E , R C , 3 0 ) ; KL2(RA, RC, RE, RB, RD, 30);
SP( S I 5 , R A , R C , R E , R B , R D , 2 9 ) ; KL2(RC, RD, RA, RE, RB, 29);
SP( S I 4 , R C , R D , R A , R E , R B , 2 8 ) ; KL2(RC, RA, RB, RE, RD, 28);
SP( S I 3 , R C , R A , R B , R E , R D , 2 7 ) ; KL2(RB, RC, RD, RE, RA, 27);
SP( S I 2 , R B , R C , R D , R E , R A , 2 6 ) ; KL2(RC, RA, RE, RD, RB, 26);
SP( S I 1 , R C , R A , R E , R D , R B , 2 5 ) ; KL2(RB, RA, RE, RD, RC, 25);
SP( S I 0 , R B , R A , R E , R D , R C , 2 4 ) ; KL2(RE, RC, RA, RB, RD, 24);
SP( S I 7 , R E , R C , R A , R B , R D , 2 3 ) ; KL2(RC, RB, RE, RD, RA, 23);
SP( S I 6 , R C , R B , R E , R D , R A , 2 2 ) ; KL2(RE, RA, RD, RC, RB, 22);
SP( S I 5 , R E , R A , R D , R C , R B , 2 1 ) ; KL2(RA, RB, RE, RD, RC, 21);
SP( S I 4 , R A , R B , R E , R D , R C , 2 0 ) ; KL2(RA, RE, RC, RD, RB, 20);
SP( S I 3 , R A , R E , R C , R D , R B , 1 9 ) ; KL2(RC, RA, RB, RD, RE, 19);
SP( S I 2 , R C , R A , R B , R D , R E , 1 8 ) ; KL2(RA, RE, RD, RB, RC, 18);
SP( S I 1 , R A , R E , R D , R B , R C , 1 7 ) ; KL2(RC, RE, RD, RB, RA, 17);
SP( S I 0 , R C , R E , R D , R B , R A , 1 6 ) ; KL2(RD, RA, RE, RC, RB, 16);
SP( S I 7 , R D , R A , R E , R C , R B , 1 5 ) ; KL2(RA, RC, RD, RB, RE, 15);
SP( S I 6 , R A , R C , R D , R B , R E , 1 4 ) ; KL2(RD, RE, RB, RA, RC, 14);
SP( S I 5 , R D , R E , R B , R A , R C , 1 3 ) ; KL2(RE, RC, RD, RB, RA, 13);
SP( S I 4 , R E , R C , R D , R B , R A , 1 2 ) ; KL2(RE, RD, RA, RB, RC, 12);
SP( S I 3 , R E , R D , R A , R B , R C , 1 1 ) ; KL2(RA, RE, RC, RB, RD, 11);
SP( S I 2 , R A , R E , R C , R B , R D , 1 0 ) ; KL2(RE, RD, RB, RC, RA, 10);
SP( S I 1 , R E , R D , R B , R C , R A , 9 ) ; KL2(RA, RD, RB, RC, RE, 9);
SP( S I 0 , R A , R D , R B , R C , R E , 8 ) ; KL2(RB, RE, RD, RA, RC, 8);
SP( S I 7 , R B , R E , R D , R A , R C , 7 ) ; KL2(RE, RA, RB, RC, RD, 7);
SP( S I 6 , R E , R A , R B , R C , R D , 6 ) ; KL2(RB, RD, RC, RE, RA, 6);
SP( S I 5 , R B , R D , R C , R E , R A , 5 ) ; KL2(RD, RA, RB, RC, RE, 5);
SP( S I 4 , R D , R A , R B , R C , R E , 4 ) ; KL2(RD, RB, RE, RC, RA, 4);
SP( S I 3 , R D , R B , R E , R C , R A , 3 ) ; KL2(RE, RD, RA, RC, RB, 3);
SP( S I 2 , R E , R D , R A , R C , R B , 2 ) ; KL2(RD, RB, RC, RA, RE, 2);
SP( S I 1 , R D , R B , R C , R A , R E , 1 ) ; KL2(RE, RB, RC, RA, RD, 1);
S( S I 0 , R E , R B , R C , R A , R D ) ; K2(RC, RD, RB, RE, RA, 0);
leaq ( 4 * 4 * 4 ) ( % r s i ) , % r a x ;
write_ b l o c k s ( % r s i , R C 1 , R D 1 , R B 1 , R E 1 , R K 0 , R K 1 , R K 2 ) ;
write_ b l o c k s ( % r a x , R C 2 , R D 2 , R B 2 , R E 2 , R K 0 , R K 1 , R K 2 ) ;
2021-12-04 14:43:40 +01:00
RET;
2019-10-11 13:51:04 +02:00
SYM_ F U N C _ E N D ( s e r p e n t _ d e c _ b l k _ 8 w a y )