diff --git a/x86/sha1-f2.nlms b/x86/sha1-f2.nlms index 2eb6ed6c8d5bb4e938d7b299f988581dfe202d15..34e660739ebd701bb79f8a8509abb53d7dd92b31 100644 --- a/x86/sha1-f2.nlms +++ b/x86/sha1-f2.nlms @@ -13,36 +13,41 @@ define(`SD',`%edx') define(`SE',`%ebp') define(`DATA',`%esp') define(`TMP',`%edi') -dnl define(`TMP2',`%esi') -define(`KVALUE',`%esi') - +define(`TMP2',`%esi') +dnl define(`KVALUE',`%esi') +define(`TMP3',`%esi') define(`COUNT', `84(%esp)') +define(<K2VALUE>, <<$>0x6ED9EBA1>) + dnl Expands to 4*i, or to the empty string if i is zero define(`OFFSET', `ifelse($1,0,,eval(4*$1))') +dnl The F2 round sets +dnl +dnl e += (a <<< 5) + (b ^ c ^ d) + k + w +dnl +dnl Access inputs in order d, c, b, a, to give maximum time to +dnl have values ready. + dnl ROUND(a, b, c, d, e, i) define(`ROUND', ` mov OFFSET(eval($6 % 16)) (DATA), TMP xor OFFSET(eval(($6 + 2) % 16)) (DATA), TMP + mov $4, TMP2 + xor $3, TMP2 xor OFFSET(eval(($6 + 8) % 16)) (DATA), TMP xor OFFSET(eval(($6 + 13) % 16)) (DATA), TMP rol `$'1, TMP mov TMP, OFFSET(eval($6 % 16)) (DATA) - - add KVALUE, $5 - add TMP, $5 - - mov $2, TMP - xor $3, TMP - xor $4, TMP - add TMP, $5 - - mov $1, TMP - rol `$'5, TMP - add TMP, $5 - + xor $2, TMP2 + lea K2VALUE(TMP, $5), TMP + add TMP2, TMP rol `$'30, $2 + mov $1, TMP3 + rol `$'5, TMP3 + add TMP3, $5 + add TMP, $5 ') .text