Implement PoT proving and verification optimized for AES (aarch64) #270
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This implements optimized implementation of PoT proving and verification on aarch64.
Before (Raspberry PI 5):
After:
I'm not sure why runtime detection is so expensive in
aescrate (RustCrypto/block-ciphers#484), but we certainly avoid doing the check on each iteration by implementing an efficient implementation + saving some on extra XORs. When compiled withRUSTFLAGS="-C target-feature=+aes"aescrate improves, but not quite to the same level as optimized implementation, so this is a substantial win either way for generic aarch64 platforms (not sure about the impact on macOS, I think+aesis implied there by default):Moreover, runtime feature detection now happens once per 200M iterations instead of on each iteration, massively decreasing its cost.
Proving is not expected to be used on aarch64, but for those who do it will be faster now too.