RFR: 8267125: AES Galois CounterMode (GCM) interleaved implementation using AVX512 + VAES instructions [v4]
Valerie Peng
valeriep at openjdk.java.net
Fri Jul 16 19:44:53 UTC 2021
On Wed, 14 Jul 2021 21:02:01 GMT, Smita Kamath <svkamath at openjdk.org> wrote:
>> I would like to submit AES-GCM optimization for x86_64 architectures supporting AVX3+VAES (Evex encoded AES). This optimization interleaves AES and GHASH operations.
>> Performance gain of ~1.5x - 2x for message sizes 8k and above.
>
> Smita Kamath has updated the pull request incrementally with one additional commit since the last revision:
>
> Updated AES-GCM intrinsic to match latest Java Code
src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java line 629:
> 627: GCTR gctr;
> 628: GHASH ghash;
> 629: GCMOperation op;
It seems clearer to initialize "op" in GCMEngine ctor since it's declared here. There is already logic in its method checking whether we are doing encryption or decryption.
src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java line 650:
> 648: int originalOutOfs = 0;
> 649: byte[] in;
> 650: byte[] out;
The name "in", "out" are almost used in all calls, it's hard to tell when these two are actually used. Can we rename them to make them more unique?
src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java line 724:
> 722: } else {
> 723: ct = in;
> 724: }
This can just be:
byte[] ct = (encryption? out : in);
Since you only use this 'ct' variable inside the else block on line 746, move this down to that block.
src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java line 743:
> 741: dst.array(), dst.arrayOffset() + dst.position(),
> 742: gctr, ghash);
> 743: }
Can we use another ByteBuffer variable to avoid almost-duplicate calls?
ByteBuffer ct = (encryption? dst : src);
rlen -= GaloisCounterMode.implGCMCrypt(src.array(),
src.arrayOffset() + src.position(), src.remaining(),
ct.array(), ct.arrayOffset() + ct.position(),
dst.array(), dst.arrayOffset() + dst.position(),
gctr, ghash);
-------------
PR: https://git.openjdk.java.net/jdk/pull/4019
More information about the security-dev
mailing list