Commit Graph

28 Commits

Author SHA1 Message Date
Stephen Heumann
6c1d703b84 Don't duplicate identical code for the last three schedule computation phases.
This shrinks code size and is probably faster with accelerators due to caching.
2017-06-30 12:49:51 -05:00
Stephen Heumann
d97e0c0153 Don't update index value in each unrolled loop iteration. 2017-06-30 00:52:25 -05:00
Stephen Heumann
2d8c85bd98 Unroll SHA-1 loop with variables substituted to avoid cycling values around.
SHA-1 has five state variables (a,b,c,d,e), and each iteration of the core loop cycles their values around (e.g. a->b), in some cases with modifications. By unrolling the loop by a factor of five and appropriately substituting the values operated on in each iteration, we can avoid actually doing the copies implied by this cycling, which gives a fairly significant performance gain.
2017-06-30 00:33:16 -05:00
Stephen Heumann
aab47e38e7 Compute SHA-1 message schedule 20 elements at a time, reusing storage.
The reduces the storage needed and boosts performance, since the whole schedule is contained in the direct page.
2017-06-29 22:22:06 -05:00
Stephen Heumann
7182fc5817 Use separate loops for the four parts of the SHA-1 computation. 2017-06-29 20:51:36 -05:00
Stephen Heumann
dfdb3186fd Add macros for rotates. 2017-06-29 20:41:49 -05:00
Stephen Heumann
ad4e0a0dd5 More SHA-1 optimizations. 2017-06-29 20:16:22 -05:00
Stephen Heumann
13654c0888 Small optimizations in SHA-1 computation. 2017-06-29 19:52:52 -05:00
Stephen Heumann
a519776847 Add implementation of the basic block-processing function for SHA-1. 2017-06-29 16:54:49 -05:00
Stephen Heumann
1cb8841a46 state -> context 2017-06-29 16:52:34 -05:00
Stephen Heumann
f60585cc3e Add note about context size. 2017-06-28 01:26:24 -05:00
Stephen Heumann
d4baf7dbe4 Usage message and indentation cleanups in test program. 2017-06-27 23:42:20 -05:00
Stephen Heumann
4ffd064204 Add comments and copyright notices. 2017-06-27 23:30:58 -05:00
Stephen Heumann
e46264f0c4 Small decryption optimization, saving a value in a register between rounds. 2017-06-27 22:35:57 -05:00
Stephen Heumann
634ff1e865 Optimize decryption code.
AddRoundKey is integrated into InvMixColumn and InvFinalRoundStep, rather than being done separately.
2017-06-27 20:44:14 -05:00
Stephen Heumann
18dabeb621 Allow number of test iters to be given on command line. 2017-06-27 20:07:07 -05:00
Stephen Heumann
d9b8467bb7 Rename some interfaces. 2017-06-27 19:42:53 -05:00
Stephen Heumann
14fe68de79 Time decryption as well as encryption. 2017-06-27 19:35:38 -05:00
Stephen Heumann
a522ab6d88 Optimize decryption a bit. 2017-06-27 19:24:06 -05:00
Stephen Heumann
46fcb3badc Add support for AES-256 decryption. 2017-06-27 18:35:04 -05:00
Stephen Heumann
0e3e511ba8 Add basic decryption implementation for AES-128 and AES-192. 2017-06-27 18:17:00 -05:00
Stephen Heumann
9d9f62444d Add timing test. 2017-06-27 12:45:58 -05:00
Stephen Heumann
4314644e75 Update to also support AES-192 and AES-256. 2017-06-27 01:36:56 -05:00
Stephen Heumann
293828584f Optimize key expansion a bit, removing unnecessary loads. 2017-06-26 22:22:55 -05:00
Stephen Heumann
f04000c83d Save a few cycles by not reloading the last written byte between rounds. 2017-06-26 21:49:16 -05:00
Stephen Heumann
75aac0daa9 Save a couple values on the stack rather than looking them up again.
This is cycle-neutral (assuming a page-aligned DP), but it reduces instruction bytes and therefore may give a speedup on accelerators with caches.
2017-06-26 21:13:25 -05:00
Stephen Heumann
301021e75e Cut out a few instructions by reusing subexpressions in registers. 2017-06-26 20:53:17 -05:00
Stephen Heumann
3df0080371 Initial working implementation of AES-128 encryption. 2017-06-26 20:41:44 -05:00