2015-02-22 11:59:49 +03:00
/ *
* Fast A E S i m p l e m e n t a t i o n f o r S P E i n s t r u c t i o n s e t ( P P C )
*
* This c o d e m a k e s u s e o f t h e S P E S I M D i n s t r u c t i o n s e t a s d e f i n e d i n
* http : / / cache. f r e e s c a l e . c o m / f i l e s / 3 2 b i t / d o c / r e f _ m a n u a l / S P E P I M . p d f
* Implementation i s b a s e d o n o p t i m i z a t i o n g u i d e n o t e s f r o m
* http : / / cache. f r e e s c a l e . c o m / f i l e s / 3 2 b i t / d o c / a p p _ n o t e / A N 2 6 6 5 . p d f
*
* Copyright ( c ) 2 0 1 5 M a r k u s S t o c k h a u s e n < s t o c k h a u s e n @collogia.de>
*
* 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
* under 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 t h e F r e e
* Software F o u n d a t i o n ; either version 2 of the License, or (at your option)
* any l a t e r v e r s i o n .
*
* /
# include < a s m / p p c _ a s m . h >
# include " a e s - s p e - r e g s . h "
# define E A D ( i n , b p o s ) \
rlwimi r T 0 ,i n ,2 8 - ( ( b p o s + 3 ) % 4 ) * 8 ,2 0 ,2 7 ;
# define D A D ( i n , b p o s ) \
rlwimi r T 1 ,i n ,2 4 - ( ( b p o s + 3 ) % 4 ) * 8 ,2 4 ,3 1 ;
# define L W H ( o u t , o f f ) \
evlwwsplat o u t ,o f f ( r T 0 ) ; /* load word high */
# define L W L ( o u t , o f f ) \
lwz o u t ,o f f ( r T 0 ) ; /* load word low */
# define L B Z ( o u t , t a b , o f f ) \
lbz o u t ,o f f ( t a b ) ; /* load byte */
# define L A H ( o u t , i n , b p o s , o f f ) \
EAD( i n , b p o s ) / * c a l c a d d r + l o a d w o r d h i g h * / \
LWH( o u t , o f f )
# define L A L ( o u t , i n , b p o s , o f f ) \
EAD( i n , b p o s ) / * c a l c a d d r + l o a d w o r d l o w * / \
LWL( o u t , o f f )
# define L A E ( o u t , i n , b p o s ) \
EAD( i n , b p o s ) / * c a l c a d d r + l o a d e n c b y t e * / \
LBZ( o u t , r T 0 , 8 )
# define L B E ( o u t ) \
LBZ( o u t , r T 0 , 8 ) / * l o a d e n c b y t e * /
# define L A D ( o u t , i n , b p o s ) \
DAD( i n , b p o s ) / * c a l c a d d r + l o a d d e c b y t e * / \
LBZ( o u t , r T 1 , 0 )
# define L B D ( o u t ) \
LBZ( o u t , r T 1 , 0 )
/ *
* ppc_encrypt_block : The c e n t r a l e n c r y p t i o n f u n c t i o n f o r a s i n g l e 1 6 b y t e s
* block. I t d o e s n o s t a c k h a n d l i n g o r r e g i s t e r s a v i n g t o s u p p o r t f a s t c a l l s
* via b l / b l r . I t e x p e c t s t h a t c a l l e r h a s p r e - x o r e d i n p u t d a t a w i t h f i r s t
* 4 words o f e n c r y p t i o n k e y i n t o r D 0 - r D 3 . P o i n t e r / c o u n t e r r e g i s t e r s m u s t
* have a l s o b e e n s e t u p b e f o r e ( r T 0 , r K P , C T R ) . O u t p u t i s s t o r e d i n r D 0 - r D 3
2016-02-24 21:51:11 +03:00
* and r W 0 - r W 3 a n d c a l l e r m u s t e x e c u t e a f i n a l x o r o n t h e o u t p u t r e g i s t e r s .
2015-02-22 11:59:49 +03:00
* All w o r k i n g r e g i s t e r s r D 0 - r D 3 & r W 0 - r W 7 a r e o v e r w r i t t e n d u r i n g p r o c e s s i n g .
*
* /
_ GLOBAL( p p c _ e n c r y p t _ b l o c k )
LAH( r W 4 , r D 1 , 2 , 4 )
LAH( r W 6 , r D 0 , 3 , 0 )
LAH( r W 3 , r D 0 , 1 , 8 )
ppc_encrypt_block_loop :
LAH( r W 0 , r D 3 , 0 , 1 2 )
LAL( r W 0 , r D 0 , 0 , 1 2 )
LAH( r W 1 , r D 1 , 0 , 1 2 )
LAH( r W 2 , r D 2 , 1 , 8 )
LAL( r W 2 , r D 3 , 1 , 8 )
LAL( r W 3 , r D 1 , 1 , 8 )
LAL( r W 4 , r D 2 , 2 , 4 )
LAL( r W 6 , r D 1 , 3 , 0 )
LAH( r W 5 , r D 3 , 2 , 4 )
LAL( r W 5 , r D 0 , 2 , 4 )
LAH( r W 7 , r D 2 , 3 , 0 )
evldw r D 1 ,1 6 ( r K P )
EAD( r D 3 , 3 )
evxor r W 2 ,r W 2 ,r W 4
LWL( r W 7 , 0 )
evxor r W 2 ,r W 2 ,r W 6
EAD( r D 2 , 0 )
evxor r D 1 ,r D 1 ,r W 2
LWL( r W 1 , 1 2 )
evxor r D 1 ,r D 1 ,r W 0
evldw r D 3 ,2 4 ( r K P )
evmergehi r D 0 ,r D 0 ,r D 1
EAD( r D 1 , 2 )
evxor r W 3 ,r W 3 ,r W 5
LWH( r W 4 , 4 )
evxor r W 3 ,r W 3 ,r W 7
EAD( r D 0 , 3 )
evxor r D 3 ,r D 3 ,r W 3
LWH( r W 6 , 0 )
evxor r D 3 ,r D 3 ,r W 1
EAD( r D 0 , 1 )
evmergehi r D 2 ,r D 2 ,r D 3
LWH( r W 3 , 8 )
LAH( r W 0 , r D 3 , 0 , 1 2 )
LAL( r W 0 , r D 0 , 0 , 1 2 )
LAH( r W 1 , r D 1 , 0 , 1 2 )
LAH( r W 2 , r D 2 , 1 , 8 )
LAL( r W 2 , r D 3 , 1 , 8 )
LAL( r W 3 , r D 1 , 1 , 8 )
LAL( r W 4 , r D 2 , 2 , 4 )
LAL( r W 6 , r D 1 , 3 , 0 )
LAH( r W 5 , r D 3 , 2 , 4 )
LAL( r W 5 , r D 0 , 2 , 4 )
LAH( r W 7 , r D 2 , 3 , 0 )
evldw r D 1 ,3 2 ( r K P )
EAD( r D 3 , 3 )
evxor r W 2 ,r W 2 ,r W 4
LWL( r W 7 , 0 )
evxor r W 2 ,r W 2 ,r W 6
EAD( r D 2 , 0 )
evxor r D 1 ,r D 1 ,r W 2
LWL( r W 1 , 1 2 )
evxor r D 1 ,r D 1 ,r W 0
evldw r D 3 ,4 0 ( r K P )
evmergehi r D 0 ,r D 0 ,r D 1
EAD( r D 1 , 2 )
evxor r W 3 ,r W 3 ,r W 5
LWH( r W 4 , 4 )
evxor r W 3 ,r W 3 ,r W 7
EAD( r D 0 , 3 )
evxor r D 3 ,r D 3 ,r W 3
LWH( r W 6 , 0 )
evxor r D 3 ,r D 3 ,r W 1
EAD( r D 0 , 1 )
evmergehi r D 2 ,r D 2 ,r D 3
LWH( r W 3 , 8 )
addi r K P ,r K P ,3 2
bdnz p p c _ e n c r y p t _ b l o c k _ l o o p
LAH( r W 0 , r D 3 , 0 , 1 2 )
LAL( r W 0 , r D 0 , 0 , 1 2 )
LAH( r W 1 , r D 1 , 0 , 1 2 )
LAH( r W 2 , r D 2 , 1 , 8 )
LAL( r W 2 , r D 3 , 1 , 8 )
LAL( r W 3 , r D 1 , 1 , 8 )
LAL( r W 4 , r D 2 , 2 , 4 )
LAH( r W 5 , r D 3 , 2 , 4 )
LAL( r W 6 , r D 1 , 3 , 0 )
LAL( r W 5 , r D 0 , 2 , 4 )
LAH( r W 7 , r D 2 , 3 , 0 )
evldw r D 1 ,1 6 ( r K P )
EAD( r D 3 , 3 )
evxor r W 2 ,r W 2 ,r W 4
LWL( r W 7 , 0 )
evxor r W 2 ,r W 2 ,r W 6
EAD( r D 2 , 0 )
evxor r D 1 ,r D 1 ,r W 2
LWL( r W 1 , 1 2 )
evxor r D 1 ,r D 1 ,r W 0
evldw r D 3 ,2 4 ( r K P )
evmergehi r D 0 ,r D 0 ,r D 1
EAD( r D 1 , 0 )
evxor r W 3 ,r W 3 ,r W 5
LBE( r W 2 )
evxor r W 3 ,r W 3 ,r W 7
EAD( r D 0 , 1 )
evxor r D 3 ,r D 3 ,r W 3
LBE( r W 6 )
evxor r D 3 ,r D 3 ,r W 1
EAD( r D 0 , 0 )
evmergehi r D 2 ,r D 2 ,r D 3
LBE( r W 1 )
LAE( r W 0 , r D 3 , 0 )
LAE( r W 1 , r D 0 , 0 )
LAE( r W 4 , r D 2 , 1 )
LAE( r W 5 , r D 3 , 1 )
LAE( r W 3 , r D 2 , 0 )
LAE( r W 7 , r D 1 , 1 )
rlwimi r W 0 ,r W 4 ,8 ,1 6 ,2 3
rlwimi r W 1 ,r W 5 ,8 ,1 6 ,2 3
LAE( r W 4 , r D 1 , 2 )
LAE( r W 5 , r D 2 , 2 )
rlwimi r W 2 ,r W 6 ,8 ,1 6 ,2 3
rlwimi r W 3 ,r W 7 ,8 ,1 6 ,2 3
LAE( r W 6 , r D 3 , 2 )
LAE( r W 7 , r D 0 , 2 )
rlwimi r W 0 ,r W 4 ,1 6 ,8 ,1 5
rlwimi r W 1 ,r W 5 ,1 6 ,8 ,1 5
LAE( r W 4 , r D 0 , 3 )
LAE( r W 5 , r D 1 , 3 )
rlwimi r W 2 ,r W 6 ,1 6 ,8 ,1 5
lwz r D 0 ,3 2 ( r K P )
rlwimi r W 3 ,r W 7 ,1 6 ,8 ,1 5
lwz r D 1 ,3 6 ( r K P )
LAE( r W 6 , r D 2 , 3 )
LAE( r W 7 , r D 3 , 3 )
rlwimi r W 0 ,r W 4 ,2 4 ,0 ,7
lwz r D 2 ,4 0 ( r K P )
rlwimi r W 1 ,r W 5 ,2 4 ,0 ,7
lwz r D 3 ,4 4 ( r K P )
rlwimi r W 2 ,r W 6 ,2 4 ,0 ,7
rlwimi r W 3 ,r W 7 ,2 4 ,0 ,7
blr
/ *
* ppc_decrypt_block : The c e n t r a l d e c r y p t i o n f u n c t i o n f o r a s i n g l e 1 6 b y t e s
* block. I t d o e s n o s t a c k h a n d l i n g o r r e g i s t e r s a v i n g t o s u p p o r t f a s t c a l l s
* via b l / b l r . I t e x p e c t s t h a t c a l l e r h a s p r e - x o r e d i n p u t d a t a w i t h f i r s t
* 4 words o f e n c r y p t i o n k e y i n t o r D 0 - r D 3 . P o i n t e r / c o u n t e r r e g i s t e r s m u s t
* have a l s o b e e n s e t u p b e f o r e ( r T 0 , r K P , C T R ) . O u t p u t i s s t o r e d i n r D 0 - r D 3
2016-02-24 21:51:11 +03:00
* and r W 0 - r W 3 a n d c a l l e r m u s t e x e c u t e a f i n a l x o r o n t h e o u t p u t r e g i s t e r s .
2015-02-22 11:59:49 +03:00
* All w o r k i n g r e g i s t e r s r D 0 - r D 3 & r W 0 - r W 7 a r e o v e r w r i t t e n d u r i n g p r o c e s s i n g .
*
* /
_ GLOBAL( p p c _ d e c r y p t _ b l o c k )
LAH( r W 0 , r D 1 , 0 , 1 2 )
LAH( r W 6 , r D 0 , 3 , 0 )
LAH( r W 3 , r D 0 , 1 , 8 )
ppc_decrypt_block_loop :
LAH( r W 1 , r D 3 , 0 , 1 2 )
LAL( r W 0 , r D 2 , 0 , 1 2 )
LAH( r W 2 , r D 2 , 1 , 8 )
LAL( r W 2 , r D 3 , 1 , 8 )
LAH( r W 4 , r D 3 , 2 , 4 )
LAL( r W 4 , r D 0 , 2 , 4 )
LAL( r W 6 , r D 1 , 3 , 0 )
LAH( r W 5 , r D 1 , 2 , 4 )
LAH( r W 7 , r D 2 , 3 , 0 )
LAL( r W 7 , r D 3 , 3 , 0 )
LAL( r W 3 , r D 1 , 1 , 8 )
evldw r D 1 ,1 6 ( r K P )
EAD( r D 0 , 0 )
evxor r W 4 ,r W 4 ,r W 6
LWL( r W 1 , 1 2 )
evxor r W 0 ,r W 0 ,r W 4
EAD( r D 2 , 2 )
evxor r W 0 ,r W 0 ,r W 2
LWL( r W 5 , 4 )
evxor r D 1 ,r D 1 ,r W 0
evldw r D 3 ,2 4 ( r K P )
evmergehi r D 0 ,r D 0 ,r D 1
EAD( r D 1 , 0 )
evxor r W 3 ,r W 3 ,r W 7
LWH( r W 0 , 1 2 )
evxor r W 3 ,r W 3 ,r W 1
EAD( r D 0 , 3 )
evxor r D 3 ,r D 3 ,r W 3
LWH( r W 6 , 0 )
evxor r D 3 ,r D 3 ,r W 5
EAD( r D 0 , 1 )
evmergehi r D 2 ,r D 2 ,r D 3
LWH( r W 3 , 8 )
LAH( r W 1 , r D 3 , 0 , 1 2 )
LAL( r W 0 , r D 2 , 0 , 1 2 )
LAH( r W 2 , r D 2 , 1 , 8 )
LAL( r W 2 , r D 3 , 1 , 8 )
LAH( r W 4 , r D 3 , 2 , 4 )
LAL( r W 4 , r D 0 , 2 , 4 )
LAL( r W 6 , r D 1 , 3 , 0 )
LAH( r W 5 , r D 1 , 2 , 4 )
LAH( r W 7 , r D 2 , 3 , 0 )
LAL( r W 7 , r D 3 , 3 , 0 )
LAL( r W 3 , r D 1 , 1 , 8 )
evldw r D 1 ,3 2 ( r K P )
EAD( r D 0 , 0 )
evxor r W 4 ,r W 4 ,r W 6
LWL( r W 1 , 1 2 )
evxor r W 0 ,r W 0 ,r W 4
EAD( r D 2 , 2 )
evxor r W 0 ,r W 0 ,r W 2
LWL( r W 5 , 4 )
evxor r D 1 ,r D 1 ,r W 0
evldw r D 3 ,4 0 ( r K P )
evmergehi r D 0 ,r D 0 ,r D 1
EAD( r D 1 , 0 )
evxor r W 3 ,r W 3 ,r W 7
LWH( r W 0 , 1 2 )
evxor r W 3 ,r W 3 ,r W 1
EAD( r D 0 , 3 )
evxor r D 3 ,r D 3 ,r W 3
LWH( r W 6 , 0 )
evxor r D 3 ,r D 3 ,r W 5
EAD( r D 0 , 1 )
evmergehi r D 2 ,r D 2 ,r D 3
LWH( r W 3 , 8 )
addi r K P ,r K P ,3 2
bdnz p p c _ d e c r y p t _ b l o c k _ l o o p
LAH( r W 1 , r D 3 , 0 , 1 2 )
LAL( r W 0 , r D 2 , 0 , 1 2 )
LAH( r W 2 , r D 2 , 1 , 8 )
LAL( r W 2 , r D 3 , 1 , 8 )
LAH( r W 4 , r D 3 , 2 , 4 )
LAL( r W 4 , r D 0 , 2 , 4 )
LAL( r W 6 , r D 1 , 3 , 0 )
LAH( r W 5 , r D 1 , 2 , 4 )
LAH( r W 7 , r D 2 , 3 , 0 )
LAL( r W 7 , r D 3 , 3 , 0 )
LAL( r W 3 , r D 1 , 1 , 8 )
evldw r D 1 ,1 6 ( r K P )
EAD( r D 0 , 0 )
evxor r W 4 ,r W 4 ,r W 6
LWL( r W 1 , 1 2 )
evxor r W 0 ,r W 0 ,r W 4
EAD( r D 2 , 2 )
evxor r W 0 ,r W 0 ,r W 2
LWL( r W 5 , 4 )
evxor r D 1 ,r D 1 ,r W 0
evldw r D 3 ,2 4 ( r K P )
evmergehi r D 0 ,r D 0 ,r D 1
DAD( r D 1 , 0 )
evxor r W 3 ,r W 3 ,r W 7
LBD( r W 0 )
evxor r W 3 ,r W 3 ,r W 1
DAD( r D 0 , 1 )
evxor r D 3 ,r D 3 ,r W 3
LBD( r W 6 )
evxor r D 3 ,r D 3 ,r W 5
DAD( r D 0 , 0 )
evmergehi r D 2 ,r D 2 ,r D 3
LBD( r W 3 )
LAD( r W 2 , r D 3 , 0 )
LAD( r W 1 , r D 2 , 0 )
LAD( r W 4 , r D 2 , 1 )
LAD( r W 5 , r D 3 , 1 )
LAD( r W 7 , r D 1 , 1 )
rlwimi r W 0 ,r W 4 ,8 ,1 6 ,2 3
rlwimi r W 1 ,r W 5 ,8 ,1 6 ,2 3
LAD( r W 4 , r D 3 , 2 )
LAD( r W 5 , r D 0 , 2 )
rlwimi r W 2 ,r W 6 ,8 ,1 6 ,2 3
rlwimi r W 3 ,r W 7 ,8 ,1 6 ,2 3
LAD( r W 6 , r D 1 , 2 )
LAD( r W 7 , r D 2 , 2 )
rlwimi r W 0 ,r W 4 ,1 6 ,8 ,1 5
rlwimi r W 1 ,r W 5 ,1 6 ,8 ,1 5
LAD( r W 4 , r D 0 , 3 )
LAD( r W 5 , r D 1 , 3 )
rlwimi r W 2 ,r W 6 ,1 6 ,8 ,1 5
lwz r D 0 ,3 2 ( r K P )
rlwimi r W 3 ,r W 7 ,1 6 ,8 ,1 5
lwz r D 1 ,3 6 ( r K P )
LAD( r W 6 , r D 2 , 3 )
LAD( r W 7 , r D 3 , 3 )
rlwimi r W 0 ,r W 4 ,2 4 ,0 ,7
lwz r D 2 ,4 0 ( r K P )
rlwimi r W 1 ,r W 5 ,2 4 ,0 ,7
lwz r D 3 ,4 4 ( r K P )
rlwimi r W 2 ,r W 6 ,2 4 ,0 ,7
rlwimi r W 3 ,r W 7 ,2 4 ,0 ,7
blr