class com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt 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$GCMDecrypt
  super_class: com.sun.crypto.provider.GaloisCounterMode$GCMEngine
{
  byte[] tag;
    descriptor: [B
    flags: (0x0000) 

  int tagOfs;
    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=3, locals=3, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
        start local 2 // com.sun.crypto.provider.SymmetricCipher blockCipher
         0: .line 1345
            aload 0 /* this */
            aload 1
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
         1: .line 1346
            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 1343
            aload 0 /* this */
            iconst_0
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tagOfs:I
         3: .line 1347
            return
        end local 2 // com.sun.crypto.provider.SymmetricCipher blockCipher
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0         this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0    4     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$GCMDecrypt this
        start local 1 // int[] lengths
         0: .line 1355
            ldc 2147483647
            istore 2 /* max */
        start local 2 // int max
         1: .line 1356
            aload 1 /* lengths */
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 7
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt int[] int top int int int[]
      StackMap stack:
         2: aload 6
            iload 4
            iaload
            istore 3 /* len */
        start local 3 // int len
         3: .line 1357
            iload 2 /* max */
            iload 3 /* len */
            invokestatic java.lang.Math.subtractExact:(II)I
            istore 2 /* max */
         4: .line 1358
            iload 2 /* max */
            ifge 6
         5: .line 1359
            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 1356
      StackMap locals:
      StackMap stack:
            iinc 4 1
      StackMap locals:
      StackMap stack:
         7: iload 4
            iload 5
            if_icmplt 2
         8: .line 1363
            return
        end local 2 // int max
        end local 1 // int[] lengths
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            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=2, locals=3, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
        start local 1 // int inLen
        start local 2 // boolean isFinal
         0: .line 1367
            iload 2 /* isFinal */
            ifne 2
         1: .line 1368
            iconst_0
            ireturn
         2: .line 1370
      StackMap locals:
      StackMap stack:
            iload 1 /* inLen */
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.getBufferedLength:()I
            iadd
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            iconst_0
            invokestatic java.lang.Math.max:(II)I
            ireturn
        end local 2 // boolean isFinal
        end local 1 // int inLen
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0    3     1    inLen  I
            0    3     2  isFinal  Z
    MethodParameters:
         Name  Flags
      inLen    
      isFinal  

  void findTag(byte[], int, int);
    descriptor: ([BII)V
    flags: (0x0000) 
    Code:
      stack=8, locals=5, args_size=4
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
        start local 1 // byte[] in
        start local 2 // int inOfs
        start local 3 // int inLen
         0: .line 1382
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            newarray 8
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tag:[B
         1: .line 1383
            iload 3 /* inLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            if_icmplt 7
         2: .line 1384
            aload 0 /* this */
            iload 3 /* inLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tagOfs:I
         3: .line 1385
            aload 1 /* in */
            iload 2 /* inOfs */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tagOfs:I
            iadd
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tag:[B
            iconst_0
         4: .line 1386
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
         5: .line 1385
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         6: .line 1387
            goto 14
         7: .line 1389
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 4 /* buffer */
        start local 4 // byte[] buffer
         8: .line 1390
            aload 0 /* this */
            aload 0 /* this */
            aload 4 /* buffer */
         9: .line 1391
            aload 4 /* buffer */
            arraylength
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            iload 3 /* inLen */
            isub
            isub
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
        10: .line 1392
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tag:[B
        11: .line 1390
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.mergeBlock:([BI[BII[B)I
        12: .line 1392
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
        13: .line 1390
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tagOfs:I
        end local 4 // byte[] buffer
        14: .line 1394
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int inLen
        end local 2 // int inOfs
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   15     0    this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0   15     1      in  [B
            0   15     2   inOfs  I
            0   15     3   inLen  I
            8   14     4  buffer  [B
    MethodParameters:
       Name  Flags
      in     
      inOfs  
      inLen  

  byte[] doUpdate(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0000) 
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
        start local 1 // byte[] in
        start local 2 // int inOff
        start local 3 // int inLen
         0: .line 1400
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOff */
            iload 3 /* inLen */
            aconst_null
            iconst_0
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.doUpdate:([BII[BI)I
            pop
         1: .line 1401
            goto 3
      StackMap locals:
      StackMap stack: javax.crypto.ShortBufferException
         2: pop
         3: .line 1404
      StackMap locals:
      StackMap stack:
            iconst_0
            newarray 8
            areturn
        end local 3 // int inLen
        end local 2 // int inOff
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     0   this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0    4     1     in  [B
            0    4     2  inOff  I
            0    4     3  inLen  I
      Exception table:
        from    to  target  type
           0     1       2  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=4, locals=6, args_size=6
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt 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 1412
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.processAAD:()V
         1: .line 1413
            iload 3 /* inLen */
            ifle 4
         2: .line 1416
            aload 0 /* this */
            iload 3 /* inLen */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.initBuffer:(I)V
         3: .line 1417
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
         4: .line 1419
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        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$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0    5     1      in  [B
            0    5     2   inOfs  I
            0    5     3   inLen  I
            0    5     4     out  [B
            0    5     5  outOfs  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=6, locals=5, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
        start local 1 // java.nio.ByteBuffer src
        start local 2 // java.nio.ByteBuffer dst
         0: .line 1428
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.processAAD:()V
         1: .line 1429
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            ifle 17
         2: .line 1432
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.hasArray:()Z
            ifeq 8
         3: .line 1433
            aload 0 /* this */
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.array:()[B
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.arrayOffset:()I
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.position:()I
            iadd
         4: .line 1434
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aconst_null
            iconst_0
         5: .line 1433
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.doUpdate:([BII[BI)I
            pop
         6: .line 1435
            aload 1 /* src */
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.limit:()I
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
            pop
         7: .line 1436
            goto 17
         8: .line 1437
      StackMap locals:
      StackMap stack:
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            newarray 8
            astore 3 /* b */
        start local 3 // byte[] b
         9: .line 1438
            aload 1 /* src */
            aload 3 /* b */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        10: .line 1439
            aload 0 /* this */
            aload 3 /* b */
            arraylength
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.initBuffer:(I)V
        11: .line 1441
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            aload 3 /* b */
            invokevirtual java.io.ByteArrayOutputStream.write:([B)V
        12: .line 1442
            goto 17
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt java.nio.ByteBuffer java.nio.ByteBuffer byte[]
      StackMap stack: java.io.IOException
        13: astore 4 /* e */
        start local 4 // java.io.IOException e
        14: .line 1443
            new java.security.ProviderException
            dup
        15: .line 1444
            ldc "Unable to add remaining input to the buffer"
            aload 4 /* e */
        16: .line 1443
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.IOException e
        end local 3 // byte[] b
        17: .line 1448
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // java.nio.ByteBuffer dst
        end local 1 // java.nio.ByteBuffer src
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   18     0  this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0   18     1   src  Ljava/nio/ByteBuffer;
            0   18     2   dst  Ljava/nio/ByteBuffer;
            9   17     3     b  [B
           14   17     4     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          11    12      13  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=10, args_size=6
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt 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 1461
            iload 3 /* inLen */
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.getBufferedLength:()I
            iadd
            istore 6 /* len */
        start local 6 // int len
         1: .line 1462
            iload 6 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            if_icmpge 6
         2: .line 1463
            new javax.crypto.AEADBadTagException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Input data too short to contain an expected tag length of "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         3: .line 1464
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
         4: .line 1465
            ldc "bytes"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 1463
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 1469
      StackMap locals: int
      StackMap stack:
            aload 4 /* out */
            iload 5 /* outOfs */
            iload 6 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            invokestatic sun.security.util.ArrayUtil.nullAndBoundsCheck:([BII)V
         7: .line 1470
            goto 10
      StackMap locals:
      StackMap stack: java.lang.ArrayIndexOutOfBoundsException
         8: pop
         9: .line 1471
            new javax.crypto.ShortBufferException
            dup
            ldc "Output buffer invalid"
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 1474
      StackMap locals:
      StackMap stack:
            iload 6 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            aload 4 /* out */
            arraylength
            iload 5 /* outOfs */
            isub
            if_icmple 14
        11: .line 1475
            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
        12: .line 1476
            iload 6 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            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;
        13: .line 1475
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 1479
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            newarray 10
            dup
            iconst_0
            iload 6 /* len */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            iastore
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.checkDataLength:([I)V
        15: .line 1480
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.processAAD:()V
        16: .line 1481
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.findTag:([BII)V
        17: .line 1482
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            aload 4 /* out */
            iload 5 /* outOfs */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.overlapDetection:([BI[BI)[B
            astore 4 /* out */
        18: .line 1484
            aload 0 /* this */
            new com.sun.crypto.provider.GaloisCounterMode$DecryptOp
            dup
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.gctr:Lcom/sun/crypto/provider/GCTR;
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            invokespecial com.sun.crypto.provider.GaloisCounterMode$DecryptOp.<init>:(Lcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)V
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
        19: .line 1485
            aload 4 /* out */
            iload 5 /* outOfs */
        20: .line 1484
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.decryptBlocks:(Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;[BII[BI)I
            istore 6 /* len */
        21: .line 1486
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.sizeOfAAD:I
            iload 6 /* len */
            invokestatic com.sun.crypto.provider.GaloisCounterMode.getLengthBlock:(II)[B
            astore 7 /* block */
        start local 7 // byte[] block
        22: .line 1487
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            aload 7 /* block */
            invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
            pop
        23: .line 1488
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            invokevirtual com.sun.crypto.provider.GHASH.digest:()[B
            astore 7 /* block */
        24: .line 1489
            new com.sun.crypto.provider.GCTR
            dup
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.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$GCMDecrypt.preCounterBlock:[B
            invokespecial com.sun.crypto.provider.GCTR.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;[B)V
            aload 7 /* block */
            iconst_0
        25: .line 1490
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            aload 7 /* block */
            iconst_0
        26: .line 1489
            invokevirtual com.sun.crypto.provider.GCTR.doFinal:([BII[BI)I
            pop
        27: .line 1493
            iconst_0
            istore 8 /* mismatch */
        start local 8 // int mismatch
        28: .line 1494
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        29: goto 32
        30: .line 1495
      StackMap locals: byte[] int int
      StackMap stack:
            iload 8 /* mismatch */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tag:[B
            iload 9 /* i */
            baload
            aload 7 /* block */
            iload 9 /* i */
            baload
            ixor
            ior
            istore 8 /* mismatch */
        31: .line 1494
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        32: iload 9 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            if_icmplt 30
        end local 9 // int i
        33: .line 1498
            iload 8 /* mismatch */
            ifeq 36
        34: .line 1500
            aload 4 /* out */
            iload 5 /* outOfs */
            iload 5 /* outOfs */
            iload 6 /* len */
            iadd
            iconst_0
            invokestatic java.util.Arrays.fill:([BIIB)V
        35: .line 1501
            new javax.crypto.AEADBadTagException
            dup
            ldc "Tag mismatch"
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
        36: .line 1504
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 4 /* out */
            iload 6 /* len */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.restoreOut:([BI)V
        37: .line 1505
            iload 6 /* len */
            ireturn
        end local 8 // int mismatch
        end local 7 // byte[] block
        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$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   38     0      this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0   38     1        in  [B
            0   38     2     inOfs  I
            0   38     3     inLen  I
            0   38     4       out  [B
            0   38     5    outOfs  I
            1   38     6       len  I
           22   38     7     block  [B
           28   38     8  mismatch  I
           29   33     9         i  I
      Exception table:
        from    to  target  type
           6     7       8  Class java.lang.ArrayIndexOutOfBoundsException
    Exceptions:
      throws javax.crypto.IllegalBlockSizeException, javax.crypto.AEADBadTagException, 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=6, locals=10, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
        start local 1 // java.nio.ByteBuffer src
        start local 2 // java.nio.ByteBuffer dst
         0: .line 1519
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.duplicate:()Ljava/nio/ByteBuffer;
            astore 4 /* ct */
        start local 4 // java.nio.ByteBuffer ct
         1: .line 1520
            aconst_null
            astore 5 /* buffer */
        start local 5 // java.nio.ByteBuffer buffer
         2: .line 1523
            aload 4 /* ct */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            istore 6 /* len */
        start local 6 // int len
         3: .line 1526
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.getBufferedLength:()I
            ifeq 6
         4: .line 1527
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
            astore 5 /* buffer */
         5: .line 1528
            iload 6 /* len */
            aload 5 /* buffer */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            iadd
            istore 6 /* len */
         6: .line 1531
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt java.nio.ByteBuffer java.nio.ByteBuffer top java.nio.ByteBuffer java.nio.ByteBuffer int
      StackMap stack:
            aload 0 /* this */
            iconst_1
            newarray 10
            dup
            iconst_0
            iload 6 /* len */
            iastore
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.checkDataLength:([I)V
         7: .line 1534
            iload 6 /* len */
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            if_icmple 11
         8: .line 1535
            new javax.crypto.ShortBufferException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Output buffer too small, must be at least "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         9: .line 1536
            iload 6 /* len */
            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;
        10: .line 1535
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 1540
      StackMap locals:
      StackMap stack:
            aload 4 /* ct */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            if_icmplt 16
        12: .line 1541
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.duplicate:()Ljava/nio/ByteBuffer;
            astore 3 /* tag */
        start local 3 // java.nio.ByteBuffer tag
        13: .line 1542
            aload 3 /* tag */
            aload 4 /* ct */
            invokevirtual java.nio.ByteBuffer.limit:()I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
            pop
        14: .line 1543
            aload 4 /* ct */
            aload 4 /* ct */
            invokevirtual java.nio.ByteBuffer.limit:()I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
            pop
        15: .line 1544
            goto 31
        end local 3 // java.nio.ByteBuffer tag
      StackMap locals:
      StackMap stack:
        16: aload 5 /* buffer */
            ifnull 27
        17: .line 1546
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
            astore 3 /* tag */
        start local 3 // java.nio.ByteBuffer tag
        18: .line 1547
            aload 5 /* buffer */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            aload 4 /* ct */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            isub
            isub
            istore 7 /* limit */
        start local 7 // int limit
        19: .line 1548
            aload 5 /* buffer */
            invokevirtual java.nio.ByteBuffer.mark:()Ljava/nio/ByteBuffer;
            pop
        20: .line 1549
            aload 5 /* buffer */
            iload 7 /* limit */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
            pop
        21: .line 1551
            aload 3 /* tag */
            aload 5 /* buffer */
            invokevirtual java.nio.ByteBuffer.put:(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
            pop
        22: .line 1553
            aload 5 /* buffer */
            invokevirtual java.nio.ByteBuffer.reset:()Ljava/nio/ByteBuffer;
            pop
        23: .line 1555
            aload 5 /* buffer */
            iload 7 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
            pop
        24: .line 1556
            aload 3 /* tag */
            aload 4 /* ct */
            invokevirtual java.nio.ByteBuffer.put:(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
            pop
        25: .line 1557
            aload 3 /* tag */
            invokevirtual java.nio.ByteBuffer.flip:()Ljava/nio/ByteBuffer;
            pop
        end local 7 // int limit
        26: .line 1558
            goto 31
        end local 3 // java.nio.ByteBuffer tag
        27: .line 1559
      StackMap locals:
      StackMap stack:
            new javax.crypto.AEADBadTagException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Input data too short to contain an expected tag length of "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        28: .line 1560
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
        29: .line 1561
            ldc "bytes"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        30: .line 1559
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
        start local 3 // java.nio.ByteBuffer tag
        31: .line 1564
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt java.nio.ByteBuffer java.nio.ByteBuffer java.nio.ByteBuffer java.nio.ByteBuffer java.nio.ByteBuffer int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* src */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.overlapDetection:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
            astore 2 /* dst */
        32: .line 1565
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.mark:()Ljava/nio/ByteBuffer;
            pop
        33: .line 1566
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.processAAD:()V
        34: .line 1567
            aload 0 /* this */
            new com.sun.crypto.provider.GaloisCounterMode$DecryptOp
            dup
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.gctr:Lcom/sun/crypto/provider/GCTR;
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            invokespecial com.sun.crypto.provider.GaloisCounterMode$DecryptOp.<init>:(Lcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)V
            aload 5 /* buffer */
            aload 4 /* ct */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.doLastBlock:(Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            istore 6 /* len */
        35: .line 1569
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.sizeOfAAD:I
            iload 6 /* len */
            invokestatic com.sun.crypto.provider.GaloisCounterMode.getLengthBlock:(II)[B
            astore 7 /* block */
        start local 7 // byte[] block
        36: .line 1570
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            aload 7 /* block */
            invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
            pop
        37: .line 1571
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ghash:Lcom/sun/crypto/provider/GHASH;
            invokevirtual com.sun.crypto.provider.GHASH.digest:()[B
            astore 7 /* block */
        38: .line 1572
            new com.sun.crypto.provider.GCTR
            dup
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.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$GCMDecrypt.preCounterBlock:[B
            invokespecial com.sun.crypto.provider.GCTR.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;[B)V
            aload 7 /* block */
            iconst_0
        39: .line 1573
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            aload 7 /* block */
            iconst_0
        40: .line 1572
            invokevirtual com.sun.crypto.provider.GCTR.doFinal:([BII[BI)I
            pop
        41: .line 1576
            iconst_0
            istore 8 /* mismatch */
        start local 8 // int mismatch
        42: .line 1577
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        43: goto 46
        44: .line 1578
      StackMap locals: byte[] int int
      StackMap stack:
            iload 8 /* mismatch */
            aload 3 /* tag */
            invokevirtual java.nio.ByteBuffer.get:()B
            aload 7 /* block */
            iload 9 /* i */
            baload
            ixor
            ior
            istore 8 /* mismatch */
        45: .line 1577
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        46: iload 9 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            if_icmplt 44
        end local 9 // int i
        47: .line 1581
            iload 8 /* mismatch */
            ifeq 57
        48: .line 1583
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.reset:()Ljava/nio/ByteBuffer;
            pop
        49: .line 1584
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.hasArray:()Z
            ifeq 53
        50: .line 1585
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.arrayOffset:()I
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.position:()I
            iadd
            istore 9 /* ofs */
        start local 9 // int ofs
        51: .line 1586
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.array:()[B
            iload 9 /* ofs */
            iload 9 /* ofs */
            iload 6 /* len */
            iadd
            iconst_0
            invokestatic java.util.Arrays.fill:([BIIB)V
        end local 9 // int ofs
        52: .line 1587
            goto 56
        53: .line 1588
      StackMap locals:
      StackMap stack:
            invokestatic jdk.internal.misc.Unsafe.getUnsafe:()Ljdk/internal/misc/Unsafe;
            aload 2 /* dst */
            checkcast sun.nio.ch.DirectBuffer
            invokeinterface sun.nio.ch.DirectBuffer.address:()J
        54: .line 1589
            iload 6 /* len */
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.position:()I
            iadd
            i2l
            iconst_0
        55: .line 1588
            invokevirtual jdk.internal.misc.Unsafe.setMemory:(JJB)V
        56: .line 1591
      StackMap locals:
      StackMap stack:
            new javax.crypto.AEADBadTagException
            dup
            ldc "Tag mismatch"
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
        57: .line 1594
      StackMap locals:
      StackMap stack:
            aload 1 /* src */
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.limit:()I
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
            pop
        58: .line 1595
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode.engine:Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
        59: .line 1596
            aload 0 /* this */
            aload 2 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.restoreDst:(Ljava/nio/ByteBuffer;)V
        60: .line 1597
            iload 6 /* len */
            ireturn
        end local 8 // int mismatch
        end local 7 // byte[] block
        end local 6 // int len
        end local 5 // java.nio.ByteBuffer buffer
        end local 4 // java.nio.ByteBuffer ct
        end local 3 // java.nio.ByteBuffer tag
        end local 2 // java.nio.ByteBuffer dst
        end local 1 // java.nio.ByteBuffer src
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   61     0      this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0   61     1       src  Ljava/nio/ByteBuffer;
            0   61     2       dst  Ljava/nio/ByteBuffer;
           13   16     3       tag  Ljava/nio/ByteBuffer;
           18   27     3       tag  Ljava/nio/ByteBuffer;
           31   61     3       tag  Ljava/nio/ByteBuffer;
            1   61     4        ct  Ljava/nio/ByteBuffer;
            2   61     5    buffer  Ljava/nio/ByteBuffer;
            3   61     6       len  I
           19   26     7     limit  I
           36   61     7     block  [B
           42   61     8  mismatch  I
           43   47     9         i  I
           51   52     9       ofs  I
    Exceptions:
      throws javax.crypto.IllegalBlockSizeException, javax.crypto.AEADBadTagException, javax.crypto.ShortBufferException
    MethodParameters:
      Name  Flags
      src   
      dst   

  int decryptBlocks(com.sun.crypto.provider.GaloisCounterMode$GCMOperation, byte[], int, int, byte[], int);
    descriptor: (Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;[BII[BI)I
    flags: (0x0000) 
    Code:
      stack=9, locals=14, args_size=7
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
        start local 1 // com.sun.crypto.provider.GaloisCounterMode$GCMOperation op
        start local 2 // byte[] in
        start local 3 // int inOfs
        start local 4 // int inLen
        start local 5 // byte[] out
        start local 6 // int outOfs
         0: .line 1610
            iconst_0
            istore 9 /* len */
        start local 9 // int len
         1: .line 1615
            aload 0 /* this */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.getBufferedLength:()I
            istore 11 /* bLen */
        start local 11 // int bLen
         2: .line 1618
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tagOfs:I
            ifge 6
         3: .line 1619
            iconst_0
            istore 4 /* inLen */
         4: .line 1620
            iload 11 /* bLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.tagOfs:I
            iadd
            istore 11 /* bLen */
         5: .line 1621
            goto 7
         6: .line 1622
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt com.sun.crypto.provider.GaloisCounterMode$GCMOperation byte[] int int byte[] int top top int top int
      StackMap stack:
            iload 4 /* inLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.tagLenBytes:I
            isub
            istore 4 /* inLen */
         7: .line 1625
      StackMap locals:
      StackMap stack:
            iload 11 /* bLen */
            ifle 39
         8: .line 1626
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 7 /* buffer */
        start local 7 // byte[] buffer
         9: .line 1628
            iload 11 /* bLen */
            sipush 8192
            if_icmplt 14
        10: .line 1629
            aload 7 /* buffer */
            iconst_0
            iload 11 /* bLen */
        11: .line 1630
            aload 7 /* buffer */
            iconst_0
            aload 5 /* out */
            iload 6 /* outOfs */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.gctr:Lcom/sun/crypto/provider/GCTR;
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.ghash:Lcom/sun/crypto/provider/GHASH;
        12: .line 1629
            invokestatic com.sun.crypto.provider.GaloisCounterMode.implGCMCrypt:([BII[BI[BILcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)I
            istore 9 /* len */
        13: .line 1631
            iload 6 /* outOfs */
            iload 9 /* len */
            iadd
            istore 6 /* outOfs */
        14: .line 1636
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt com.sun.crypto.provider.GaloisCounterMode$GCMOperation byte[] int int byte[] int byte[] top int top int
      StackMap stack:
            iload 11 /* bLen */
            iload 9 /* len */
            isub
            istore 12 /* bufRemainder */
        start local 12 // int bufRemainder
        15: .line 1637
            iload 12 /* bufRemainder */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.blockSize:I
            if_icmplt 22
        16: .line 1638
            aload 1 /* op */
            aload 7 /* buffer */
            iload 9 /* len */
            iload 12 /* bufRemainder */
            aload 5 /* out */
        17: .line 1639
            iload 6 /* outOfs */
        18: .line 1638
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
            istore 10 /* resultLen */
        start local 10 // int resultLen
        19: .line 1640
            iload 9 /* len */
            iload 10 /* resultLen */
            iadd
            istore 9 /* len */
        20: .line 1641
            iload 6 /* outOfs */
            iload 10 /* resultLen */
            iadd
            istore 6 /* outOfs */
        21: .line 1642
            iload 12 /* bufRemainder */
            iload 10 /* resultLen */
            isub
            istore 12 /* bufRemainder */
        end local 10 // int resultLen
        22: .line 1646
      StackMap locals: int
      StackMap stack:
            iload 12 /* bufRemainder */
            ifle 39
        23: .line 1647
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.blockSize:I
            newarray 8
            astore 8 /* block */
        start local 8 // byte[] block
        24: .line 1648
            aload 0 /* this */
            aload 7 /* buffer */
            iload 9 /* len */
            iload 12 /* bufRemainder */
            aload 2 /* in */
        25: .line 1649
            iload 3 /* inOfs */
            iload 4 /* inLen */
            aload 8 /* block */
        26: .line 1648
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.mergeBlock:([BII[BII[B)I
            istore 13 /* inUsed */
        start local 13 // int inUsed
        27: .line 1651
            iload 3 /* inOfs */
            iload 13 /* inUsed */
            iadd
            istore 3 /* inOfs */
        28: .line 1652
            iload 4 /* inLen */
            iload 13 /* inUsed */
            isub
            istore 4 /* inLen */
        29: .line 1655
            iload 4 /* inLen */
            ifle 36
        30: .line 1656
            aload 1 /* op */
            aload 8 /* block */
            iconst_0
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.blockSize:I
        31: .line 1657
            aload 5 /* out */
            iload 6 /* outOfs */
        32: .line 1656
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BII[BI)I
            istore 10 /* resultLen */
        start local 10 // int resultLen
        33: .line 1658
            iload 6 /* outOfs */
            iload 10 /* resultLen */
            iadd
            istore 6 /* outOfs */
        34: .line 1659
            iload 9 /* len */
            iload 10 /* resultLen */
            iadd
            istore 9 /* len */
        35: .line 1660
            goto 39
        end local 10 // int resultLen
        36: .line 1661
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt com.sun.crypto.provider.GaloisCounterMode$GCMOperation byte[] int int byte[] int byte[] byte[] int top int int int
      StackMap stack:
            aload 8 /* block */
            astore 2 /* in */
        37: .line 1662
            iconst_0
            istore 3 /* inOfs */
        38: .line 1663
            iload 13 /* inUsed */
            iload 12 /* bufRemainder */
            iadd
            istore 4 /* inLen */
        end local 13 // int inUsed
        end local 12 // int bufRemainder
        end local 8 // byte[] block
        end local 7 // byte[] buffer
        39: .line 1668
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt com.sun.crypto.provider.GaloisCounterMode$GCMOperation byte[] int int byte[] int top top int top int
      StackMap stack:
            iload 9 /* len */
            aload 1 /* op */
            aload 2 /* in */
            iload 3 /* inOfs */
            iload 4 /* inLen */
            aload 5 /* out */
            iload 6 /* outOfs */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.doFinal:([BII[BI)I
            iadd
            ireturn
        end local 11 // int bLen
        end local 9 // int len
        end local 6 // int outOfs
        end local 5 // byte[] out
        end local 4 // int inLen
        end local 3 // int inOfs
        end local 2 // byte[] in
        end local 1 // com.sun.crypto.provider.GaloisCounterMode$GCMOperation op
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   40     0          this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMDecrypt;
            0   40     1            op  Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            0   40     2            in  [B
            0   40     3         inOfs  I
            0   40     4         inLen  I
            0   40     5           out  [B
            0   40     6        outOfs  I
            9   39     7        buffer  [B
           24   39     8         block  [B
            1   40     9           len  I
           19   22    10     resultLen  I
           33   36    10     resultLen  I
            2   40    11          bLen  I
           15   39    12  bufRemainder  I
           27   39    13        inUsed  I
    MethodParameters:
        Name  Flags
      op      
      in      
      inOfs   
      inLen   
      out     
      outOfs  
}
SourceFile: "GaloisCounterMode.java"
NestHost: com.sun.crypto.provider.GaloisCounterMode
InnerClasses:
  final DecryptOp = com.sun.crypto.provider.GaloisCounterMode$DecryptOp of com.sun.crypto.provider.GaloisCounterMode
  GCMDecrypt = com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt 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