Use BoringSSL implementation for _CryptoExtras.AES._CTR
#229
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.
Motivation:
_CryptoExtras
provides AES CTR mode with a Swift implementation, which operates one block at a time. For encrypting larger plaintexts this can become a bottleneck. BoringSSL provides an implementation which makes use of hardware capabilities if present for parallel block processing.Modifications:
_CryptoExtras.AES._CTR.encrypt
anddecrypt
with a call to BoringSSLAES_ctr128_encrypt
function.@inlinable
for generic specialization.AES._CTR.Nonce.incrementCounter()
, which was only used by the Swift implementation.Result:
The runtime performance is improved by around 93% for encryption of larger plaintexts, e.g. 4k: