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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 2 // com.sun.crypto.provider.SymmetricCipher blockCipher
         0: .line 1042
            aload 0 /* this */
            aload 1
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
         1: .line 1043
            aload 0 /* this */
            aload 1
            aload 2 /* blockCipher */
            invokespecial com.sun.crypto.provider.GaloisCounterMode$GCMEngine.<init>:(Lcom/sun/crypto/provider/GaloisCounterMode;Lcom/sun/crypto/provider/SymmetricCipher;)V
         2: .line 1039
            aload 0 /* this */
            iconst_0
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
         3: .line 1044
            aload 0 /* this */
            new com.sun.crypto.provider.GaloisCounterMode$EncryptOp
            dup
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.gctr:Lcom/sun/crypto/provider/GCTR;
            aload 0 /* this */
            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: .line 1045
            return
        end local 2 // com.sun.crypto.provider.SymmetricCipher blockCipher
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 1 // int[] lengths
         0: .line 1053
            ldc 2147483647
            istore 2 /* max */
        start local 2 // int max
         1: .line 1054
            aload 1 /* lengths */
            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 /* len */
        start local 3 // int len
         3: .line 1055
            iload 2 /* max */
            iload 3 /* len */
            invokestatic java.lang.Math.subtractExact:(II)I
            istore 2 /* max */
         4: .line 1056
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
            iload 2 /* max */
            if_icmple 6
         5: .line 1057
            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 // int len
         6: .line 1054
      StackMap locals:
      StackMap stack:
            iinc 4 1
      StackMap locals:
      StackMap stack:
         7: iload 4
            iload 5
            if_icmplt 2
         8: .line 1061
            return
        end local 2 // int max
        end local 1 // int[] lengths
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 1 // int inLen
        start local 2 // boolean isFinal
         0: .line 1065
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
            istore 3 /* len */
        start local 3 // int len
         1: .line 1066
            iload 2 /* isFinal */
            ifeq 3
         2: .line 1067
            iload 3 /* len */
            iload 1 /* inLen */
            iadd
            aload 0 /* this */
            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: .line 1069
      StackMap locals: int
      StackMap stack:
            iload 3 /* len */
            iload 1 /* inLen */
            iadd
            istore 3 /* len */
         4: .line 1070
            iload 3 /* len */
            iload 3 /* len */
            aload 0 /* this */
            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 // int len
        end local 2 // boolean isFinal
        end local 1 // int inLen
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 1 // byte[] in
        start local 2 // int inOff
        start local 3 // int inLen
         0: .line 1076
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
         1: .line 1077
            aload 0 /* this */
            iload 3 /* inLen */
            iconst_0
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getOutputSize:(IZ)I
            newarray 8
            astore 4 /* output */
        start local 4 // byte[] output
         2: .line 1079
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOff */
            iload 3 /* inLen */
            aload 4 /* output */
            iconst_0
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.doUpdate:([BII[BI)I
            pop
         3: .line 1080
            goto 6
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt byte[] int int byte[]
      StackMap stack: javax.crypto.ShortBufferException
         4: astore 5 /* e */
        start local 5 // javax.crypto.ShortBufferException e
         5: .line 1082
            new java.security.ProviderException
            dup
            ldc "output buffer creation failed"
            aload 5 /* e */
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // javax.crypto.ShortBufferException e
         6: .line 1084
      StackMap locals:
      StackMap stack:
            aload 4 /* output */
            areturn
        end local 4 // byte[] output
        end local 3 // int inLen
        end local 2 // int inOff
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 1 // byte[] in
        start local 2 // int inOfs
        start local 3 // int inLen
        start local 4 // byte[] out
        start local 5 // int outOfs
         0: .line 1096
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
         1: .line 1100
            iconst_0
            istore 6 /* len */
        start local 6 // int len
         2: .line 1101
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
            istore 7 /* bLen */
        start local 7 // int bLen
         3: .line 1102
            aload 0 /* this */
            iconst_2
            newarray 10
            dup
            iconst_0
            iload 3 /* inLen */
            iastore
            dup
            iconst_1
            iload 7 /* bLen */
            iastore
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.checkDataLength:([I)V
         4: .line 1104
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
         5: .line 1105
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            aload 4 /* out */
            iload 5 /* outOfs */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:([BI[BI)[B
            astore 4 /* out */
         6: .line 1108
            iload 7 /* bLen */
            ifle 18
         7: .line 1109
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 8 /* buffer */
        start local 8 // byte[] buffer
         8: .line 1111
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            iload 7 /* bLen */
            isub
            istore 9 /* remainder */
        start local 9 // int remainder
         9: .line 1115
            iload 3 /* inLen */
            iload 7 /* bLen */
            iadd
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            if_icmplt 18
        10: .line 1116
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            newarray 8
            astore 10 /* block */
        start local 10 // byte[] block
        11: .line 1118
            aload 8 /* buffer */
            iconst_0
            aload 10 /* block */
            iconst_0
            iload 7 /* bLen */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        12: .line 1119
            aload 1 /* in */
            iload 2 /* inOfs */
            aload 10 /* block */
            iload 7 /* bLen */
            iload 9 /* remainder */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        13: .line 1121
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            aload 10 /* block */
            iconst_0
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            aload 4 /* out */
            iload 5 /* outOfs */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
            istore 6 /* len */
        14: .line 1122
            iload 2 /* inOfs */
            iload 9 /* remainder */
            iadd
            istore 2 /* inOfs */
        15: .line 1123
            iload 3 /* inLen */
            iload 9 /* remainder */
            isub
            istore 3 /* inLen */
        16: .line 1124
            iload 5 /* outOfs */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            iadd
            istore 5 /* outOfs */
        17: .line 1125
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.reset:()V
        end local 10 // byte[] block
        end local 9 // int remainder
        end local 8 // byte[] buffer
        18: .line 1130
      StackMap locals: int int
      StackMap stack:
            iload 3 /* inLen */
            sipush 8192
            if_icmplt 26
        19: .line 1131
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            aload 4 /* out */
        20: .line 1132
            iload 5 /* outOfs */
            aload 4 /* out */
            iload 5 /* outOfs */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.gctr:Lcom/sun/crypto/provider/GCTR;
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
        21: .line 1131
            invokestatic com.sun.crypto.provider.GaloisCounterMode.implGCMCrypt:([BII[BI[BILcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)I
            istore 8 /* r */
        start local 8 // int r
        22: .line 1133
            iload 6 /* len */
            iload 8 /* r */
            iadd
            istore 6 /* len */
        23: .line 1134
            iload 2 /* inOfs */
            iload 8 /* r */
            iadd
            istore 2 /* inOfs */
        24: .line 1135
            iload 3 /* inLen */
            iload 8 /* r */
            isub
            istore 3 /* inLen */
        25: .line 1136
            iload 5 /* outOfs */
            iload 8 /* r */
            iadd
            istore 5 /* outOfs */
        end local 8 // int r
        26: .line 1139
      StackMap locals:
      StackMap stack:
            iload 3 /* inLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            if_icmplt 31
        27: .line 1140
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            aload 4 /* out */
            iload 5 /* outOfs */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
            istore 8 /* r */
        start local 8 // int r
        28: .line 1141
            iload 6 /* len */
            iload 8 /* r */
            iadd
            istore 6 /* len */
        29: .line 1142
            iload 2 /* inOfs */
            iload 8 /* r */
            iadd
            istore 2 /* inOfs */
        30: .line 1143
            iload 3 /* inLen */
            iload 8 /* r */
            isub
            istore 3 /* inLen */
        end local 8 // int r
        31: .line 1147
      StackMap locals:
      StackMap stack:
            iload 3 /* inLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            irem
            istore 8 /* remainder */
        start local 8 // int remainder
        32: .line 1148
            iload 8 /* remainder */
            ifle 36
        33: .line 1149
            aload 0 /* this */
            iload 8 /* remainder */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.initBuffer:(I)V
        34: .line 1150
            iload 3 /* inLen */
            iload 8 /* remainder */
            isub
            istore 3 /* inLen */
        35: .line 1152
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            iadd
            iload 8 /* remainder */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        36: .line 1155
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 4 /* out */
            iload 6 /* len */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreOut:([BI)V
        37: .line 1156
            aload 0 /* this */
            dup
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
            iload 6 /* len */
            iadd
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
        38: .line 1157
            iload 6 /* len */
            ireturn
        end local 8 // int remainder
        end local 7 // int bLen
        end local 6 // int len
        end local 5 // int outOfs
        end local 4 // byte[] out
        end local 3 // int inLen
        end local 2 // int inOfs
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 1 // java.nio.ByteBuffer src
        start local 2 // java.nio.ByteBuffer dst
         0: .line 1168
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
         1: .line 1169
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
            istore 3 /* bLen */
        start local 3 // int bLen
         2: .line 1170
            aload 0 /* this */
            iconst_2
            newarray 10
            dup
            iconst_0
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            iastore
            dup
            iconst_1
            iload 3 /* bLen */
            iastore
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.checkDataLength:([I)V
         3: .line 1173
            iconst_0
            istore 4 /* len */
        start local 4 // int len
         4: .line 1175
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
         5: .line 1177
            aload 0 /* this */
            aload 1 /* src */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
            astore 2 /* dst */
         6: .line 1179
            iload 3 /* bLen */
            ifle 17
         7: .line 1181
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            iload 3 /* bLen */
            isub
            istore 5 /* remainder */
        start local 5 // int remainder
         8: .line 1183
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            iload 5 /* remainder */
            if_icmplt 17
         9: .line 1184
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            newarray 8
            astore 6 /* block */
        start local 6 // byte[] block
        10: .line 1185
            aload 0 /* this */
            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 /* buffer */
        start local 7 // java.nio.ByteBuffer buffer
        11: .line 1186
            aload 7 /* buffer */
            aload 6 /* block */
            iconst_0
            iload 3 /* bLen */
            invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
            pop
        12: .line 1187
            aload 1 /* src */
            aload 6 /* block */
            iload 3 /* bLen */
            iload 5 /* remainder */
            invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
            pop
        13: .line 1188
            iload 4 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            aload 6 /* block */
            iconst_0
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
        14: .line 1189
            aload 2 /* dst */
        15: .line 1188
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            iadd
            istore 4 /* len */
        16: .line 1190
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.reset:()V
        end local 7 // java.nio.ByteBuffer buffer
        end local 6 // byte[] block
        end local 5 // int remainder
        17: .line 1194
      StackMap locals: int int
      StackMap stack:
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            istore 5 /* srcLen */
        start local 5 // int srcLen
        18: .line 1197
            iload 5 /* srcLen */
            sipush 8192
            if_icmplt 22
        19: .line 1198
            aload 0 /* this */
            aload 1 /* src */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.implGCMCrypt:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            istore 6 /* resultLen */
        start local 6 // int resultLen
        20: .line 1199
            iload 5 /* srcLen */
            iload 6 /* resultLen */
            isub
            istore 5 /* srcLen */
        21: .line 1200
            iload 4 /* len */
            iload 6 /* resultLen */
            iadd
            istore 4 /* len */
        end local 6 // int resultLen
        22: .line 1204
      StackMap locals: int
      StackMap stack:
            iload 5 /* srcLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            if_icmplt 26
        23: .line 1205
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            aload 1 /* src */
            aload 2 /* dst */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            istore 6 /* resultLen */
        start local 6 // int resultLen
        24: .line 1206
            iload 5 /* srcLen */
            iload 6 /* resultLen */
            isub
            istore 5 /* srcLen */
        25: .line 1207
            iload 4 /* len */
            iload 6 /* resultLen */
            iadd
            istore 4 /* len */
        end local 6 // int resultLen
        26: .line 1211
      StackMap locals:
      StackMap stack:
            iload 5 /* srcLen */
            ifle 34
        27: .line 1212
            aload 0 /* this */
            iload 5 /* srcLen */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.initBuffer:(I)V
        28: .line 1213
            iload 5 /* srcLen */
            newarray 8
            astore 7 /* b */
        start local 7 // byte[] b
        29: .line 1214
            aload 1 /* src */
            aload 7 /* b */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        30: .line 1217
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            aload 7 /* b */
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        31: .line 1218
            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 /* e */
        start local 8 // java.io.IOException e
        33: .line 1219
            new java.lang.RuntimeException
            dup
            aload 8 /* e */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 8 // java.io.IOException e
        end local 7 // byte[] b
        34: .line 1223
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt java.nio.ByteBuffer java.nio.ByteBuffer int int int
      StackMap stack:
            aload 0 /* this */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreDst:(Ljava/nio/ByteBuffer;)V
        35: .line 1224
            aload 0 /* this */
            dup
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
            iload 4 /* len */
            iadd
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
        36: .line 1225
            iload 4 /* len */
            ireturn
        end local 5 // int srcLen
        end local 4 // int len
        end local 3 // int bLen
        end local 2 // java.nio.ByteBuffer dst
        end local 1 // java.nio.ByteBuffer src
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 1 // byte[] in
        start local 2 // int inOfs
        start local 3 // int inLen
        start local 4 // byte[] out
        start local 5 // int outOfs
         0: .line 1234
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
         1: .line 1236
            aload 4 /* out */
            iload 5 /* outOfs */
            aload 0 /* this */
            iload 3 /* inLen */
         2: .line 1237
            iconst_1
         3: .line 1236
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getOutputSize:(IZ)I
            invokestatic sun.security.util.ArrayUtil.nullAndBoundsCheck:([BII)V
         4: .line 1238
            goto 7
      StackMap locals:
      StackMap stack: java.lang.ArrayIndexOutOfBoundsException
         5: pop
         6: .line 1239
            new javax.crypto.ShortBufferException
            dup
            ldc "Output buffer invalid"
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 1242
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
            istore 6 /* bLen */
        start local 6 // int bLen
         8: .line 1243
            aload 0 /* this */
            iconst_3
            newarray 10
            dup
            iconst_0
            iload 3 /* inLen */
            iastore
            dup
            iconst_1
            iload 6 /* bLen */
            iastore
            dup
            iconst_2
            aload 0 /* this */
            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: .line 1244
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
        10: .line 1245
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            aload 4 /* out */
            iload 5 /* outOfs */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:([BI[BI)[B
            astore 4 /* out */
        11: .line 1247
            iconst_0
            istore 7 /* len */
        start local 7 // int len
        12: .line 1251
            iload 6 /* bLen */
            ifle 29
        13: .line 1252
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 9 /* buffer */
        start local 9 // byte[] buffer
        14: .line 1255
            iload 6 /* bLen */
            iload 3 /* inLen */
            iadd
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            if_icmplt 23
        15: .line 1257
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            newarray 8
            astore 8 /* block */
        start local 8 // byte[] block
        16: .line 1258
            aload 0 /* this */
            aload 9 /* buffer */
            iconst_0
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            aload 8 /* block */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.mergeBlock:([BI[BII[B)I
            istore 10 /* r */
        start local 10 // int r
        17: .line 1259
            iload 2 /* inOfs */
            iload 10 /* r */
            iadd
            istore 2 /* inOfs */
        18: .line 1260
            iload 3 /* inLen */
            iload 10 /* r */
            isub
            istore 3 /* inLen */
        19: .line 1261
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            aload 8 /* block */
            iconst_0
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            aload 4 /* out */
            iload 5 /* outOfs */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
            pop
        20: .line 1262
            iload 5 /* outOfs */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            iadd
            istore 5 /* outOfs */
        21: .line 1263
            iload 7 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.blockSize:I
            iadd
            istore 7 /* len */
        end local 10 // int r
        22: .line 1264
            goto 29
        end local 8 // byte[] block
        23: .line 1266
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt byte[] int int byte[] int int int top byte[]
      StackMap stack:
            iload 6 /* bLen */
            iload 3 /* inLen */
            iadd
            newarray 8
            astore 8 /* block */
        start local 8 // byte[] block
        24: .line 1267
            aload 9 /* buffer */
            iconst_0
            aload 8 /* block */
            iconst_0
            iload 6 /* bLen */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        25: .line 1268
            aload 1 /* in */
            iload 2 /* inOfs */
            aload 8 /* block */
            iload 6 /* bLen */
            iload 3 /* inLen */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        26: .line 1269
            iload 3 /* inLen */
            iload 6 /* bLen */
            iadd
            istore 3 /* inLen */
        27: .line 1270
            aload 8 /* block */
            astore 1 /* in */
        28: .line 1271
            iconst_0
            istore 2 /* inOfs */
        end local 9 // byte[] buffer
        end local 8 // byte[] block
        29: .line 1276
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt byte[] int int byte[] int int int
      StackMap stack:
            iload 7 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            aload 4 /* out */
            iload 5 /* outOfs */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.doFinal:([BII[BI)I
            iadd
            istore 7 /* len */
        30: .line 1277
            iload 5 /* outOfs */
            iload 3 /* inLen */
            iadd
            istore 5 /* outOfs */
        31: .line 1279
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.sizeOfAAD:I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
            iload 7 /* len */
            iadd
            invokestatic com.sun.crypto.provider.GaloisCounterMode.getLengthBlock:(II)[B
            astore 8 /* block */
        start local 8 // byte[] block
        32: .line 1280
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            aload 8 /* block */
            invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
            pop
        33: .line 1281
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            invokevirtual com.sun.crypto.provider.GHASH.digest:()[B
            astore 8 /* block */
        34: .line 1282
            new com.sun.crypto.provider.GCTR
            dup
            aload 0 /* this */
            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 /* this */
            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 /* block */
            iconst_0
        35: .line 1283
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            aload 8 /* block */
            iconst_0
        36: .line 1282
            invokevirtual com.sun.crypto.provider.GCTR.doFinal:([BII[BI)I
            pop
        37: .line 1286
            aload 8 /* block */
            iconst_0
            aload 4 /* out */
            iload 5 /* outOfs */
            aload 0 /* this */
            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: .line 1287
            iload 7 /* len */
            aload 0 /* this */
            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 /* len */
        39: .line 1288
            aload 0 /* this */
            aload 4 /* out */
            iload 7 /* len */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreOut:([BI)V
        40: .line 1290
            aload 0 /* this */
            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: .line 1291
            iload 7 /* len */
            ireturn
        end local 8 // byte[] block
        end local 7 // int len
        end local 6 // int bLen
        end local 5 // int outOfs
        end local 4 // byte[] out
        end local 3 // int inLen
        end local 2 // int inOfs
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
        start local 1 // java.nio.ByteBuffer src
        start local 2 // java.nio.ByteBuffer dst
         0: .line 1300
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
         1: .line 1301
            aload 0 /* this */
            aload 1 /* src */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.overlapDetection:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
            astore 2 /* dst */
         2: .line 1302
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.getBufferedLength:()I
            iadd
            istore 3 /* len */
        start local 3 // int len
         3: .line 1305
            aload 0 /* this */
            iconst_2
            newarray 10
            dup
            iconst_0
            iload 3 /* len */
            iastore
            dup
            iconst_1
            aload 0 /* this */
            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: .line 1306
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            iload 3 /* len */
            aload 0 /* this */
            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: .line 1307
            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: .line 1308
            iload 3 /* len */
            aload 0 /* this */
            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: .line 1307
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 1311
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processAAD:()V
         9: .line 1312
            iload 3 /* len */
            ifle 16
        10: .line 1313
            aload 0 /* this */
            dup
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.op:Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
        11: .line 1314
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 12
            aload 0 /* this */
            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: .line 1315
      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 /* this */
            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 /* src */
            aload 2 /* dst */
        15: .line 1313
            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: .line 1319
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 18
        17: .line 1320
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.reset:()V
        18: .line 1323
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.sizeOfAAD:I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.processed:I
            invokestatic com.sun.crypto.provider.GaloisCounterMode.getLengthBlock:(II)[B
            astore 4 /* block */
        start local 4 // byte[] block
        19: .line 1324
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            aload 4 /* block */
            invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
            pop
        20: .line 1325
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            invokevirtual com.sun.crypto.provider.GHASH.digest:()[B
            astore 4 /* block */
        21: .line 1326
            new com.sun.crypto.provider.GCTR
            dup
            aload 0 /* this */
            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 /* this */
            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 /* block */
            iconst_0
        22: .line 1327
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            aload 4 /* block */
            iconst_0
        23: .line 1326
            invokevirtual com.sun.crypto.provider.GCTR.doFinal:([BII[BI)I
            pop
        24: .line 1328
            aload 2 /* dst */
            aload 4 /* block */
            iconst_0
            aload 0 /* this */
            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: .line 1329
            aload 0 /* this */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt.restoreDst:(Ljava/nio/ByteBuffer;)V
        26: .line 1331
            aload 0 /* this */
            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: .line 1332
            iload 3 /* len */
            aload 0 /* this */
            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 // byte[] block
        end local 3 // int len
        end local 2 // java.nio.ByteBuffer dst
        end local 1 // java.nio.ByteBuffer src
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEncrypt this
      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