diff options
author | lloyd <[email protected]> | 2006-08-12 18:19:59 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2006-08-12 18:19:59 +0000 |
commit | b9f901807d9c6e2bd1e1d52d64fe327c9478acb9 (patch) | |
tree | 1f2e9a06e553d1e1075da4160469f90b9dd0e4c1 /modules | |
parent | 81ae351be2dd83ebd301427b7111b875caa7704e (diff) |
Implement the second set of SHA-1 functions in assembler; add some
macros in an attempt to keep the code reasonably clean.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/sha_x86/sha160.cpp | 15 | ||||
-rw-r--r-- | modules/sha_x86/sha1core.S | 59 |
2 files changed, 38 insertions, 36 deletions
diff --git a/modules/sha_x86/sha160.cpp b/modules/sha_x86/sha160.cpp index fce5c9d04..d591eb6d8 100644 --- a/modules/sha_x86/sha160.cpp +++ b/modules/sha_x86/sha160.cpp @@ -77,20 +77,14 @@ void SHA_160::hash(const byte input[]) #endif /* - F1(A,B,C,D,E,W[ 0]); F1(E,A,B,C,D,W[ 1]); F1(D,E,A,B,C,W[ 2]); - F1(C,D,E,A,B,W[ 3]); F1(B,C,D,E,A,W[ 4]); - - - F1(A,B,C,D,E,W[ 5]); + F1(A,B,C,D,E,W[ 0]); F1(E,A,B,C,D,W[ 1]); F1(D,E,A,B,C,W[ 2]); + F1(C,D,E,A,B,W[ 3]); F1(B,C,D,E,A,W[ 4]); F1(A,B,C,D,E,W[ 5]); F1(E,A,B,C,D,W[ 6]); F1(D,E,A,B,C,W[ 7]); F1(C,D,E,A,B,W[ 8]); - F1(B,C,D,E,A,W[ 9]); - - F1(A,B,C,D,E,W[10]); F1(E,A,B,C,D,W[11]); + F1(B,C,D,E,A,W[ 9]); F1(A,B,C,D,E,W[10]); F1(E,A,B,C,D,W[11]); F1(D,E,A,B,C,W[12]); F1(C,D,E,A,B,W[13]); F1(B,C,D,E,A,W[14]); - F1(A,B,C,D,E,W[15]); F1(E,A,B,C,D,W[16]); F1(D,E,A,B,C,W[17]); F1(C,D,E,A,B,W[18]); F1(B,C,D,E,A,W[19]); - */ + F2(A,B,C,D,E,W[20]); F2(E,A,B,C,D,W[21]); F2(D,E,A,B,C,W[22]); F2(C,D,E,A,B,W[23]); F2(B,C,D,E,A,W[24]); F2(A,B,C,D,E,W[25]); @@ -99,6 +93,7 @@ void SHA_160::hash(const byte input[]) F2(D,E,A,B,C,W[32]); F2(C,D,E,A,B,W[33]); F2(B,C,D,E,A,W[34]); F2(A,B,C,D,E,W[35]); F2(E,A,B,C,D,W[36]); F2(D,E,A,B,C,W[37]); F2(C,D,E,A,B,W[38]); F2(B,C,D,E,A,W[39]); + */ F3(A,B,C,D,E,W[40]); F3(E,A,B,C,D,W[41]); F3(D,E,A,B,C,W[42]); F3(C,D,E,A,B,W[43]); F3(B,C,D,E,A,W[44]); F3(A,B,C,D,E,W[45]); diff --git a/modules/sha_x86/sha1core.S b/modules/sha_x86/sha1core.S index 5a09cb00d..17352688d 100644 --- a/modules/sha_x86/sha1core.S +++ b/modules/sha_x86/sha1core.S @@ -53,6 +53,7 @@ sha160_core: movl 16(%ebp), %esi #define MAGIC1 $0x5A827999 +#define MAGIC2 $0x6ED9EBA1 #define FUNC1(B, C, D, TEMP) \ movl C, TEMP ; \ @@ -65,9 +66,10 @@ sha160_core: xorl C, TEMP ; \ xorl D, TEMP -#define F(A, B, C, D, E, TEMP, MSG, MAGIC, FUNC) \ +#define F(A, B, C, D, E, TEMP, MAGIC, FUNC) \ FUNC(B, C, D, TEMP) ; \ - addl MSG, E ; \ + addl 0(%edi), E ; \ + addl $4, %edi ; \ addl TEMP, E ; \ addl MAGIC, E ; \ roll $5, A ; \ @@ -75,30 +77,35 @@ sha160_core: rorl $5, A ; \ roll $30, B - F(%eax, %ebx, %ecx, %edx, %esi, %ebp, 0(%edi), MAGIC1, FUNC1) - F(%esi, %eax, %ebx, %ecx, %edx, %ebp, 4(%edi), MAGIC1, FUNC1) - F(%edx, %esi, %eax, %ebx, %ecx, %ebp, 8(%edi), MAGIC1, FUNC1) - F(%ecx, %edx, %esi, %eax, %ebx, %ebp, 12(%edi), MAGIC1, FUNC1) - F(%ebx, %ecx, %edx, %esi, %eax, %ebp, 16(%edi), MAGIC1, FUNC1) - - F(%eax, %ebx, %ecx, %edx, %esi, %ebp, 20(%edi), MAGIC1, FUNC1) - F(%esi, %eax, %ebx, %ecx, %edx, %ebp, 24(%edi), MAGIC1, FUNC1) - F(%edx, %esi, %eax, %ebx, %ecx, %ebp, 28(%edi), MAGIC1, FUNC1) - F(%ecx, %edx, %esi, %eax, %ebx, %ebp, 32(%edi), MAGIC1, FUNC1) - F(%ebx, %ecx, %edx, %esi, %eax, %ebp, 36(%edi), MAGIC1, FUNC1) - - F(%eax, %ebx, %ecx, %edx, %esi, %ebp, 40(%edi), MAGIC1, FUNC1) - F(%esi, %eax, %ebx, %ecx, %edx, %ebp, 44(%edi), MAGIC1, FUNC1) - F(%edx, %esi, %eax, %ebx, %ecx, %ebp, 48(%edi), MAGIC1, FUNC1) - F(%ecx, %edx, %esi, %eax, %ebx, %ebp, 52(%edi), MAGIC1, FUNC1) - F(%ebx, %ecx, %edx, %esi, %eax, %ebp, 56(%edi), MAGIC1, FUNC1) - - F(%eax, %ebx, %ecx, %edx, %esi, %ebp, 60(%edi), MAGIC1, FUNC1) - F(%esi, %eax, %ebx, %ecx, %edx, %ebp, 64(%edi), MAGIC1, FUNC1) - F(%edx, %esi, %eax, %ebx, %ecx, %ebp, 68(%edi), MAGIC1, FUNC1) - F(%ecx, %edx, %esi, %eax, %ebx, %ebp, 72(%edi), MAGIC1, FUNC1) - F(%ebx, %ecx, %edx, %esi, %eax, %ebp, 76(%edi), MAGIC1, FUNC1) - +#define F1(A, B, C, D, E, TEMP) \ + F(A, B, C, D, E, TEMP, MAGIC1, FUNC1) + +#define F2(A, B, C, D, E, TEMP) \ + F(A, B, C, D, E, TEMP, MAGIC2, FUNC2) + +#define F_BLOCK(F) \ + F(%eax, %ebx, %ecx, %edx, %esi, %ebp) ; \ + F(%esi, %eax, %ebx, %ecx, %edx, %ebp) ; \ + F(%edx, %esi, %eax, %ebx, %ecx, %ebp) ; \ + F(%ecx, %edx, %esi, %eax, %ebx, %ebp) ; \ + F(%ebx, %ecx, %edx, %esi, %eax, %ebp) +/* + F1(%eax, %ebx, %ecx, %edx, %esi, %ebp) + F1(%esi, %eax, %ebx, %ecx, %edx, %ebp) + F1(%edx, %esi, %eax, %ebx, %ecx, %ebp) + F1(%ecx, %edx, %esi, %eax, %ebx, %ebp) + F1(%ebx, %ecx, %edx, %esi, %eax, %ebp) +*/ + F_BLOCK(F1) + F_BLOCK(F1) + F_BLOCK(F1) + F_BLOCK(F1) + + F_BLOCK(F2) + F_BLOCK(F2) + F_BLOCK(F2) + F_BLOCK(F2) + movl 20(%esp), %ebp movl %eax, 0(%ebp) movl %ebx, 4(%ebp) |