2012-08-25 22:37:23 -07:00
# include < l i n u x / l i n k a g e . h >
# include < a s m / v i s a s m . h >
2012-08-31 12:11:51 -07:00
# include " o p c o d e s . h "
2012-08-25 22:37:23 -07:00
.align 32
ENTRY( d e s _ s p a r c64 _ k e y _ e x p a n d )
/* %o0=input_key, %o1=output_key */
VISEntryHalf
ld [ % o 0 + 0 x00 ] , % f0
ld [ % o 0 + 0 x04 ] , % f1
DES_ K E X P A N D ( 0 , 0 , 0 )
DES_ K E X P A N D ( 0 , 1 , 2 )
DES_ K E X P A N D ( 2 , 3 , 6 )
DES_ K E X P A N D ( 2 , 2 , 4 )
DES_ K E X P A N D ( 6 , 3 , 1 0 )
DES_ K E X P A N D ( 6 , 2 , 8 )
DES_ K E X P A N D ( 1 0 , 3 , 1 4 )
DES_ K E X P A N D ( 1 0 , 2 , 1 2 )
DES_ K E X P A N D ( 1 4 , 1 , 1 6 )
DES_ K E X P A N D ( 1 6 , 3 , 2 0 )
DES_ K E X P A N D ( 1 6 , 2 , 1 8 )
DES_ K E X P A N D ( 2 0 , 3 , 2 4 )
DES_ K E X P A N D ( 2 0 , 2 , 2 2 )
DES_ K E X P A N D ( 2 4 , 3 , 2 8 )
DES_ K E X P A N D ( 2 4 , 2 , 2 6 )
DES_ K E X P A N D ( 2 8 , 1 , 3 0 )
std % f0 , [ % o 1 + 0 x00 ]
std % f2 , [ % o 1 + 0 x08 ]
std % f4 , [ % o 1 + 0 x10 ]
std % f6 , [ % o 1 + 0 x18 ]
std % f8 , [ % o 1 + 0 x20 ]
std % f10 , [ % o 1 + 0 x28 ]
std % f12 , [ % o 1 + 0 x30 ]
std % f14 , [ % o 1 + 0 x38 ]
std % f16 , [ % o 1 + 0 x40 ]
std % f18 , [ % o 1 + 0 x48 ]
std % f20 , [ % o 1 + 0 x50 ]
std % f22 , [ % o 1 + 0 x58 ]
std % f24 , [ % o 1 + 0 x60 ]
std % f26 , [ % o 1 + 0 x68 ]
std % f28 , [ % o 1 + 0 x70 ]
std % f30 , [ % o 1 + 0 x78 ]
retl
VISExitHalf
ENDPROC( d e s _ s p a r c64 _ k e y _ e x p a n d )
.align 32
ENTRY( d e s _ s p a r c64 _ c r y p t )
/* %o0=key, %o1=input, %o2=output */
VISEntry
ldd [ % o 1 + 0 x00 ] , % f32
ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
ldd [ % o 0 + 0 x10 ] , % f4
ldd [ % o 0 + 0 x18 ] , % f6
ldd [ % o 0 + 0 x20 ] , % f8
ldd [ % o 0 + 0 x28 ] , % f10
ldd [ % o 0 + 0 x30 ] , % f12
ldd [ % o 0 + 0 x38 ] , % f14
ldd [ % o 0 + 0 x40 ] , % f16
ldd [ % o 0 + 0 x48 ] , % f18
ldd [ % o 0 + 0 x50 ] , % f20
ldd [ % o 0 + 0 x58 ] , % f22
ldd [ % o 0 + 0 x60 ] , % f24
ldd [ % o 0 + 0 x68 ] , % f26
ldd [ % o 0 + 0 x70 ] , % f28
ldd [ % o 0 + 0 x78 ] , % f30
DES_ I P ( 3 2 , 3 2 )
DES_ R O U N D ( 0 , 2 , 3 2 , 3 2 )
DES_ R O U N D ( 4 , 6 , 3 2 , 3 2 )
DES_ R O U N D ( 8 , 1 0 , 3 2 , 3 2 )
DES_ R O U N D ( 1 2 , 1 4 , 3 2 , 3 2 )
DES_ R O U N D ( 1 6 , 1 8 , 3 2 , 3 2 )
DES_ R O U N D ( 2 0 , 2 2 , 3 2 , 3 2 )
DES_ R O U N D ( 2 4 , 2 6 , 3 2 , 3 2 )
DES_ R O U N D ( 2 8 , 3 0 , 3 2 , 3 2 )
DES_ I I P ( 3 2 , 3 2 )
std % f32 , [ % o 2 + 0 x00 ]
retl
VISExit
ENDPROC( d e s _ s p a r c64 _ c r y p t )
.align 32
ENTRY( d e s _ s p a r c64 _ l o a d _ k e y s )
/* %o0=key */
VISEntry
ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
ldd [ % o 0 + 0 x10 ] , % f4
ldd [ % o 0 + 0 x18 ] , % f6
ldd [ % o 0 + 0 x20 ] , % f8
ldd [ % o 0 + 0 x28 ] , % f10
ldd [ % o 0 + 0 x30 ] , % f12
ldd [ % o 0 + 0 x38 ] , % f14
ldd [ % o 0 + 0 x40 ] , % f16
ldd [ % o 0 + 0 x48 ] , % f18
ldd [ % o 0 + 0 x50 ] , % f20
ldd [ % o 0 + 0 x58 ] , % f22
ldd [ % o 0 + 0 x60 ] , % f24
ldd [ % o 0 + 0 x68 ] , % f26
ldd [ % o 0 + 0 x70 ] , % f28
retl
ldd [ % o 0 + 0 x78 ] , % f30
ENDPROC( d e s _ s p a r c64 _ l o a d _ k e y s )
.align 32
ENTRY( d e s _ s p a r c64 _ e c b _ c r y p t )
/* %o0=input, %o1=output, %o2=len */
1 : ldd [ % o 0 + 0 x00 ] , % f32
add % o 0 , 0 x08 , % o 0
DES_ I P ( 3 2 , 3 2 )
DES_ R O U N D ( 0 , 2 , 3 2 , 3 2 )
DES_ R O U N D ( 4 , 6 , 3 2 , 3 2 )
DES_ R O U N D ( 8 , 1 0 , 3 2 , 3 2 )
DES_ R O U N D ( 1 2 , 1 4 , 3 2 , 3 2 )
DES_ R O U N D ( 1 6 , 1 8 , 3 2 , 3 2 )
DES_ R O U N D ( 2 0 , 2 2 , 3 2 , 3 2 )
DES_ R O U N D ( 2 4 , 2 6 , 3 2 , 3 2 )
DES_ R O U N D ( 2 8 , 3 0 , 3 2 , 3 2 )
DES_ I I P ( 3 2 , 3 2 )
std % f32 , [ % o 1 + 0 x00 ]
subcc % o 2 , 0 x08 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x08 , % o 1
retl
nop
ENDPROC( d e s _ s p a r c64 _ e c b _ c r y p t )
.align 32
ENTRY( d e s _ s p a r c64 _ c b c _ e n c r y p t )
/* %o0=input, %o1=output, %o2=len, %o3=IV */
ldd [ % o 3 + 0 x00 ] , % f32
1 : ldd [ % o 0 + 0 x00 ] , % f34
fxor % f32 , % f34 , % f32
DES_ I P ( 3 2 , 3 2 )
DES_ R O U N D ( 0 , 2 , 3 2 , 3 2 )
DES_ R O U N D ( 4 , 6 , 3 2 , 3 2 )
DES_ R O U N D ( 8 , 1 0 , 3 2 , 3 2 )
DES_ R O U N D ( 1 2 , 1 4 , 3 2 , 3 2 )
DES_ R O U N D ( 1 6 , 1 8 , 3 2 , 3 2 )
DES_ R O U N D ( 2 0 , 2 2 , 3 2 , 3 2 )
DES_ R O U N D ( 2 4 , 2 6 , 3 2 , 3 2 )
DES_ R O U N D ( 2 8 , 3 0 , 3 2 , 3 2 )
DES_ I I P ( 3 2 , 3 2 )
std % f32 , [ % o 1 + 0 x00 ]
add % o 0 , 0 x08 , % o 0
subcc % o 2 , 0 x08 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x08 , % o 1
retl
std % f32 , [ % o 3 + 0 x00 ]
ENDPROC( d e s _ s p a r c64 _ c b c _ e n c r y p t )
.align 32
ENTRY( d e s _ s p a r c64 _ c b c _ d e c r y p t )
/* %o0=input, %o1=output, %o2=len, %o3=IV */
ldd [ % o 3 + 0 x00 ] , % f34
1 : ldd [ % o 0 + 0 x00 ] , % f36
DES_ I P ( 3 6 , 3 2 )
DES_ R O U N D ( 0 , 2 , 3 2 , 3 2 )
DES_ R O U N D ( 4 , 6 , 3 2 , 3 2 )
DES_ R O U N D ( 8 , 1 0 , 3 2 , 3 2 )
DES_ R O U N D ( 1 2 , 1 4 , 3 2 , 3 2 )
DES_ R O U N D ( 1 6 , 1 8 , 3 2 , 3 2 )
DES_ R O U N D ( 2 0 , 2 2 , 3 2 , 3 2 )
DES_ R O U N D ( 2 4 , 2 6 , 3 2 , 3 2 )
DES_ R O U N D ( 2 8 , 3 0 , 3 2 , 3 2 )
DES_ I I P ( 3 2 , 3 2 )
fxor % f32 , % f34 , % f32
2012-09-17 19:57:30 -07:00
fsrc2 % f36 , % f34
2012-08-25 22:37:23 -07:00
std % f32 , [ % o 1 + 0 x00 ]
add % o 0 , 0 x08 , % o 0
subcc % o 2 , 0 x08 , % o 2
bne,p t % i c c , 1 b
add % o 1 , 0 x08 , % o 1
retl
std % f36 , [ % o 3 + 0 x00 ]
ENDPROC( d e s _ s p a r c64 _ c b c _ d e c r y p t )
.align 32
ENTRY( d e s3 _ e d e _ s p a r c64 _ c r y p t )
/* %o0=key, %o1=input, %o2=output */
VISEntry
ldd [ % o 1 + 0 x00 ] , % f32
ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
ldd [ % o 0 + 0 x10 ] , % f4
ldd [ % o 0 + 0 x18 ] , % f6
ldd [ % o 0 + 0 x20 ] , % f8
ldd [ % o 0 + 0 x28 ] , % f10
ldd [ % o 0 + 0 x30 ] , % f12
ldd [ % o 0 + 0 x38 ] , % f14
ldd [ % o 0 + 0 x40 ] , % f16
ldd [ % o 0 + 0 x48 ] , % f18
ldd [ % o 0 + 0 x50 ] , % f20
ldd [ % o 0 + 0 x58 ] , % f22
ldd [ % o 0 + 0 x60 ] , % f24
ldd [ % o 0 + 0 x68 ] , % f26
ldd [ % o 0 + 0 x70 ] , % f28
ldd [ % o 0 + 0 x78 ] , % f30
DES_ I P ( 3 2 , 3 2 )
DES_ R O U N D ( 0 , 2 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x80 ] , % f0
ldd [ % o 0 + 0 x88 ] , % f2
DES_ R O U N D ( 4 , 6 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x90 ] , % f4
ldd [ % o 0 + 0 x98 ] , % f6
DES_ R O U N D ( 8 , 1 0 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x a0 ] , % f8
ldd [ % o 0 + 0 x a8 ] , % f10
DES_ R O U N D ( 1 2 , 1 4 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x b0 ] , % f12
ldd [ % o 0 + 0 x b8 ] , % f14
DES_ R O U N D ( 1 6 , 1 8 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x c0 ] , % f16
ldd [ % o 0 + 0 x c8 ] , % f18
DES_ R O U N D ( 2 0 , 2 2 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x d0 ] , % f20
ldd [ % o 0 + 0 x d8 ] , % f22
DES_ R O U N D ( 2 4 , 2 6 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x e 0 ] , % f24
ldd [ % o 0 + 0 x e 8 ] , % f26
DES_ R O U N D ( 2 8 , 3 0 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x f0 ] , % f28
ldd [ % o 0 + 0 x f8 ] , % f30
DES_ I I P ( 3 2 , 3 2 )
DES_ I P ( 3 2 , 3 2 )
DES_ R O U N D ( 0 , 2 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x10 0 ] , % f0
ldd [ % o 0 + 0 x10 8 ] , % f2
DES_ R O U N D ( 4 , 6 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x11 0 ] , % f4
ldd [ % o 0 + 0 x11 8 ] , % f6
DES_ R O U N D ( 8 , 1 0 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x12 0 ] , % f8
ldd [ % o 0 + 0 x12 8 ] , % f10
DES_ R O U N D ( 1 2 , 1 4 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x13 0 ] , % f12
ldd [ % o 0 + 0 x13 8 ] , % f14
DES_ R O U N D ( 1 6 , 1 8 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x14 0 ] , % f16
ldd [ % o 0 + 0 x14 8 ] , % f18
DES_ R O U N D ( 2 0 , 2 2 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x15 0 ] , % f20
ldd [ % o 0 + 0 x15 8 ] , % f22
DES_ R O U N D ( 2 4 , 2 6 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x16 0 ] , % f24
ldd [ % o 0 + 0 x16 8 ] , % f26
DES_ R O U N D ( 2 8 , 3 0 , 3 2 , 3 2 )
ldd [ % o 0 + 0 x17 0 ] , % f28
ldd [ % o 0 + 0 x17 8 ] , % f30
DES_ I I P ( 3 2 , 3 2 )
DES_ I P ( 3 2 , 3 2 )
DES_ R O U N D ( 0 , 2 , 3 2 , 3 2 )
DES_ R O U N D ( 4 , 6 , 3 2 , 3 2 )
DES_ R O U N D ( 8 , 1 0 , 3 2 , 3 2 )
DES_ R O U N D ( 1 2 , 1 4 , 3 2 , 3 2 )
DES_ R O U N D ( 1 6 , 1 8 , 3 2 , 3 2 )
DES_ R O U N D ( 2 0 , 2 2 , 3 2 , 3 2 )
DES_ R O U N D ( 2 4 , 2 6 , 3 2 , 3 2 )
DES_ R O U N D ( 2 8 , 3 0 , 3 2 , 3 2 )
DES_ I I P ( 3 2 , 3 2 )
std % f32 , [ % o 2 + 0 x00 ]
retl
VISExit
ENDPROC( d e s3 _ e d e _ s p a r c64 _ c r y p t )
.align 32
ENTRY( d e s3 _ e d e _ s p a r c64 _ l o a d _ k e y s )
/* %o0=key */
VISEntry
ldd [ % o 0 + 0 x00 ] , % f0
ldd [ % o 0 + 0 x08 ] , % f2
ldd [ % o 0 + 0 x10 ] , % f4
ldd [ % o 0 + 0 x18 ] , % f6
ldd [ % o 0 + 0 x20 ] , % f8
ldd [ % o 0 + 0 x28 ] , % f10
ldd [ % o 0 + 0 x30 ] , % f12
ldd [ % o 0 + 0 x38 ] , % f14
ldd [ % o 0 + 0 x40 ] , % f16
ldd [ % o 0 + 0 x48 ] , % f18
ldd [ % o 0 + 0 x50 ] , % f20
ldd [ % o 0 + 0 x58 ] , % f22
ldd [ % o 0 + 0 x60 ] , % f24
ldd [ % o 0 + 0 x68 ] , % f26
ldd [ % o 0 + 0 x70 ] , % f28
ldd [ % o 0 + 0 x78 ] , % f30
ldd [ % o 0 + 0 x80 ] , % f32
ldd [ % o 0 + 0 x88 ] , % f34
ldd [ % o 0 + 0 x90 ] , % f36
ldd [ % o 0 + 0 x98 ] , % f38
ldd [ % o 0 + 0 x a0 ] , % f40
ldd [ % o 0 + 0 x a8 ] , % f42
ldd [ % o 0 + 0 x b0 ] , % f44
ldd [ % o 0 + 0 x b8 ] , % f46
ldd [ % o 0 + 0 x c0 ] , % f48
ldd [ % o 0 + 0 x c8 ] , % f50
ldd [ % o 0 + 0 x d0 ] , % f52
ldd [ % o 0 + 0 x d8 ] , % f54
ldd [ % o 0 + 0 x e 0 ] , % f56
retl
ldd [ % o 0 + 0 x e 8 ] , % f58
ENDPROC( d e s3 _ e d e _ s p a r c64 _ l o a d _ k e y s )
# define D E S 3 _ L O O P _ B O D Y ( X ) \
DES_ I P ( X , X ) \
DES_ R O U N D ( 0 , 2 , X , X ) \
DES_ R O U N D ( 4 , 6 , X , X ) \
DES_ R O U N D ( 8 , 1 0 , X , X ) \
DES_ R O U N D ( 1 2 , 1 4 , X , X ) \
DES_ R O U N D ( 1 6 , 1 8 , X , X ) \
ldd [ % o 0 + 0 x f0 ] , % f16 ; \
ldd [ % o 0 + 0 x f8 ] , % f18 ; \
DES_ R O U N D ( 2 0 , 2 2 , X , X ) \
ldd [ % o 0 + 0 x10 0 ] , % f20 ; \
ldd [ % o 0 + 0 x10 8 ] , % f22 ; \
DES_ R O U N D ( 2 4 , 2 6 , X , X ) \
ldd [ % o 0 + 0 x11 0 ] , % f24 ; \
ldd [ % o 0 + 0 x11 8 ] , % f26 ; \
DES_ R O U N D ( 2 8 , 3 0 , X , X ) \
ldd [ % o 0 + 0 x12 0 ] , % f28 ; \
ldd [ % o 0 + 0 x12 8 ] , % f30 ; \
DES_ I I P ( X , X ) \
DES_ I P ( X , X ) \
DES_ R O U N D ( 3 2 , 3 4 , X , X ) \
ldd [ % o 0 + 0 x13 0 ] , % f0 ; \
ldd [ % o 0 + 0 x13 8 ] , % f2 ; \
DES_ R O U N D ( 3 6 , 3 8 , X , X ) \
ldd [ % o 0 + 0 x14 0 ] , % f4 ; \
ldd [ % o 0 + 0 x14 8 ] , % f6 ; \
DES_ R O U N D ( 4 0 , 4 2 , X , X ) \
ldd [ % o 0 + 0 x15 0 ] , % f8 ; \
ldd [ % o 0 + 0 x15 8 ] , % f10 ; \
DES_ R O U N D ( 4 4 , 4 6 , X , X ) \
ldd [ % o 0 + 0 x16 0 ] , % f12 ; \
ldd [ % o 0 + 0 x16 8 ] , % f14 ; \
DES_ R O U N D ( 4 8 , 5 0 , X , X ) \
DES_ R O U N D ( 5 2 , 5 4 , X , X ) \
DES_ R O U N D ( 5 6 , 5 8 , X , X ) \
DES_ R O U N D ( 1 6 , 1 8 , X , X ) \
ldd [ % o 0 + 0 x17 0 ] , % f16 ; \
ldd [ % o 0 + 0 x17 8 ] , % f18 ; \
DES_ I I P ( X , X ) \
DES_ I P ( X , X ) \
DES_ R O U N D ( 2 0 , 2 2 , X , X ) \
ldd [ % o 0 + 0 x50 ] , % f20 ; \
ldd [ % o 0 + 0 x58 ] , % f22 ; \
DES_ R O U N D ( 2 4 , 2 6 , X , X ) \
ldd [ % o 0 + 0 x60 ] , % f24 ; \
ldd [ % o 0 + 0 x68 ] , % f26 ; \
DES_ R O U N D ( 2 8 , 3 0 , X , X ) \
ldd [ % o 0 + 0 x70 ] , % f28 ; \
ldd [ % o 0 + 0 x78 ] , % f30 ; \
DES_ R O U N D ( 0 , 2 , X , X ) \
ldd [ % o 0 + 0 x00 ] , % f0 ; \
ldd [ % o 0 + 0 x08 ] , % f2 ; \
DES_ R O U N D ( 4 , 6 , X , X ) \
ldd [ % o 0 + 0 x10 ] , % f4 ; \
ldd [ % o 0 + 0 x18 ] , % f6 ; \
DES_ R O U N D ( 8 , 1 0 , X , X ) \
ldd [ % o 0 + 0 x20 ] , % f8 ; \
ldd [ % o 0 + 0 x28 ] , % f10 ; \
DES_ R O U N D ( 1 2 , 1 4 , X , X ) \
ldd [ % o 0 + 0 x30 ] , % f12 ; \
ldd [ % o 0 + 0 x38 ] , % f14 ; \
DES_ R O U N D ( 1 6 , 1 8 , X , X ) \
ldd [ % o 0 + 0 x40 ] , % f16 ; \
ldd [ % o 0 + 0 x48 ] , % f18 ; \
DES_ I I P ( X , X )
.align 32
ENTRY( d e s3 _ e d e _ s p a r c64 _ e c b _ c r y p t )
/* %o0=key, %o1=input, %o2=output, %o3=len */
1 : ldd [ % o 1 + 0 x00 ] , % f60
DES3 _ L O O P _ B O D Y ( 6 0 )
std % f60 , [ % o 2 + 0 x00 ]
2012-12-19 15:30:07 -08:00
add % o 1 , 0 x08 , % o 1
2012-08-25 22:37:23 -07:00
subcc % o 3 , 0 x08 , % o 3
bne,p t % i c c , 1 b
add % o 2 , 0 x08 , % o 2
retl
nop
ENDPROC( d e s3 _ e d e _ s p a r c64 _ e c b _ c r y p t )
.align 32
ENTRY( d e s3 _ e d e _ s p a r c64 _ c b c _ e n c r y p t )
/* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
ldd [ % o 4 + 0 x00 ] , % f60
1 : ldd [ % o 1 + 0 x00 ] , % f62
fxor % f60 , % f62 , % f60
DES3 _ L O O P _ B O D Y ( 6 0 )
std % f60 , [ % o 2 + 0 x00 ]
add % o 1 , 0 x08 , % o 1
subcc % o 3 , 0 x08 , % o 3
bne,p t % i c c , 1 b
add % o 2 , 0 x08 , % o 2
retl
std % f60 , [ % o 4 + 0 x00 ]
ENDPROC( d e s3 _ e d e _ s p a r c64 _ c b c _ e n c r y p t )
.align 32
ENTRY( d e s3 _ e d e _ s p a r c64 _ c b c _ d e c r y p t )
/* %o0=key, %o1=input, %o2=output, %o3=len, %o4=IV */
ldd [ % o 4 + 0 x00 ] , % f62
1 : ldx [ % o 1 + 0 x00 ] , % g 1
MOVXTOD_ G 1 _ F 6 0
DES3 _ L O O P _ B O D Y ( 6 0 )
fxor % f62 , % f60 , % f60
MOVXTOD_ G 1 _ F 6 2
std % f60 , [ % o 2 + 0 x00 ]
add % o 1 , 0 x08 , % o 1
subcc % o 3 , 0 x08 , % o 3
bne,p t % i c c , 1 b
add % o 2 , 0 x08 , % o 2
retl
stx % g 1 , [ % o 4 + 0 x00 ]
ENDPROC( d e s3 _ e d e _ s p a r c64 _ c b c _ d e c r y p t )