2007-12-10 15:52:56 +08:00
# salsa2 0 _ p m . s v e r s i o n 2 0 0 5 1 2 2 9
# D. J . B e r n s t e i n
# Public d o m a i n .
2013-01-19 13:39:31 +02:00
# include < l i n u x / l i n k a g e . h >
2007-12-10 15:52:56 +08:00
.text
2013-01-19 13:39:31 +02:00
# enter s a l s a20 _ e n c r y p t _ b y t e s
ENTRY( s a l s a20 _ e n c r y p t _ b y t e s )
2007-12-10 15:52:56 +08:00
mov % e s p ,% e a x
and $ 3 1 ,% e a x
add $ 2 5 6 ,% e a x
sub % e a x ,% e s p
# eax_ s t a c k = e a x
movl % e a x ,8 0 ( % e s p )
# ebx_ s t a c k = e b x
movl % e b x ,8 4 ( % e s p )
# esi_ s t a c k = e s i
movl % e s i ,8 8 ( % e s p )
# edi_ s t a c k = e d i
movl % e d i ,9 2 ( % e s p )
# ebp_ s t a c k = e b p
movl % e b p ,9 6 ( % e s p )
# x = a r g 1
movl 4 ( % e s p ,% e a x ) ,% e d x
# m = a r g 2
movl 8 ( % e s p ,% e a x ) ,% e s i
# out = a r g 3
movl 1 2 ( % e s p ,% e a x ) ,% e d i
# bytes = a r g 4
movl 1 6 ( % e s p ,% e a x ) ,% e b x
# bytes - = 0
sub $ 0 ,% e b x
# goto d o n e i f u n s i g n e d < =
jbe . _ d o n e
._start :
# in0 = * ( u i n t 3 2 * ) ( x + 0 )
movl 0 ( % e d x ) ,% e a x
# in1 = * ( u i n t 3 2 * ) ( x + 4 )
movl 4 ( % e d x ) ,% e c x
# in2 = * ( u i n t 3 2 * ) ( x + 8 )
movl 8 ( % e d x ) ,% e b p
# j0 = i n 0
movl % e a x ,1 6 4 ( % e s p )
# in3 = * ( u i n t 3 2 * ) ( x + 1 2 )
movl 1 2 ( % e d x ) ,% e a x
# j1 = i n 1
movl % e c x ,1 6 8 ( % e s p )
# in4 = * ( u i n t 3 2 * ) ( x + 1 6 )
movl 1 6 ( % e d x ) ,% e c x
# j2 = i n 2
movl % e b p ,1 7 2 ( % e s p )
# in5 = * ( u i n t 3 2 * ) ( x + 2 0 )
movl 2 0 ( % e d x ) ,% e b p
# j3 = i n 3
movl % e a x ,1 7 6 ( % e s p )
# in6 = * ( u i n t 3 2 * ) ( x + 2 4 )
movl 2 4 ( % e d x ) ,% e a x
# j4 = i n 4
movl % e c x ,1 8 0 ( % e s p )
# in7 = * ( u i n t 3 2 * ) ( x + 2 8 )
movl 2 8 ( % e d x ) ,% e c x
# j5 = i n 5
movl % e b p ,1 8 4 ( % e s p )
# in8 = * ( u i n t 3 2 * ) ( x + 3 2 )
movl 3 2 ( % e d x ) ,% e b p
# j6 = i n 6
movl % e a x ,1 8 8 ( % e s p )
# in9 = * ( u i n t 3 2 * ) ( x + 3 6 )
movl 3 6 ( % e d x ) ,% e a x
# j7 = i n 7
movl % e c x ,1 9 2 ( % e s p )
# in1 0 = * ( u i n t 3 2 * ) ( x + 4 0 )
movl 4 0 ( % e d x ) ,% e c x
# j8 = i n 8
movl % e b p ,1 9 6 ( % e s p )
# in1 1 = * ( u i n t 3 2 * ) ( x + 4 4 )
movl 4 4 ( % e d x ) ,% e b p
# j9 = i n 9
movl % e a x ,2 0 0 ( % e s p )
# in1 2 = * ( u i n t 3 2 * ) ( x + 4 8 )
movl 4 8 ( % e d x ) ,% e a x
# j1 0 = i n 1 0
movl % e c x ,2 0 4 ( % e s p )
# in1 3 = * ( u i n t 3 2 * ) ( x + 5 2 )
movl 5 2 ( % e d x ) ,% e c x
# j1 1 = i n 1 1
movl % e b p ,2 0 8 ( % e s p )
# in1 4 = * ( u i n t 3 2 * ) ( x + 5 6 )
movl 5 6 ( % e d x ) ,% e b p
# j1 2 = i n 1 2
movl % e a x ,2 1 2 ( % e s p )
# in1 5 = * ( u i n t 3 2 * ) ( x + 6 0 )
movl 6 0 ( % e d x ) ,% e a x
# j1 3 = i n 1 3
movl % e c x ,2 1 6 ( % e s p )
# j1 4 = i n 1 4
movl % e b p ,2 2 0 ( % e s p )
# j1 5 = i n 1 5
movl % e a x ,2 2 4 ( % e s p )
# x_ b a c k u p = x
movl % e d x ,6 4 ( % e s p )
._bytesatleast1 :
# bytes - 6 4
cmp $ 6 4 ,% e b x
# goto n o c o p y i f u n s i g n e d > =
jae . _ n o c o p y
# ctarget = o u t
movl % e d i ,2 2 8 ( % e s p )
# out = & t m p
leal 0 ( % e s p ) ,% e d i
# i = b y t e s
mov % e b x ,% e c x
# while ( i ) { * o u t + + = * m + + ; --i }
rep m o v s b
# out = & t m p
leal 0 ( % e s p ) ,% e d i
# m = & t m p
leal 0 ( % e s p ) ,% e s i
._nocopy :
# out_ b a c k u p = o u t
movl % e d i ,7 2 ( % e s p )
# m_ b a c k u p = m
movl % e s i ,6 8 ( % e s p )
# bytes_ b a c k u p = b y t e s
movl % e b x ,7 6 ( % e s p )
# in0 = j 0
movl 1 6 4 ( % e s p ) ,% e a x
# in1 = j 1
movl 1 6 8 ( % e s p ) ,% e c x
# in2 = j 2
movl 1 7 2 ( % e s p ) ,% e d x
# in3 = j 3
movl 1 7 6 ( % e s p ) ,% e b x
# x0 = i n 0
movl % e a x ,1 0 0 ( % e s p )
# x1 = i n 1
movl % e c x ,1 0 4 ( % e s p )
# x2 = i n 2
movl % e d x ,1 0 8 ( % e s p )
# x3 = i n 3
movl % e b x ,1 1 2 ( % e s p )
# in4 = j 4
movl 1 8 0 ( % e s p ) ,% e a x
# in5 = j 5
movl 1 8 4 ( % e s p ) ,% e c x
# in6 = j 6
movl 1 8 8 ( % e s p ) ,% e d x
# in7 = j 7
movl 1 9 2 ( % e s p ) ,% e b x
# x4 = i n 4
movl % e a x ,1 1 6 ( % e s p )
# x5 = i n 5
movl % e c x ,1 2 0 ( % e s p )
# x6 = i n 6
movl % e d x ,1 2 4 ( % e s p )
# x7 = i n 7
movl % e b x ,1 2 8 ( % e s p )
# in8 = j 8
movl 1 9 6 ( % e s p ) ,% e a x
# in9 = j 9
movl 2 0 0 ( % e s p ) ,% e c x
# in1 0 = j 1 0
movl 2 0 4 ( % e s p ) ,% e d x
# in1 1 = j 1 1
movl 2 0 8 ( % e s p ) ,% e b x
# x8 = i n 8
movl % e a x ,1 3 2 ( % e s p )
# x9 = i n 9
movl % e c x ,1 3 6 ( % e s p )
# x1 0 = i n 1 0
movl % e d x ,1 4 0 ( % e s p )
# x1 1 = i n 1 1
movl % e b x ,1 4 4 ( % e s p )
# in1 2 = j 1 2
movl 2 1 2 ( % e s p ) ,% e a x
# in1 3 = j 1 3
movl 2 1 6 ( % e s p ) ,% e c x
# in1 4 = j 1 4
movl 2 2 0 ( % e s p ) ,% e d x
# in1 5 = j 1 5
movl 2 2 4 ( % e s p ) ,% e b x
# x1 2 = i n 1 2
movl % e a x ,1 4 8 ( % e s p )
# x1 3 = i n 1 3
movl % e c x ,1 5 2 ( % e s p )
# x1 4 = i n 1 4
movl % e d x ,1 5 6 ( % e s p )
# x1 5 = i n 1 5
movl % e b x ,1 6 0 ( % e s p )
# i = 2 0
mov $ 2 0 ,% e b p
# p = x0
movl 1 0 0 ( % e s p ) ,% e a x
# s = x5
movl 1 2 0 ( % e s p ) ,% e c x
# t = x10
movl 1 4 0 ( % e s p ) ,% e d x
# w = x15
movl 1 6 0 ( % e s p ) ,% e b x
._mainloop :
# x0 = p
movl % e a x ,1 0 0 ( % e s p )
# x1 0 = t
movl % e d x ,1 4 0 ( % e s p )
# p + = x12
addl 1 4 8 ( % e s p ) ,% e a x
# x5 = s
movl % e c x ,1 2 0 ( % e s p )
# t + = x6
addl 1 2 4 ( % e s p ) ,% e d x
# x1 5 = w
movl % e b x ,1 6 0 ( % e s p )
# r = x1
movl 1 0 4 ( % e s p ) ,% e s i
# r + = s
add % e c x ,% e s i
# v = x11
movl 1 4 4 ( % e s p ) ,% e d i
# v + = w
add % e b x ,% e d i
# p < < < = 7
rol $ 7 ,% e a x
# p ^ = x4
xorl 1 1 6 ( % e s p ) ,% e a x
# t < < < = 7
rol $ 7 ,% e d x
# t ^ = x14
xorl 1 5 6 ( % e s p ) ,% e d x
# r < < < = 7
rol $ 7 ,% e s i
# r ^ = x9
xorl 1 3 6 ( % e s p ) ,% e s i
# v < < < = 7
rol $ 7 ,% e d i
# v ^ = x3
xorl 1 1 2 ( % e s p ) ,% e d i
# x4 = p
movl % e a x ,1 1 6 ( % e s p )
# x1 4 = t
movl % e d x ,1 5 6 ( % e s p )
# p + = x0
addl 1 0 0 ( % e s p ) ,% e a x
# x9 = r
movl % e s i ,1 3 6 ( % e s p )
# t + = x10
addl 1 4 0 ( % e s p ) ,% e d x
# x3 = v
movl % e d i ,1 1 2 ( % e s p )
# p < < < = 9
rol $ 9 ,% e a x
# p ^ = x8
xorl 1 3 2 ( % e s p ) ,% e a x
# t < < < = 9
rol $ 9 ,% e d x
# t ^ = x2
xorl 1 0 8 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 9
rol $ 9 ,% e c x
# s ^ = x13
xorl 1 5 2 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 9
rol $ 9 ,% e b x
# w ^ = x7
xorl 1 2 8 ( % e s p ) ,% e b x
# x8 = p
movl % e a x ,1 3 2 ( % e s p )
# x2 = t
movl % e d x ,1 0 8 ( % e s p )
# p + = x4
addl 1 1 6 ( % e s p ) ,% e a x
# x1 3 = s
movl % e c x ,1 5 2 ( % e s p )
# t + = x14
addl 1 5 6 ( % e s p ) ,% e d x
# x7 = w
movl % e b x ,1 2 8 ( % e s p )
# p < < < = 1 3
rol $ 1 3 ,% e a x
# p ^ = x12
xorl 1 4 8 ( % e s p ) ,% e a x
# t < < < = 1 3
rol $ 1 3 ,% e d x
# t ^ = x6
xorl 1 2 4 ( % e s p ) ,% e d x
# r + = s
add % e c x ,% e s i
# r < < < = 1 3
rol $ 1 3 ,% e s i
# r ^ = x1
xorl 1 0 4 ( % e s p ) ,% e s i
# v + = w
add % e b x ,% e d i
# v < < < = 1 3
rol $ 1 3 ,% e d i
# v ^ = x11
xorl 1 4 4 ( % e s p ) ,% e d i
# x1 2 = p
movl % e a x ,1 4 8 ( % e s p )
# x6 = t
movl % e d x ,1 2 4 ( % e s p )
# p + = x8
addl 1 3 2 ( % e s p ) ,% e a x
# x1 = r
movl % e s i ,1 0 4 ( % e s p )
# t + = x2
addl 1 0 8 ( % e s p ) ,% e d x
# x1 1 = v
movl % e d i ,1 4 4 ( % e s p )
# p < < < = 1 8
rol $ 1 8 ,% e a x
# p ^ = x0
xorl 1 0 0 ( % e s p ) ,% e a x
# t < < < = 1 8
rol $ 1 8 ,% e d x
# t ^ = x10
xorl 1 4 0 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 1 8
rol $ 1 8 ,% e c x
# s ^ = x5
xorl 1 2 0 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 1 8
rol $ 1 8 ,% e b x
# w ^ = x15
xorl 1 6 0 ( % e s p ) ,% e b x
# x0 = p
movl % e a x ,1 0 0 ( % e s p )
# x1 0 = t
movl % e d x ,1 4 0 ( % e s p )
# p + = x3
addl 1 1 2 ( % e s p ) ,% e a x
# p < < < = 7
rol $ 7 ,% e a x
# x5 = s
movl % e c x ,1 2 0 ( % e s p )
# t + = x9
addl 1 3 6 ( % e s p ) ,% e d x
# x1 5 = w
movl % e b x ,1 6 0 ( % e s p )
# r = x4
movl 1 1 6 ( % e s p ) ,% e s i
# r + = s
add % e c x ,% e s i
# v = x14
movl 1 5 6 ( % e s p ) ,% e d i
# v + = w
add % e b x ,% e d i
# p ^ = x1
xorl 1 0 4 ( % e s p ) ,% e a x
# t < < < = 7
rol $ 7 ,% e d x
# t ^ = x11
xorl 1 4 4 ( % e s p ) ,% e d x
# r < < < = 7
rol $ 7 ,% e s i
# r ^ = x6
xorl 1 2 4 ( % e s p ) ,% e s i
# v < < < = 7
rol $ 7 ,% e d i
# v ^ = x12
xorl 1 4 8 ( % e s p ) ,% e d i
# x1 = p
movl % e a x ,1 0 4 ( % e s p )
# x1 1 = t
movl % e d x ,1 4 4 ( % e s p )
# p + = x0
addl 1 0 0 ( % e s p ) ,% e a x
# x6 = r
movl % e s i ,1 2 4 ( % e s p )
# t + = x10
addl 1 4 0 ( % e s p ) ,% e d x
# x1 2 = v
movl % e d i ,1 4 8 ( % e s p )
# p < < < = 9
rol $ 9 ,% e a x
# p ^ = x2
xorl 1 0 8 ( % e s p ) ,% e a x
# t < < < = 9
rol $ 9 ,% e d x
# t ^ = x8
xorl 1 3 2 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 9
rol $ 9 ,% e c x
# s ^ = x7
xorl 1 2 8 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 9
rol $ 9 ,% e b x
# w ^ = x13
xorl 1 5 2 ( % e s p ) ,% e b x
# x2 = p
movl % e a x ,1 0 8 ( % e s p )
# x8 = t
movl % e d x ,1 3 2 ( % e s p )
# p + = x1
addl 1 0 4 ( % e s p ) ,% e a x
# x7 = s
movl % e c x ,1 2 8 ( % e s p )
# t + = x11
addl 1 4 4 ( % e s p ) ,% e d x
# x1 3 = w
movl % e b x ,1 5 2 ( % e s p )
# p < < < = 1 3
rol $ 1 3 ,% e a x
# p ^ = x3
xorl 1 1 2 ( % e s p ) ,% e a x
# t < < < = 1 3
rol $ 1 3 ,% e d x
# t ^ = x9
xorl 1 3 6 ( % e s p ) ,% e d x
# r + = s
add % e c x ,% e s i
# r < < < = 1 3
rol $ 1 3 ,% e s i
# r ^ = x4
xorl 1 1 6 ( % e s p ) ,% e s i
# v + = w
add % e b x ,% e d i
# v < < < = 1 3
rol $ 1 3 ,% e d i
# v ^ = x14
xorl 1 5 6 ( % e s p ) ,% e d i
# x3 = p
movl % e a x ,1 1 2 ( % e s p )
# x9 = t
movl % e d x ,1 3 6 ( % e s p )
# p + = x2
addl 1 0 8 ( % e s p ) ,% e a x
# x4 = r
movl % e s i ,1 1 6 ( % e s p )
# t + = x8
addl 1 3 2 ( % e s p ) ,% e d x
# x1 4 = v
movl % e d i ,1 5 6 ( % e s p )
# p < < < = 1 8
rol $ 1 8 ,% e a x
# p ^ = x0
xorl 1 0 0 ( % e s p ) ,% e a x
# t < < < = 1 8
rol $ 1 8 ,% e d x
# t ^ = x10
xorl 1 4 0 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 1 8
rol $ 1 8 ,% e c x
# s ^ = x5
xorl 1 2 0 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 1 8
rol $ 1 8 ,% e b x
# w ^ = x15
xorl 1 6 0 ( % e s p ) ,% e b x
# x0 = p
movl % e a x ,1 0 0 ( % e s p )
# x1 0 = t
movl % e d x ,1 4 0 ( % e s p )
# p + = x12
addl 1 4 8 ( % e s p ) ,% e a x
# x5 = s
movl % e c x ,1 2 0 ( % e s p )
# t + = x6
addl 1 2 4 ( % e s p ) ,% e d x
# x1 5 = w
movl % e b x ,1 6 0 ( % e s p )
# r = x1
movl 1 0 4 ( % e s p ) ,% e s i
# r + = s
add % e c x ,% e s i
# v = x11
movl 1 4 4 ( % e s p ) ,% e d i
# v + = w
add % e b x ,% e d i
# p < < < = 7
rol $ 7 ,% e a x
# p ^ = x4
xorl 1 1 6 ( % e s p ) ,% e a x
# t < < < = 7
rol $ 7 ,% e d x
# t ^ = x14
xorl 1 5 6 ( % e s p ) ,% e d x
# r < < < = 7
rol $ 7 ,% e s i
# r ^ = x9
xorl 1 3 6 ( % e s p ) ,% e s i
# v < < < = 7
rol $ 7 ,% e d i
# v ^ = x3
xorl 1 1 2 ( % e s p ) ,% e d i
# x4 = p
movl % e a x ,1 1 6 ( % e s p )
# x1 4 = t
movl % e d x ,1 5 6 ( % e s p )
# p + = x0
addl 1 0 0 ( % e s p ) ,% e a x
# x9 = r
movl % e s i ,1 3 6 ( % e s p )
# t + = x10
addl 1 4 0 ( % e s p ) ,% e d x
# x3 = v
movl % e d i ,1 1 2 ( % e s p )
# p < < < = 9
rol $ 9 ,% e a x
# p ^ = x8
xorl 1 3 2 ( % e s p ) ,% e a x
# t < < < = 9
rol $ 9 ,% e d x
# t ^ = x2
xorl 1 0 8 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 9
rol $ 9 ,% e c x
# s ^ = x13
xorl 1 5 2 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 9
rol $ 9 ,% e b x
# w ^ = x7
xorl 1 2 8 ( % e s p ) ,% e b x
# x8 = p
movl % e a x ,1 3 2 ( % e s p )
# x2 = t
movl % e d x ,1 0 8 ( % e s p )
# p + = x4
addl 1 1 6 ( % e s p ) ,% e a x
# x1 3 = s
movl % e c x ,1 5 2 ( % e s p )
# t + = x14
addl 1 5 6 ( % e s p ) ,% e d x
# x7 = w
movl % e b x ,1 2 8 ( % e s p )
# p < < < = 1 3
rol $ 1 3 ,% e a x
# p ^ = x12
xorl 1 4 8 ( % e s p ) ,% e a x
# t < < < = 1 3
rol $ 1 3 ,% e d x
# t ^ = x6
xorl 1 2 4 ( % e s p ) ,% e d x
# r + = s
add % e c x ,% e s i
# r < < < = 1 3
rol $ 1 3 ,% e s i
# r ^ = x1
xorl 1 0 4 ( % e s p ) ,% e s i
# v + = w
add % e b x ,% e d i
# v < < < = 1 3
rol $ 1 3 ,% e d i
# v ^ = x11
xorl 1 4 4 ( % e s p ) ,% e d i
# x1 2 = p
movl % e a x ,1 4 8 ( % e s p )
# x6 = t
movl % e d x ,1 2 4 ( % e s p )
# p + = x8
addl 1 3 2 ( % e s p ) ,% e a x
# x1 = r
movl % e s i ,1 0 4 ( % e s p )
# t + = x2
addl 1 0 8 ( % e s p ) ,% e d x
# x1 1 = v
movl % e d i ,1 4 4 ( % e s p )
# p < < < = 1 8
rol $ 1 8 ,% e a x
# p ^ = x0
xorl 1 0 0 ( % e s p ) ,% e a x
# t < < < = 1 8
rol $ 1 8 ,% e d x
# t ^ = x10
xorl 1 4 0 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 1 8
rol $ 1 8 ,% e c x
# s ^ = x5
xorl 1 2 0 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 1 8
rol $ 1 8 ,% e b x
# w ^ = x15
xorl 1 6 0 ( % e s p ) ,% e b x
# x0 = p
movl % e a x ,1 0 0 ( % e s p )
# x1 0 = t
movl % e d x ,1 4 0 ( % e s p )
# p + = x3
addl 1 1 2 ( % e s p ) ,% e a x
# p < < < = 7
rol $ 7 ,% e a x
# x5 = s
movl % e c x ,1 2 0 ( % e s p )
# t + = x9
addl 1 3 6 ( % e s p ) ,% e d x
# x1 5 = w
movl % e b x ,1 6 0 ( % e s p )
# r = x4
movl 1 1 6 ( % e s p ) ,% e s i
# r + = s
add % e c x ,% e s i
# v = x14
movl 1 5 6 ( % e s p ) ,% e d i
# v + = w
add % e b x ,% e d i
# p ^ = x1
xorl 1 0 4 ( % e s p ) ,% e a x
# t < < < = 7
rol $ 7 ,% e d x
# t ^ = x11
xorl 1 4 4 ( % e s p ) ,% e d x
# r < < < = 7
rol $ 7 ,% e s i
# r ^ = x6
xorl 1 2 4 ( % e s p ) ,% e s i
# v < < < = 7
rol $ 7 ,% e d i
# v ^ = x12
xorl 1 4 8 ( % e s p ) ,% e d i
# x1 = p
movl % e a x ,1 0 4 ( % e s p )
# x1 1 = t
movl % e d x ,1 4 4 ( % e s p )
# p + = x0
addl 1 0 0 ( % e s p ) ,% e a x
# x6 = r
movl % e s i ,1 2 4 ( % e s p )
# t + = x10
addl 1 4 0 ( % e s p ) ,% e d x
# x1 2 = v
movl % e d i ,1 4 8 ( % e s p )
# p < < < = 9
rol $ 9 ,% e a x
# p ^ = x2
xorl 1 0 8 ( % e s p ) ,% e a x
# t < < < = 9
rol $ 9 ,% e d x
# t ^ = x8
xorl 1 3 2 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 9
rol $ 9 ,% e c x
# s ^ = x7
xorl 1 2 8 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 9
rol $ 9 ,% e b x
# w ^ = x13
xorl 1 5 2 ( % e s p ) ,% e b x
# x2 = p
movl % e a x ,1 0 8 ( % e s p )
# x8 = t
movl % e d x ,1 3 2 ( % e s p )
# p + = x1
addl 1 0 4 ( % e s p ) ,% e a x
# x7 = s
movl % e c x ,1 2 8 ( % e s p )
# t + = x11
addl 1 4 4 ( % e s p ) ,% e d x
# x1 3 = w
movl % e b x ,1 5 2 ( % e s p )
# p < < < = 1 3
rol $ 1 3 ,% e a x
# p ^ = x3
xorl 1 1 2 ( % e s p ) ,% e a x
# t < < < = 1 3
rol $ 1 3 ,% e d x
# t ^ = x9
xorl 1 3 6 ( % e s p ) ,% e d x
# r + = s
add % e c x ,% e s i
# r < < < = 1 3
rol $ 1 3 ,% e s i
# r ^ = x4
xorl 1 1 6 ( % e s p ) ,% e s i
# v + = w
add % e b x ,% e d i
# v < < < = 1 3
rol $ 1 3 ,% e d i
# v ^ = x14
xorl 1 5 6 ( % e s p ) ,% e d i
# x3 = p
movl % e a x ,1 1 2 ( % e s p )
# x9 = t
movl % e d x ,1 3 6 ( % e s p )
# p + = x2
addl 1 0 8 ( % e s p ) ,% e a x
# x4 = r
movl % e s i ,1 1 6 ( % e s p )
# t + = x8
addl 1 3 2 ( % e s p ) ,% e d x
# x1 4 = v
movl % e d i ,1 5 6 ( % e s p )
# p < < < = 1 8
rol $ 1 8 ,% e a x
# p ^ = x0
xorl 1 0 0 ( % e s p ) ,% e a x
# t < < < = 1 8
rol $ 1 8 ,% e d x
# t ^ = x10
xorl 1 4 0 ( % e s p ) ,% e d x
# s + = r
add % e s i ,% e c x
# s < < < = 1 8
rol $ 1 8 ,% e c x
# s ^ = x5
xorl 1 2 0 ( % e s p ) ,% e c x
# w + = v
add % e d i ,% e b x
# w < < < = 1 8
rol $ 1 8 ,% e b x
# w ^ = x15
xorl 1 6 0 ( % e s p ) ,% e b x
# i - = 4
sub $ 4 ,% e b p
# goto m a i n l o o p i f u n s i g n e d >
ja . _ m a i n l o o p
# x0 = p
movl % e a x ,1 0 0 ( % e s p )
# x5 = s
movl % e c x ,1 2 0 ( % e s p )
# x1 0 = t
movl % e d x ,1 4 0 ( % e s p )
# x1 5 = w
movl % e b x ,1 6 0 ( % e s p )
# out = o u t _ b a c k u p
movl 7 2 ( % e s p ) ,% e d i
# m = m _ b a c k u p
movl 6 8 ( % e s p ) ,% e s i
# in0 = x0
movl 1 0 0 ( % e s p ) ,% e a x
# in1 = x1
movl 1 0 4 ( % e s p ) ,% e c x
# in0 + = j 0
addl 1 6 4 ( % e s p ) ,% e a x
# in1 + = j 1
addl 1 6 8 ( % e s p ) ,% e c x
# in0 ^ = * ( u i n t 3 2 * ) ( m + 0 )
xorl 0 ( % e s i ) ,% e a x
# in1 ^ = * ( u i n t 3 2 * ) ( m + 4 )
xorl 4 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 0 ) = i n 0
movl % e a x ,0 ( % e d i )
# * ( uint3 2 * ) ( o u t + 4 ) = i n 1
movl % e c x ,4 ( % e d i )
# in2 = x2
movl 1 0 8 ( % e s p ) ,% e a x
# in3 = x3
movl 1 1 2 ( % e s p ) ,% e c x
# in2 + = j 2
addl 1 7 2 ( % e s p ) ,% e a x
# in3 + = j 3
addl 1 7 6 ( % e s p ) ,% e c x
# in2 ^ = * ( u i n t 3 2 * ) ( m + 8 )
xorl 8 ( % e s i ) ,% e a x
# in3 ^ = * ( u i n t 3 2 * ) ( m + 1 2 )
xorl 1 2 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 8 ) = i n 2
movl % e a x ,8 ( % e d i )
# * ( uint3 2 * ) ( o u t + 1 2 ) = i n 3
movl % e c x ,1 2 ( % e d i )
# in4 = x4
movl 1 1 6 ( % e s p ) ,% e a x
# in5 = x5
movl 1 2 0 ( % e s p ) ,% e c x
# in4 + = j 4
addl 1 8 0 ( % e s p ) ,% e a x
# in5 + = j 5
addl 1 8 4 ( % e s p ) ,% e c x
# in4 ^ = * ( u i n t 3 2 * ) ( m + 1 6 )
xorl 1 6 ( % e s i ) ,% e a x
# in5 ^ = * ( u i n t 3 2 * ) ( m + 2 0 )
xorl 2 0 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 1 6 ) = i n 4
movl % e a x ,1 6 ( % e d i )
# * ( uint3 2 * ) ( o u t + 2 0 ) = i n 5
movl % e c x ,2 0 ( % e d i )
# in6 = x6
movl 1 2 4 ( % e s p ) ,% e a x
# in7 = x7
movl 1 2 8 ( % e s p ) ,% e c x
# in6 + = j 6
addl 1 8 8 ( % e s p ) ,% e a x
# in7 + = j 7
addl 1 9 2 ( % e s p ) ,% e c x
# in6 ^ = * ( u i n t 3 2 * ) ( m + 2 4 )
xorl 2 4 ( % e s i ) ,% e a x
# in7 ^ = * ( u i n t 3 2 * ) ( m + 2 8 )
xorl 2 8 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 2 4 ) = i n 6
movl % e a x ,2 4 ( % e d i )
# * ( uint3 2 * ) ( o u t + 2 8 ) = i n 7
movl % e c x ,2 8 ( % e d i )
# in8 = x8
movl 1 3 2 ( % e s p ) ,% e a x
# in9 = x9
movl 1 3 6 ( % e s p ) ,% e c x
# in8 + = j 8
addl 1 9 6 ( % e s p ) ,% e a x
# in9 + = j 9
addl 2 0 0 ( % e s p ) ,% e c x
# in8 ^ = * ( u i n t 3 2 * ) ( m + 3 2 )
xorl 3 2 ( % e s i ) ,% e a x
# in9 ^ = * ( u i n t 3 2 * ) ( m + 3 6 )
xorl 3 6 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 3 2 ) = i n 8
movl % e a x ,3 2 ( % e d i )
# * ( uint3 2 * ) ( o u t + 3 6 ) = i n 9
movl % e c x ,3 6 ( % e d i )
# in1 0 = x10
movl 1 4 0 ( % e s p ) ,% e a x
# in1 1 = x11
movl 1 4 4 ( % e s p ) ,% e c x
# in1 0 + = j 1 0
addl 2 0 4 ( % e s p ) ,% e a x
# in1 1 + = j 1 1
addl 2 0 8 ( % e s p ) ,% e c x
# in1 0 ^ = * ( u i n t 3 2 * ) ( m + 4 0 )
xorl 4 0 ( % e s i ) ,% e a x
# in1 1 ^ = * ( u i n t 3 2 * ) ( m + 4 4 )
xorl 4 4 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 4 0 ) = i n 1 0
movl % e a x ,4 0 ( % e d i )
# * ( uint3 2 * ) ( o u t + 4 4 ) = i n 1 1
movl % e c x ,4 4 ( % e d i )
# in1 2 = x12
movl 1 4 8 ( % e s p ) ,% e a x
# in1 3 = x13
movl 1 5 2 ( % e s p ) ,% e c x
# in1 2 + = j 1 2
addl 2 1 2 ( % e s p ) ,% e a x
# in1 3 + = j 1 3
addl 2 1 6 ( % e s p ) ,% e c x
# in1 2 ^ = * ( u i n t 3 2 * ) ( m + 4 8 )
xorl 4 8 ( % e s i ) ,% e a x
# in1 3 ^ = * ( u i n t 3 2 * ) ( m + 5 2 )
xorl 5 2 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 4 8 ) = i n 1 2
movl % e a x ,4 8 ( % e d i )
# * ( uint3 2 * ) ( o u t + 5 2 ) = i n 1 3
movl % e c x ,5 2 ( % e d i )
# in1 4 = x14
movl 1 5 6 ( % e s p ) ,% e a x
# in1 5 = x15
movl 1 6 0 ( % e s p ) ,% e c x
# in1 4 + = j 1 4
addl 2 2 0 ( % e s p ) ,% e a x
# in1 5 + = j 1 5
addl 2 2 4 ( % e s p ) ,% e c x
# in1 4 ^ = * ( u i n t 3 2 * ) ( m + 5 6 )
xorl 5 6 ( % e s i ) ,% e a x
# in1 5 ^ = * ( u i n t 3 2 * ) ( m + 6 0 )
xorl 6 0 ( % e s i ) ,% e c x
# * ( uint3 2 * ) ( o u t + 5 6 ) = i n 1 4
movl % e a x ,5 6 ( % e d i )
# * ( uint3 2 * ) ( o u t + 6 0 ) = i n 1 5
movl % e c x ,6 0 ( % e d i )
# bytes = b y t e s _ b a c k u p
movl 7 6 ( % e s p ) ,% e b x
# in8 = j 8
movl 1 9 6 ( % e s p ) ,% e a x
# in9 = j 9
movl 2 0 0 ( % e s p ) ,% e c x
# in8 + = 1
add $ 1 ,% e a x
# in9 + = 0 + c a r r y
adc $ 0 ,% e c x
# j8 = i n 8
movl % e a x ,1 9 6 ( % e s p )
# j9 = i n 9
movl % e c x ,2 0 0 ( % e s p )
# bytes - 6 4
cmp $ 6 4 ,% e b x
# goto b y t e s a t l e a s t 6 5 i f u n s i g n e d >
ja . _ b y t e s a t l e a s t 6 5
# goto b y t e s a t l e a s t 6 4 i f u n s i g n e d > =
jae . _ b y t e s a t l e a s t 6 4
# m = o u t
mov % e d i ,% e s i
# out = c t a r g e t
movl 2 2 8 ( % e s p ) ,% e d i
# i = b y t e s
mov % e b x ,% e c x
# while ( i ) { * o u t + + = * m + + ; --i }
rep m o v s b
._bytesatleast64 :
# x = x _ b a c k u p
movl 6 4 ( % e s p ) ,% e a x
# in8 = j 8
movl 1 9 6 ( % e s p ) ,% e c x
# in9 = j 9
movl 2 0 0 ( % e s p ) ,% e d x
# * ( uint3 2 * ) ( x + 3 2 ) = i n 8
movl % e c x ,3 2 ( % e a x )
# * ( uint3 2 * ) ( x + 3 6 ) = i n 9
movl % e d x ,3 6 ( % e a x )
._done :
# eax = e a x _ s t a c k
movl 8 0 ( % e s p ) ,% e a x
# ebx = e b x _ s t a c k
movl 8 4 ( % e s p ) ,% e b x
# esi = e s i _ s t a c k
movl 8 8 ( % e s p ) ,% e s i
# edi = e d i _ s t a c k
movl 9 2 ( % e s p ) ,% e d i
# ebp = e b p _ s t a c k
movl 9 6 ( % e s p ) ,% e b p
# leave
add % e a x ,% e s p
ret
._bytesatleast65 :
# bytes - = 6 4
sub $ 6 4 ,% e b x
# out + = 6 4
add $ 6 4 ,% e d i
# m + = 6 4
add $ 6 4 ,% e s i
# goto b y t e s a t l e a s t 1
jmp . _ b y t e s a t l e a s t 1
2013-01-19 13:39:31 +02:00
ENDPROC( s a l s a20 _ e n c r y p t _ b y t e s )
# enter s a l s a20 _ k e y s e t u p
ENTRY( s a l s a20 _ k e y s e t u p )
2007-12-10 15:52:56 +08:00
mov % e s p ,% e a x
and $ 3 1 ,% e a x
add $ 2 5 6 ,% e a x
sub % e a x ,% e s p
# eax_ s t a c k = e a x
movl % e a x ,6 4 ( % e s p )
# ebx_ s t a c k = e b x
movl % e b x ,6 8 ( % e s p )
# esi_ s t a c k = e s i
movl % e s i ,7 2 ( % e s p )
# edi_ s t a c k = e d i
movl % e d i ,7 6 ( % e s p )
# ebp_ s t a c k = e b p
movl % e b p ,8 0 ( % e s p )
# k = a r g 2
movl 8 ( % e s p ,% e a x ) ,% e c x
# kbits = a r g 3
movl 1 2 ( % e s p ,% e a x ) ,% e d x
# x = a r g 1
movl 4 ( % e s p ,% e a x ) ,% e a x
# in1 = * ( u i n t 3 2 * ) ( k + 0 )
movl 0 ( % e c x ) ,% e b x
# in2 = * ( u i n t 3 2 * ) ( k + 4 )
movl 4 ( % e c x ) ,% e s i
# in3 = * ( u i n t 3 2 * ) ( k + 8 )
movl 8 ( % e c x ) ,% e d i
# in4 = * ( u i n t 3 2 * ) ( k + 1 2 )
movl 1 2 ( % e c x ) ,% e b p
# * ( uint3 2 * ) ( x + 4 ) = i n 1
movl % e b x ,4 ( % e a x )
# * ( uint3 2 * ) ( x + 8 ) = i n 2
movl % e s i ,8 ( % e a x )
# * ( uint3 2 * ) ( x + 1 2 ) = i n 3
movl % e d i ,1 2 ( % e a x )
# * ( uint3 2 * ) ( x + 1 6 ) = i n 4
movl % e b p ,1 6 ( % e a x )
# kbits - 2 5 6
cmp $ 2 5 6 ,% e d x
# goto k b i t s12 8 i f u n s i g n e d <
jb . _ k b i t s12 8
._kbits256 :
# in1 1 = * ( u i n t 3 2 * ) ( k + 1 6 )
movl 1 6 ( % e c x ) ,% e d x
# in1 2 = * ( u i n t 3 2 * ) ( k + 2 0 )
movl 2 0 ( % e c x ) ,% e b x
# in1 3 = * ( u i n t 3 2 * ) ( k + 2 4 )
movl 2 4 ( % e c x ) ,% e s i
# in1 4 = * ( u i n t 3 2 * ) ( k + 2 8 )
movl 2 8 ( % e c x ) ,% e c x
# * ( uint3 2 * ) ( x + 4 4 ) = i n 1 1
movl % e d x ,4 4 ( % e a x )
# * ( uint3 2 * ) ( x + 4 8 ) = i n 1 2
movl % e b x ,4 8 ( % e a x )
# * ( uint3 2 * ) ( x + 5 2 ) = i n 1 3
movl % e s i ,5 2 ( % e a x )
# * ( uint3 2 * ) ( x + 5 6 ) = i n 1 4
movl % e c x ,5 6 ( % e a x )
# in0 = 1 6 3 4 7 6 0 8 0 5
mov $ 1 6 3 4 7 6 0 8 0 5 ,% e c x
# in5 = 8 5 7 7 6 0 8 7 8
mov $ 8 5 7 7 6 0 8 7 8 ,% e d x
# in1 0 = 2 0 3 6 4 7 7 2 3 4
mov $ 2 0 3 6 4 7 7 2 3 4 ,% e b x
# in1 5 = 1 7 9 7 2 8 5 2 3 6
mov $ 1 7 9 7 2 8 5 2 3 6 ,% e s i
# * ( uint3 2 * ) ( x + 0 ) = i n 0
movl % e c x ,0 ( % e a x )
# * ( uint3 2 * ) ( x + 2 0 ) = i n 5
movl % e d x ,2 0 ( % e a x )
# * ( uint3 2 * ) ( x + 4 0 ) = i n 1 0
movl % e b x ,4 0 ( % e a x )
# * ( uint3 2 * ) ( x + 6 0 ) = i n 1 5
movl % e s i ,6 0 ( % e a x )
# goto k e y s e t u p d o n e
jmp . _ k e y s e t u p d o n e
._kbits128 :
# in1 1 = * ( u i n t 3 2 * ) ( k + 0 )
movl 0 ( % e c x ) ,% e d x
# in1 2 = * ( u i n t 3 2 * ) ( k + 4 )
movl 4 ( % e c x ) ,% e b x
# in1 3 = * ( u i n t 3 2 * ) ( k + 8 )
movl 8 ( % e c x ) ,% e s i
# in1 4 = * ( u i n t 3 2 * ) ( k + 1 2 )
movl 1 2 ( % e c x ) ,% e c x
# * ( uint3 2 * ) ( x + 4 4 ) = i n 1 1
movl % e d x ,4 4 ( % e a x )
# * ( uint3 2 * ) ( x + 4 8 ) = i n 1 2
movl % e b x ,4 8 ( % e a x )
# * ( uint3 2 * ) ( x + 5 2 ) = i n 1 3
movl % e s i ,5 2 ( % e a x )
# * ( uint3 2 * ) ( x + 5 6 ) = i n 1 4
movl % e c x ,5 6 ( % e a x )
# in0 = 1 6 3 4 7 6 0 8 0 5
mov $ 1 6 3 4 7 6 0 8 0 5 ,% e c x
# in5 = 8 2 4 2 0 6 4 4 6
mov $ 8 2 4 2 0 6 4 4 6 ,% e d x
# in1 0 = 2 0 3 6 4 7 7 2 3 8
mov $ 2 0 3 6 4 7 7 2 3 8 ,% e b x
# in1 5 = 1 7 9 7 2 8 5 2 3 6
mov $ 1 7 9 7 2 8 5 2 3 6 ,% e s i
# * ( uint3 2 * ) ( x + 0 ) = i n 0
movl % e c x ,0 ( % e a x )
# * ( uint3 2 * ) ( x + 2 0 ) = i n 5
movl % e d x ,2 0 ( % e a x )
# * ( uint3 2 * ) ( x + 4 0 ) = i n 1 0
movl % e b x ,4 0 ( % e a x )
# * ( uint3 2 * ) ( x + 6 0 ) = i n 1 5
movl % e s i ,6 0 ( % e a x )
._keysetupdone :
# eax = e a x _ s t a c k
movl 6 4 ( % e s p ) ,% e a x
# ebx = e b x _ s t a c k
movl 6 8 ( % e s p ) ,% e b x
# esi = e s i _ s t a c k
movl 7 2 ( % e s p ) ,% e s i
# edi = e d i _ s t a c k
movl 7 6 ( % e s p ) ,% e d i
# ebp = e b p _ s t a c k
movl 8 0 ( % e s p ) ,% e b p
# leave
add % e a x ,% e s p
ret
2013-01-19 13:39:31 +02:00
ENDPROC( s a l s a20 _ k e y s e t u p )
# enter s a l s a20 _ i v s e t u p
ENTRY( s a l s a20 _ i v s e t u p )
2007-12-10 15:52:56 +08:00
mov % e s p ,% e a x
and $ 3 1 ,% e a x
add $ 2 5 6 ,% e a x
sub % e a x ,% e s p
# eax_ s t a c k = e a x
movl % e a x ,6 4 ( % e s p )
# ebx_ s t a c k = e b x
movl % e b x ,6 8 ( % e s p )
# esi_ s t a c k = e s i
movl % e s i ,7 2 ( % e s p )
# edi_ s t a c k = e d i
movl % e d i ,7 6 ( % e s p )
# ebp_ s t a c k = e b p
movl % e b p ,8 0 ( % e s p )
# iv = a r g 2
movl 8 ( % e s p ,% e a x ) ,% e c x
# x = a r g 1
movl 4 ( % e s p ,% e a x ) ,% e a x
# in6 = * ( u i n t 3 2 * ) ( i v + 0 )
movl 0 ( % e c x ) ,% e d x
# in7 = * ( u i n t 3 2 * ) ( i v + 4 )
movl 4 ( % e c x ) ,% e c x
# in8 = 0
mov $ 0 ,% e b x
# in9 = 0
mov $ 0 ,% e s i
# * ( uint3 2 * ) ( x + 2 4 ) = i n 6
movl % e d x ,2 4 ( % e a x )
# * ( uint3 2 * ) ( x + 2 8 ) = i n 7
movl % e c x ,2 8 ( % e a x )
# * ( uint3 2 * ) ( x + 3 2 ) = i n 8
movl % e b x ,3 2 ( % e a x )
# * ( uint3 2 * ) ( x + 3 6 ) = i n 9
movl % e s i ,3 6 ( % e a x )
# eax = e a x _ s t a c k
movl 6 4 ( % e s p ) ,% e a x
# ebx = e b x _ s t a c k
movl 6 8 ( % e s p ) ,% e b x
# esi = e s i _ s t a c k
movl 7 2 ( % e s p ) ,% e s i
# edi = e d i _ s t a c k
movl 7 6 ( % e s p ) ,% e d i
# ebp = e b p _ s t a c k
movl 8 0 ( % e s p ) ,% e b p
# leave
add % e a x ,% e s p
ret
2013-01-19 13:39:31 +02:00
ENDPROC( s a l s a20 _ i v s e t u p )