class com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt extends com.sun.crypto.provider.GaloisCounterMode$GCMEngine
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt
super_class: com.sun.crypto.provider.GaloisCounterMode$GCMEngine
{
com.sun.crypto.provider.GaloisCounterMode$GCMOperation op;
descriptor: Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
flags: (0x0000)
int processed;
descriptor: I
flags: (0x0000)
final com.sun.crypto.provider.GaloisCounterMode this$0;
descriptor: Lcom/sun/crypto/provider/GaloisCounterMode;
flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC
void <init>(com.sun.crypto.provider.GaloisCounterMode, com.sun.crypto.provider.SymmetricCipher);
descriptor: (Lcom/sun/crypto/provider/GaloisCounterMode;Lcom/sun/crypto/provider/SymmetricCipher;)V
flags: (0x0000)
Code:
stack=5, locals=3, args_size=3
start local 0 start local 2 0: aload 0
aload 1
putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
1: aload 0
aload 1
aload 2
invokespecial com.sun.crypto.provider.GaloisCounterMode$GCMEngine.<init>:(Lcom/sun/crypto/provider/GaloisCounterMode;Lcom/sun/crypto/provider/SymmetricCipher;)V
2: aload 0
iconst_0
putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
3: aload 0
new com.sun.crypto.provider.GaloisCounterMode$EncryptOp
dup
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.gctr:Lcom/sun/crypto/provider/GCTR;
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
invokespecial com.sun.crypto.provider.GaloisCounterMode$EncryptOp.<init>:(Lcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)V
putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
4: return
end local 2 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 5 2 blockCipher Lcom/sun/crypto/provider/SymmetricCipher;
MethodParameters:
Name Flags
this$0 final
blockCipher
private void checkDataLength(int[]);
descriptor: ([I)V
flags: (0x0082) ACC_PRIVATE, ACC_VARARGS
Code:
stack=3, locals=7, args_size=2
start local 0 start local 1 0: ldc 2147483647
istore 2
start local 2 1: aload 1
dup
astore 6
arraylength
istore 5
iconst_0
istore 4
goto 7
StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt int[] int top int int int[]
StackMap stack:
2: aload 6
iload 4
iaload
istore 3
start local 3 3: iload 2
iload 3
invokestatic java.lang.Math.subtractExact:(II)I
istore 2
4: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
iload 2
if_icmple 6
5: new java.security.ProviderException
dup
ldc "SunJCE provider only supports input size up to 2147483647 bytes"
invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;)V
athrow
end local 3 6: StackMap locals:
StackMap stack:
iinc 4 1
StackMap locals:
StackMap stack:
7: iload 4
iload 5
if_icmplt 2
8: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 9 1 lengths [I
1 9 2 max I
3 6 3 len I
MethodParameters:
Name Flags
lengths
public int getOutputSize(int, boolean);
descriptor: (IZ)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
istore 3
start local 3 1: iload 2
ifeq 3
2: iload 3
iload 1
iadd
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
iadd
ireturn
3: StackMap locals: int
StackMap stack:
iload 3
iload 1
iadd
istore 3
4: iload 3
iload 3
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.blockCipher:Lcom/sun/crypto/provider/SymmetricCipher;
invokevirtual com.sun.crypto.provider.SymmetricCipher.getBlockSize:()I
irem
isub
ireturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 5 1 inLen I
0 5 2 isFinal Z
1 5 3 len I
MethodParameters:
Name Flags
inLen
isFinal
byte[] doUpdate(byte[], int, int);
descriptor: ([BII)[B
flags: (0x0000)
Code:
stack=6, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
1: aload 0
iload 3
iconst_0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getOutputSize:(IZ)I
newarray 8
astore 4
start local 4 2: aload 0
aload 1
iload 2
iload 3
aload 4
iconst_0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.doUpdate:([BII[BI)I
pop
3: goto 6
StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt byte[] int int byte[]
StackMap stack: javax.crypto.ShortBufferException
4: astore 5
start local 5 5: new java.security.ProviderException
dup
ldc "output buffer creation failed"
aload 5
invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 5 6: StackMap locals:
StackMap stack:
aload 4
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 7 1 in [B
0 7 2 inOff I
0 7 3 inLen I
2 7 4 output [B
5 6 5 e Ljavax/crypto/ShortBufferException;
Exception table:
from to target type
2 3 4 Class javax.crypto.ShortBufferException
MethodParameters:
Name Flags
in
inOff
inLen
public int doUpdate(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=9, locals=11, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 0: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
1: iconst_0
istore 6
start local 6 2: aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
istore 7
start local 7 3: aload 0
iconst_2
newarray 10
dup
iconst_0
iload 3
iastore
dup
iconst_1
iload 7
iastore
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.checkDataLength:([I)V
4: aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
5: aload 0
aload 1
iload 2
aload 4
iload 5
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:([BI[BI)[B
astore 4
6: iload 7
ifle 18
7: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
astore 8
start local 8 8: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
iload 7
isub
istore 9
start local 9 9: iload 3
iload 7
iadd
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
if_icmplt 18
10: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
newarray 8
astore 10
start local 10 11: aload 8
iconst_0
aload 10
iconst_0
iload 7
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
12: aload 1
iload 2
aload 10
iload 7
iload 9
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
13: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
aload 10
iconst_0
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
aload 4
iload 5
invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
istore 6
14: iload 2
iload 9
iadd
istore 2
15: iload 3
iload 9
isub
istore 3
16: iload 5
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
iadd
istore 5
17: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.reset:()V
end local 10 end local 9 end local 8 18: StackMap locals: int int
StackMap stack:
iload 3
sipush 8192
if_icmplt 26
19: aload 1
iload 2
iload 3
aload 4
20: iload 5
aload 4
iload 5
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.gctr:Lcom/sun/crypto/provider/GCTR;
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
21: invokestatic com.sun.crypto.provider.GaloisCounterMode.implGCMCrypt:([BII[BI[BILcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)I
istore 8
start local 8 22: iload 6
iload 8
iadd
istore 6
23: iload 2
iload 8
iadd
istore 2
24: iload 3
iload 8
isub
istore 3
25: iload 5
iload 8
iadd
istore 5
end local 8 26: StackMap locals:
StackMap stack:
iload 3
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
if_icmplt 31
27: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
aload 1
iload 2
iload 3
aload 4
iload 5
invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
istore 8
start local 8 28: iload 6
iload 8
iadd
istore 6
29: iload 2
iload 8
iadd
istore 2
30: iload 3
iload 8
isub
istore 3
end local 8 31: StackMap locals:
StackMap stack:
iload 3
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
irem
istore 8
start local 8 32: iload 8
ifle 36
33: aload 0
iload 8
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.initBuffer:(I)V
34: iload 3
iload 8
isub
istore 3
35: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
aload 1
iload 2
iload 3
iadd
iload 8
invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
36: StackMap locals: int
StackMap stack:
aload 0
aload 4
iload 6
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreOut:([BI)V
37: aload 0
dup
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
iload 6
iadd
putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
38: iload 6
ireturn
end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 39 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 39 1 in [B
0 39 2 inOfs I
0 39 3 inLen I
0 39 4 out [B
0 39 5 outOfs I
2 39 6 len I
3 39 7 bLen I
8 18 8 buffer [B
9 18 9 remainder I
11 18 10 block [B
22 26 8 r I
28 31 8 r I
32 39 8 remainder I
Exceptions:
throws javax.crypto.ShortBufferException
MethodParameters:
Name Flags
in
inOfs
inLen
out
outOfs
public int doUpdate(java.nio.ByteBuffer, java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=9, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
1: aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
istore 3
start local 3 2: aload 0
iconst_2
newarray 10
dup
iconst_0
aload 1
invokevirtual java.nio.ByteBuffer.remaining:()I
iastore
dup
iconst_1
iload 3
iastore
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.checkDataLength:([I)V
3: iconst_0
istore 4
start local 4 4: aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
5: aload 0
aload 1
aload 2
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
astore 2
6: iload 3
ifle 17
7: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
iload 3
isub
istore 5
start local 5 8: aload 1
invokevirtual java.nio.ByteBuffer.remaining:()I
iload 5
if_icmplt 17
9: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
newarray 8
astore 6
start local 6 10: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
astore 7
start local 7 11: aload 7
aload 6
iconst_0
iload 3
invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
pop
12: aload 1
aload 6
iload 3
iload 5
invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
pop
13: iload 4
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
aload 6
iconst_0
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
14: aload 2
15: invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
iadd
istore 4
16: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.reset:()V
end local 7 end local 6 end local 5 17: StackMap locals: int int
StackMap stack:
aload 1
invokevirtual java.nio.ByteBuffer.remaining:()I
istore 5
start local 5 18: iload 5
sipush 8192
if_icmplt 22
19: aload 0
aload 1
aload 2
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.implGCMCrypt:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
istore 6
start local 6 20: iload 5
iload 6
isub
istore 5
21: iload 4
iload 6
iadd
istore 4
end local 6 22: StackMap locals: int
StackMap stack:
iload 5
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
if_icmplt 26
23: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
aload 1
aload 2
invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
istore 6
start local 6 24: iload 5
iload 6
isub
istore 5
25: iload 4
iload 6
iadd
istore 4
end local 6 26: StackMap locals:
StackMap stack:
iload 5
ifle 34
27: aload 0
iload 5
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.initBuffer:(I)V
28: iload 5
newarray 8
astore 7
start local 7 29: aload 1
aload 7
invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
pop
30: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
aload 7
invokevirtual java.io.ByteArrayOutputStream.write:([B)V
31: goto 34
StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt java.nio.ByteBuffer java.nio.ByteBuffer int int int top byte[]
StackMap stack: java.io.IOException
32: astore 8
start local 8 33: new java.lang.RuntimeException
dup
aload 8
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
athrow
end local 8 end local 7 34: StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt java.nio.ByteBuffer java.nio.ByteBuffer int int int
StackMap stack:
aload 0
aload 2
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreDst:(Ljava/nio/ByteBuffer;)V
35: aload 0
dup
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
iload 4
iadd
putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
36: iload 4
ireturn
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 37 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 37 1 src Ljava/nio/ByteBuffer;
0 37 2 dst Ljava/nio/ByteBuffer;
2 37 3 bLen I
4 37 4 len I
8 17 5 remainder I
10 17 6 block [B
11 17 7 buffer Ljava/nio/ByteBuffer;
18 37 5 srcLen I
20 22 6 resultLen I
24 26 6 resultLen I
29 34 7 b [B
33 34 8 e Ljava/io/IOException;
Exception table:
from to target type
30 31 32 Class java.io.IOException
Exceptions:
throws javax.crypto.ShortBufferException
MethodParameters:
Name Flags
src
dst
public int doFinal(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=11, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 0: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
1: aload 4
iload 5
aload 0
iload 3
2: iconst_1
3: invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getOutputSize:(IZ)I
invokestatic sun.security.util.ArrayUtil.nullAndBoundsCheck:([BII)V
4: goto 7
StackMap locals:
StackMap stack: java.lang.ArrayIndexOutOfBoundsException
5: pop
6: new javax.crypto.ShortBufferException
dup
ldc "Output buffer invalid"
invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
athrow
7: StackMap locals:
StackMap stack:
aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
istore 6
start local 6 8: aload 0
iconst_3
newarray 10
dup
iconst_0
iload 3
iastore
dup
iconst_1
iload 6
iastore
dup
iconst_2
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
iastore
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.checkDataLength:([I)V
9: aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
10: aload 0
aload 1
iload 2
aload 4
iload 5
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:([BI[BI)[B
astore 4
11: iconst_0
istore 7
start local 7 12: iload 6
ifle 29
13: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
astore 9
start local 9 14: iload 6
iload 3
iadd
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
if_icmplt 23
15: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
newarray 8
astore 8
start local 8 16: aload 0
aload 9
iconst_0
aload 1
iload 2
iload 3
aload 8
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.mergeBlock:([BI[BII[B)I
istore 10
start local 10 17: iload 2
iload 10
iadd
istore 2
18: iload 3
iload 10
isub
istore 3
19: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
aload 8
iconst_0
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
aload 4
iload 5
invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
pop
20: iload 5
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
iadd
istore 5
21: iload 7
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
iadd
istore 7
end local 10 22: goto 29
end local 8 23: StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt byte[] int int byte[] int int int top byte[]
StackMap stack:
iload 6
iload 3
iadd
newarray 8
astore 8
start local 8 24: aload 9
iconst_0
aload 8
iconst_0
iload 6
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
25: aload 1
iload 2
aload 8
iload 6
iload 3
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
26: iload 3
iload 6
iadd
istore 3
27: aload 8
astore 1
28: iconst_0
istore 2
end local 9 end local 8 29: StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt byte[] int int byte[] int int int
StackMap stack:
iload 7
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
aload 1
iload 2
iload 3
aload 4
iload 5
invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.doFinal:([BII[BI)I
iadd
istore 7
30: iload 5
iload 3
iadd
istore 5
31: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.sizeOfAAD:I
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
iload 7
iadd
invokestatic com.sun.crypto.provider.GaloisCounterMode.getLengthBlock:(II)[B
astore 8
start local 8 32: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
aload 8
invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
pop
33: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
invokevirtual com.sun.crypto.provider.GHASH.digest:()[B
astore 8
34: new com.sun.crypto.provider.GCTR
dup
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.blockCipher:Lcom/sun/crypto/provider/SymmetricCipher;
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.preCounterBlock:[B
invokespecial com.sun.crypto.provider.GCTR.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;[B)V
aload 8
iconst_0
35: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
aload 8
iconst_0
36: invokevirtual com.sun.crypto.provider.GCTR.doFinal:([BII[BI)I
pop
37: aload 8
iconst_0
aload 4
iload 5
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
38: iload 7
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
iadd
istore 7
39: aload 0
aload 4
iload 7
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreOut:([BI)V
40: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
iconst_1
putfield com.sun.crypto.provider.GaloisCounterMode.reInit:Z
41: iload 7
ireturn
end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 42 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 42 1 in [B
0 42 2 inOfs I
0 42 3 inLen I
0 42 4 out [B
0 42 5 outOfs I
8 42 6 bLen I
12 42 7 len I
16 23 8 block [B
24 29 8 block [B
32 42 8 block [B
14 29 9 buffer [B
17 22 10 r I
Exception table:
from to target type
1 4 5 Class java.lang.ArrayIndexOutOfBoundsException
Exceptions:
throws javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException
MethodParameters:
Name Flags
in
inOfs
inLen
out
outOfs
public int doFinal(java.nio.ByteBuffer, java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
1: aload 0
aload 1
aload 2
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
astore 2
2: aload 1
invokevirtual java.nio.ByteBuffer.remaining:()I
aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
iadd
istore 3
start local 3 3: aload 0
iconst_2
newarray 10
dup
iconst_0
iload 3
iastore
dup
iconst_1
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
iastore
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.checkDataLength:([I)V
4: aload 2
invokevirtual java.nio.ByteBuffer.remaining:()I
iload 3
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
iadd
if_icmpge 8
5: new javax.crypto.ShortBufferException
dup
new java.lang.StringBuilder
dup
ldc "Output buffer too small, mustbe at least "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
6: iload 3
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
iadd
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
ldc " bytes long"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
7: invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
athrow
8: StackMap locals: int
StackMap stack:
aload 0
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
9: iload 3
ifle 16
10: aload 0
dup
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
aload 0
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
11: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
ifnull 12
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.size:()I
ifne 13
StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt java.nio.ByteBuffer java.nio.ByteBuffer int
StackMap stack: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt int com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt com.sun.crypto.provider.GaloisCounterMode$GCMOperation
12: aconst_null
goto 14
13: StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt java.nio.ByteBuffer java.nio.ByteBuffer int
StackMap stack: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt int com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt com.sun.crypto.provider.GaloisCounterMode$GCMOperation
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt java.nio.ByteBuffer java.nio.ByteBuffer int
StackMap stack: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt int com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt com.sun.crypto.provider.GaloisCounterMode$GCMOperation java.nio.ByteBuffer
14: aload 1
aload 2
15: invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.doLastBlock:(Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
iadd
putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
16: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
ifnull 18
17: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
invokevirtual java.io.ByteArrayOutputStream.reset:()V
18: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.sizeOfAAD:I
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
invokestatic com.sun.crypto.provider.GaloisCounterMode.getLengthBlock:(II)[B
astore 4
start local 4 19: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
aload 4
invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
pop
20: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
invokevirtual com.sun.crypto.provider.GHASH.digest:()[B
astore 4
21: new com.sun.crypto.provider.GCTR
dup
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.blockCipher:Lcom/sun/crypto/provider/SymmetricCipher;
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.preCounterBlock:[B
invokespecial com.sun.crypto.provider.GCTR.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;[B)V
aload 4
iconst_0
22: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
aload 4
iconst_0
23: invokevirtual com.sun.crypto.provider.GCTR.doFinal:([BII[BI)I
pop
24: aload 2
aload 4
iconst_0
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
pop
25: aload 0
aload 2
invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreDst:(Ljava/nio/ByteBuffer;)V
26: aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
iconst_1
putfield com.sun.crypto.provider.GaloisCounterMode.reInit:Z
27: iload 3
aload 0
getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
iadd
ireturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 28 0 this Lcom/sun/crypto/provider/GaloisCounterMode$GCMEncrypt;
0 28 1 src Ljava/nio/ByteBuffer;
0 28 2 dst Ljava/nio/ByteBuffer;
3 28 3 len I
19 28 4 block [B
Exceptions:
throws javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException
MethodParameters:
Name Flags
src
dst
}
SourceFile: "GaloisCounterMode.java"
NestHost: com.sun.crypto.provider.GaloisCounterMode
InnerClasses:
final EncryptOp = com.sun.crypto.provider.GaloisCounterMode$EncryptOp of com.sun.crypto.provider.GaloisCounterMode
GCMEncrypt = com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt of com.sun.crypto.provider.GaloisCounterMode
abstract GCMEngine = com.sun.crypto.provider.GaloisCounterMode$GCMEngine of com.sun.crypto.provider.GaloisCounterMode
public abstract GCMOperation = com.sun.crypto.provider.GaloisCounterMode$GCMOperation of com.sun.crypto.provider.GaloisCounterMode