abstract class com.sun.crypto.provider.GaloisCounterMode$GCMEngine
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: com.sun.crypto.provider.GaloisCounterMode$GCMEngine
  super_class: java.lang.Object
{
  byte[] preCounterBlock;
    descriptor: [B
    flags: (0x0000) 

  com.sun.crypto.provider.GCTR gctr;
    descriptor: Lcom/sun/crypto/provider/GCTR;
    flags: (0x0000) 

  com.sun.crypto.provider.GHASH ghash;
    descriptor: Lcom/sun/crypto/provider/GHASH;
    flags: (0x0000) 

  final int blockSize;
    descriptor: I
    flags: (0x0010) ACC_FINAL

  java.io.ByteArrayOutputStream aadBuffer;
    descriptor: Ljava/io/ByteArrayOutputStream;
    flags: (0x0000) 

  int sizeOfAAD;
    descriptor: I
    flags: (0x0000) 

  boolean aadProcessed;
    descriptor: Z
    flags: (0x0000) 

  java.io.ByteArrayOutputStream ibuffer;
    descriptor: Ljava/io/ByteArrayOutputStream;
    flags: (0x0000) 

  java.nio.ByteBuffer originalDst;
    descriptor: Ljava/nio/ByteBuffer;
    flags: (0x0000) 

  byte[] originalOut;
    descriptor: [B
    flags: (0x0000) 

  int originalOutOfs;
    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=5, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 2 // com.sun.crypto.provider.SymmetricCipher blockCipher
         0: .line 669
            aload 0 /* this */
            aload 1
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 657
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
         2: .line 658
            aload 0 /* this */
            iconst_0
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.sizeOfAAD:I
         3: .line 659
            aload 0 /* this */
            iconst_0
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadProcessed:Z
         4: .line 662
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ibuffer:Ljava/io/ByteArrayOutputStream;
         5: .line 665
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalDst:Ljava/nio/ByteBuffer;
         6: .line 666
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOut:[B
         7: .line 667
            aload 0 /* this */
            iconst_0
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOutOfs:I
         8: .line 670
            aload 0 /* this */
            aload 2 /* blockCipher */
            invokevirtual com.sun.crypto.provider.SymmetricCipher.getBlockSize:()I
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
         9: .line 671
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            newarray 8
            astore 3 /* subkeyH */
        start local 3 // byte[] subkeyH
        10: .line 672
            aload 2 /* blockCipher */
            aload 3 /* subkeyH */
            iconst_0
            aload 3 /* subkeyH */
            iconst_0
            invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
        11: .line 673
            aload 0 /* this */
            aload 1
            getfield com.sun.crypto.provider.GaloisCounterMode.iv:[B
            aload 3 /* subkeyH */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            invokestatic com.sun.crypto.provider.GaloisCounterMode.getJ0:([B[BI)[B
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.preCounterBlock:[B
        12: .line 674
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.preCounterBlock:[B
            invokevirtual byte[].clone:()Ljava/lang/Object;
            checkcast byte[]
            astore 4 /* j0Plus1 */
        start local 4 // byte[] j0Plus1
        13: .line 675
            aload 4 /* j0Plus1 */
            invokestatic com.sun.crypto.provider.GaloisCounterMode.increment32:([B)V
        14: .line 676
            aload 0 /* this */
            new com.sun.crypto.provider.GCTR
            dup
            aload 2 /* blockCipher */
            aload 4 /* j0Plus1 */
            invokespecial com.sun.crypto.provider.GCTR.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;[B)V
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.gctr:Lcom/sun/crypto/provider/GCTR;
        15: .line 677
            aload 0 /* this */
            new com.sun.crypto.provider.GHASH
            dup
            aload 3 /* subkeyH */
            invokespecial com.sun.crypto.provider.GHASH.<init>:([B)V
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ghash:Lcom/sun/crypto/provider/GHASH;
        16: .line 678
            return
        end local 4 // byte[] j0Plus1
        end local 3 // byte[] subkeyH
        end local 2 // com.sun.crypto.provider.SymmetricCipher blockCipher
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   17     0         this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0   17     2  blockCipher  Lcom/sun/crypto/provider/SymmetricCipher;
           10   17     3      subkeyH  [B
           13   17     4      j0Plus1  [B
    MethodParameters:
             Name  Flags
      this$0       final
      blockCipher  

  abstract int getOutputSize(int, boolean);
    descriptor: (IZ)I
    flags: (0x0400) ACC_ABSTRACT
    MethodParameters:
         Name  Flags
      inLen    
      isFinal  

  abstract byte[] doUpdate(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0400) ACC_ABSTRACT
    MethodParameters:
       Name  Flags
      in     
      inOfs  
      inLen  

  abstract int doUpdate(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws javax.crypto.ShortBufferException
    MethodParameters:
        Name  Flags
      in      
      inOfs   
      inLen   
      out     
      outOfs  

  abstract int doUpdate(java.nio.ByteBuffer, java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws javax.crypto.ShortBufferException
    MethodParameters:
      Name  Flags
      src   
      dst   

  abstract int doFinal(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws javax.crypto.IllegalBlockSizeException, javax.crypto.AEADBadTagException, javax.crypto.ShortBufferException
    MethodParameters:
        Name  Flags
      in      
      inOfs   
      inLen   
      out     
      outOfs  

  abstract int doFinal(java.nio.ByteBuffer, java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
    flags: (0x0400) ACC_ABSTRACT
    Exceptions:
      throws javax.crypto.IllegalBlockSizeException, javax.crypto.AEADBadTagException, javax.crypto.ShortBufferException
    MethodParameters:
      Name  Flags
      src   
      dst   

  void initBuffer(int);
    descriptor: (I)V
    flags: (0x0000) 
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // int len
         0: .line 707
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ibuffer:Ljava/io/ByteArrayOutputStream;
            ifnonnull 2
         1: .line 708
            aload 0 /* this */
            new java.io.ByteArrayOutputStream
            dup
            iload 1 /* len */
            invokespecial java.io.ByteArrayOutputStream.<init>:(I)V
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ibuffer:Ljava/io/ByteArrayOutputStream;
         2: .line 710
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int len
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0    3     1   len  I
    MethodParameters:
      Name  Flags
      len   

  int getBufferedLength();
    descriptor: ()I
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
         0: .line 714
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ibuffer:Ljava/io/ByteArrayOutputStream;
            ifnonnull 1
            iconst_0
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
      StackMap locals:
      StackMap stack: int
         2: ireturn
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;

  int implGCMCrypt(java.nio.ByteBuffer, java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
    flags: (0x0000) 
    Code:
      stack=10, locals=8, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // java.nio.ByteBuffer src
        start local 2 // java.nio.ByteBuffer dst
         0: .line 723
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            sipush 8192
            irem
            isub
            istore 3 /* srcLen */
        start local 3 // int srcLen
         1: .line 725
            iload 3 /* srcLen */
            sipush 8192
            if_icmpge 3
         2: .line 726
            iconst_0
            ireturn
         3: .line 731
      StackMap locals: int
      StackMap stack:
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.hasArray:()Z
            ifeq 16
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.hasArray:()Z
            ifeq 16
         4: .line 732
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.encryption:Z
            ifeq 5
            aload 2 /* dst */
            goto 6
      StackMap locals:
      StackMap stack:
         5: aload 1 /* src */
      StackMap locals:
      StackMap stack: java.nio.ByteBuffer
         6: astore 5 /* ct */
        start local 5 // java.nio.ByteBuffer ct
         7: .line 733
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.array:()[B
         8: .line 734
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.arrayOffset:()I
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.position:()I
            iadd
            iload 3 /* srcLen */
         9: .line 735
            aload 5 /* ct */
            invokevirtual java.nio.ByteBuffer.array:()[B
            aload 5 /* ct */
            invokevirtual java.nio.ByteBuffer.arrayOffset:()I
            aload 5 /* ct */
            invokevirtual java.nio.ByteBuffer.position:()I
            iadd
        10: .line 736
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.array:()[B
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.arrayOffset:()I
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.position:()I
            iadd
        11: .line 737
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.gctr:Lcom/sun/crypto/provider/GCTR;
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ghash:Lcom/sun/crypto/provider/GHASH;
        12: .line 733
            invokestatic com.sun.crypto.provider.GaloisCounterMode.implGCMCrypt:([BII[BI[BILcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)I
            istore 4 /* len */
        start local 4 // int len
        13: .line 738
            aload 1 /* src */
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.position:()I
            iload 4 /* len */
            iadd
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
            pop
        14: .line 739
            aload 2 /* dst */
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.position:()I
            iload 4 /* len */
            iadd
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
            pop
        15: .line 740
            iload 4 /* len */
            ireturn
        end local 5 // java.nio.ByteBuffer ct
        end local 4 // int len
        16: .line 744
      StackMap locals:
      StackMap stack:
            sipush 8192
            newarray 8
            astore 5 /* bin */
        start local 5 // byte[] bin
        17: .line 745
            sipush 8192
            newarray 8
            astore 6 /* bout */
        start local 6 // byte[] bout
        18: .line 746
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.encryption:Z
            ifeq 19
            aload 6 /* bout */
            goto 20
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEngine java.nio.ByteBuffer java.nio.ByteBuffer int top byte[] byte[]
      StackMap stack:
        19: aload 5 /* bin */
      StackMap locals:
      StackMap stack: byte[]
        20: astore 7 /* ct */
        start local 7 // byte[] ct
        21: .line 747
            iload 3 /* srcLen */
            istore 4 /* len */
        start local 4 // int len
        22: .line 749
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEngine java.nio.ByteBuffer java.nio.ByteBuffer int int byte[] byte[] byte[]
      StackMap stack:
            aload 1 /* src */
            aload 5 /* bin */
            iconst_0
            sipush 8192
            invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
            pop
        23: .line 750
            iload 4 /* len */
            aload 5 /* bin */
            iconst_0
            sipush 8192
        24: .line 751
            aload 7 /* ct */
            iconst_0
            aload 6 /* bout */
            iconst_0
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.gctr:Lcom/sun/crypto/provider/GCTR;
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ghash:Lcom/sun/crypto/provider/GHASH;
        25: .line 750
            invokestatic com.sun.crypto.provider.GaloisCounterMode.implGCMCrypt:([BII[BI[BILcom/sun/crypto/provider/GCTR;Lcom/sun/crypto/provider/GHASH;)I
            isub
            istore 4 /* len */
        26: .line 752
            aload 2 /* dst */
            aload 6 /* bout */
            iconst_0
            sipush 8192
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        27: .line 753
            iload 4 /* len */
            sipush 8192
        28: .line 748
            if_icmpge 22
        29: .line 755
            iload 3 /* srcLen */
            iload 4 /* len */
            isub
            ireturn
        end local 7 // byte[] ct
        end local 6 // byte[] bout
        end local 5 // byte[] bin
        end local 4 // int len
        end local 3 // int srcLen
        end local 2 // java.nio.ByteBuffer dst
        end local 1 // java.nio.ByteBuffer src
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   30     0    this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0   30     1     src  Ljava/nio/ByteBuffer;
            0   30     2     dst  Ljava/nio/ByteBuffer;
            1   30     3  srcLen  I
           13   16     4     len  I
           22   30     4     len  I
            7   16     5      ct  Ljava/nio/ByteBuffer;
           17   30     5     bin  [B
           18   30     6    bout  [B
           21   30     7      ct  [B
    MethodParameters:
      Name  Flags
      src   
      dst   

  int mergeBlock(byte[], int, byte[], int, int, byte[]);
    descriptor: ([BI[BII[B)I
    flags: (0x0000) 
    Code:
      stack=8, locals=7, args_size=7
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // byte[] buffer
        start local 2 // int bufOfs
        start local 3 // byte[] in
        start local 4 // int inOfs
        start local 5 // int inLen
        start local 6 // byte[] block
         0: .line 769
            aload 0 /* this */
            aload 1 /* buffer */
            iload 2 /* bufOfs */
            aload 1 /* buffer */
            arraylength
            iload 2 /* bufOfs */
            isub
            aload 3 /* in */
         1: .line 770
            iload 4 /* inOfs */
            iload 5 /* inLen */
            aload 6 /* block */
         2: .line 769
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEngine.mergeBlock:([BII[BII[B)I
            ireturn
        end local 6 // byte[] block
        end local 5 // int inLen
        end local 4 // int inOfs
        end local 3 // byte[] in
        end local 2 // int bufOfs
        end local 1 // byte[] buffer
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0    3     1  buffer  [B
            0    3     2  bufOfs  I
            0    3     3      in  [B
            0    3     4   inOfs  I
            0    3     5   inLen  I
            0    3     6   block  [B
    MethodParameters:
        Name  Flags
      buffer  
      bufOfs  
      in      
      inOfs   
      inLen   
      block   

  int mergeBlock(byte[], int, int, byte[], int, int, byte[]);
    descriptor: ([BII[BII[B)I
    flags: (0x0000) 
    Code:
      stack=5, locals=9, args_size=8
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // byte[] buffer
        start local 2 // int bufOfs
        start local 3 // int bufLen
        start local 4 // byte[] in
        start local 5 // int inOfs
        start local 6 // int inLen
        start local 7 // byte[] block
         0: .line 781
            iload 3 /* bufLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            if_icmple 4
         1: .line 782
            new java.lang.RuntimeException
            dup
            new java.lang.StringBuilder
            dup
            ldc "mergeBlock called on an ibuffer too big:  "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         2: .line 783
            iload 3 /* bufLen */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " bytes"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         3: .line 782
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 786
      StackMap locals:
      StackMap stack:
            aload 1 /* buffer */
            iload 2 /* bufOfs */
            aload 7 /* block */
            iconst_0
            iload 3 /* bufLen */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         5: .line 787
            aload 7 /* block */
            arraylength
            iload 3 /* bufLen */
            isub
            iload 6 /* inLen */
            invokestatic java.lang.Math.min:(II)I
            istore 8 /* inUsed */
        start local 8 // int inUsed
         6: .line 788
            aload 4 /* in */
            iload 5 /* inOfs */
            aload 7 /* block */
            iload 3 /* bufLen */
            iload 8 /* inUsed */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         7: .line 789
            iload 8 /* inUsed */
            ireturn
        end local 8 // int inUsed
        end local 7 // byte[] block
        end local 6 // int inLen
        end local 5 // int inOfs
        end local 4 // byte[] in
        end local 3 // int bufLen
        end local 2 // int bufOfs
        end local 1 // byte[] buffer
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    8     0    this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0    8     1  buffer  [B
            0    8     2  bufOfs  I
            0    8     3  bufLen  I
            0    8     4      in  [B
            0    8     5   inOfs  I
            0    8     6   inLen  I
            0    8     7   block  [B
            6    8     8  inUsed  I
    MethodParameters:
        Name  Flags
      buffer  
      bufOfs  
      bufLen  
      in      
      inOfs   
      inLen   
      block   

  void updateAAD(byte[], int, int);
    descriptor: ([BII)V
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // byte[] src
        start local 2 // int offset
        start local 3 // int len
         0: .line 808
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.encryption:Z
            ifeq 2
         1: .line 809
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            invokevirtual com.sun.crypto.provider.GaloisCounterMode.checkReInit:()V
         2: .line 812
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnonnull 9
         3: .line 813
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.sizeOfAAD:I
            ifne 6
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadProcessed:Z
            ifne 6
         4: .line 814
            aload 0 /* this */
            new java.io.ByteArrayOutputStream
            dup
            iload 3 /* len */
            invokespecial java.io.ByteArrayOutputStream.<init>:(I)V
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
         5: .line 815
            goto 9
         6: .line 817
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         7: .line 818
            ldc "Update has been called; no more AAD data"
         8: .line 817
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 821
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
            aload 1 /* src */
            iload 2 /* offset */
            iload 3 /* len */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        10: .line 822
            return
        end local 3 // int len
        end local 2 // int offset
        end local 1 // byte[] src
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   11     0    this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0   11     1     src  [B
            0   11     2  offset  I
            0   11     3     len  I
    MethodParameters:
        Name  Flags
      src     
      offset  
      len     

  void processAAD();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=5, locals=4, args_size=1
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
         0: .line 826
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 14
         1: .line 827
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            ifle 13
         2: .line 828
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 1 /* aad */
        start local 1 // byte[] aad
         3: .line 829
            aload 0 /* this */
            aload 1 /* aad */
            arraylength
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.sizeOfAAD:I
         4: .line 831
            aload 1 /* aad */
            arraylength
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            irem
            istore 2 /* lastLen */
        start local 2 // int lastLen
         5: .line 832
            iload 2 /* lastLen */
            ifeq 12
         6: .line 833
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ghash:Lcom/sun/crypto/provider/GHASH;
            aload 1 /* aad */
            iconst_0
            aload 1 /* aad */
            arraylength
            iload 2 /* lastLen */
            isub
            invokevirtual com.sun.crypto.provider.GHASH.update:([BII)I
            pop
         7: .line 834
            aload 1 /* aad */
         8: .line 835
            aload 1 /* aad */
            arraylength
            iload 2 /* lastLen */
            isub
            iload 2 /* lastLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
         9: .line 834
            invokestatic com.sun.crypto.provider.GaloisCounterMode.expandToOneBlock:([BIII)[B
            astore 3 /* padded */
        start local 3 // byte[] padded
        10: .line 836
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ghash:Lcom/sun/crypto/provider/GHASH;
            aload 3 /* padded */
            invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
            pop
        end local 3 // byte[] padded
        11: .line 837
            goto 13
        12: .line 838
      StackMap locals: byte[] int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.ghash:Lcom/sun/crypto/provider/GHASH;
            aload 1 /* aad */
            invokevirtual com.sun.crypto.provider.GHASH.update:([B)I
            pop
        end local 2 // int lastLen
        end local 1 // byte[] aad
        13: .line 841
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadBuffer:Ljava/io/ByteArrayOutputStream;
        14: .line 843
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.aadProcessed:Z
        15: .line 844
            return
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   16     0     this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            3   13     1      aad  [B
            5   13     2  lastLen  I
           10   11     3   padded  [B

  int doLastBlock(com.sun.crypto.provider.GaloisCounterMode$GCMOperation, java.nio.ByteBuffer, java.nio.ByteBuffer, java.nio.ByteBuffer);
    descriptor: (Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
    flags: (0x0000) 
    Code:
      stack=7, locals=12, args_size=5
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // com.sun.crypto.provider.GaloisCounterMode$GCMOperation op
        start local 2 // java.nio.ByteBuffer buffer
        start local 3 // java.nio.ByteBuffer src
        start local 4 // java.nio.ByteBuffer dst
         0: .line 853
            iconst_0
            istore 5 /* len */
        start local 5 // int len
         1: .line 856
            aload 2 /* buffer */
            ifnull 2
            aload 2 /* buffer */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            goto 3
      StackMap locals: int
      StackMap stack:
         2: iconst_0
      StackMap locals:
      StackMap stack: int
         3: istore 7 /* bLen */
        start local 7 // int bLen
         4: .line 857
            iload 7 /* bLen */
            ifle 27
         5: .line 859
            iload 7 /* bLen */
            sipush 8192
            if_icmplt 8
         6: .line 860
            aload 0 /* this */
            aload 2 /* buffer */
            aload 4 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEngine.implGCMCrypt:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            istore 5 /* len */
         7: .line 861
            iload 7 /* bLen */
            iload 5 /* len */
            isub
            istore 7 /* bLen */
         8: .line 865
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEngine com.sun.crypto.provider.GaloisCounterMode$GCMOperation java.nio.ByteBuffer java.nio.ByteBuffer java.nio.ByteBuffer int top int
      StackMap stack:
            iload 7 /* bLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            if_icmplt 12
         9: .line 866
            aload 1 /* op */
            aload 2 /* buffer */
            aload 4 /* dst */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            istore 6 /* resultLen */
        start local 6 // int resultLen
        10: .line 867
            iload 7 /* bLen */
            iload 6 /* resultLen */
            isub
            istore 7 /* bLen */
        11: .line 868
            iload 5 /* len */
            iload 6 /* resultLen */
            iadd
            istore 5 /* len */
        end local 6 // int resultLen
        12: .line 872
      StackMap locals:
      StackMap stack:
            iload 7 /* bLen */
            ifle 27
        13: .line 874
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            newarray 8
            astore 8 /* block */
        start local 8 // byte[] block
        14: .line 875
            aload 2 /* buffer */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            istore 9 /* over */
        start local 9 // int over
        15: .line 876
            aload 2 /* buffer */
            aload 8 /* block */
            iconst_0
            iload 9 /* over */
            invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
            pop
        16: .line 879
            aload 3 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            iload 9 /* over */
            isub
            invokestatic java.lang.Math.min:(II)I
            istore 10 /* slen */
        start local 10 // int slen
        17: .line 880
            iload 10 /* slen */
            ifle 19
        18: .line 881
            aload 3 /* src */
            aload 8 /* block */
            iload 9 /* over */
            iload 10 /* slen */
            invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
            pop
        19: .line 883
      StackMap locals: byte[] int int
      StackMap stack:
            iload 10 /* slen */
            iload 9 /* over */
            iadd
            istore 11 /* l */
        start local 11 // int l
        20: .line 884
            iload 11 /* l */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            if_icmpne 23
        21: .line 885
            iload 5 /* len */
            aload 1 /* op */
            aload 8 /* block */
            iconst_0
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.blockSize:I
            aload 4 /* dst */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.update:([BIILjava/nio/ByteBuffer;)I
            iadd
            istore 5 /* len */
        22: .line 886
            goto 27
        23: .line 887
      StackMap locals: int
      StackMap stack:
            iload 5 /* len */
            aload 1 /* op */
            aload 8 /* block */
            iconst_0
            iload 11 /* l */
            aload 8 /* block */
            iconst_0
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.doFinal:([BII[BI)I
            iadd
            istore 5 /* len */
        24: .line 888
            aload 4 /* dst */
            ifnull 26
        25: .line 889
            aload 4 /* dst */
            aload 8 /* block */
            iconst_0
            iload 11 /* l */
            invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
            pop
        26: .line 891
      StackMap locals:
      StackMap stack:
            iload 5 /* len */
            ireturn
        end local 11 // int l
        end local 10 // int slen
        end local 9 // int over
        end local 8 // byte[] block
        27: .line 898
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEngine com.sun.crypto.provider.GaloisCounterMode$GCMOperation java.nio.ByteBuffer java.nio.ByteBuffer java.nio.ByteBuffer int top int
      StackMap stack:
            aload 3 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            sipush 8192
            if_icmplt 29
        28: .line 899
            iload 5 /* len */
            aload 0 /* this */
            aload 3 /* src */
            aload 4 /* dst */
            invokevirtual com.sun.crypto.provider.GaloisCounterMode$GCMEngine.implGCMCrypt:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            iadd
            istore 5 /* len */
        29: .line 902
      StackMap locals:
      StackMap stack:
            iload 5 /* len */
            aload 1 /* op */
            aload 3 /* src */
            aload 4 /* dst */
            invokeinterface com.sun.crypto.provider.GaloisCounterMode$GCMOperation.doFinal:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            iadd
            ireturn
        end local 7 // int bLen
        end local 5 // int len
        end local 4 // java.nio.ByteBuffer dst
        end local 3 // java.nio.ByteBuffer src
        end local 2 // java.nio.ByteBuffer buffer
        end local 1 // com.sun.crypto.provider.GaloisCounterMode$GCMOperation op
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   30     0       this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0   30     1         op  Lcom/sun/crypto/provider/GaloisCounterMode$GCMOperation;
            0   30     2     buffer  Ljava/nio/ByteBuffer;
            0   30     3        src  Ljava/nio/ByteBuffer;
            0   30     4        dst  Ljava/nio/ByteBuffer;
            1   30     5        len  I
           10   12     6  resultLen  I
            4   30     7       bLen  I
           14   27     8      block  [B
           15   27     9       over  I
           17   27    10       slen  I
           20   27    11          l  I
    MethodParameters:
        Name  Flags
      op      
      buffer  
      src     
      dst     

  java.nio.ByteBuffer overlapDetection(java.nio.ByteBuffer, java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
    flags: (0x0000) 
    Code:
      stack=6, locals=9, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // java.nio.ByteBuffer src
        start local 2 // java.nio.ByteBuffer dst
         0: .line 911
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.isDirect:()Z
            ifeq 18
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.isDirect:()Z
            ifeq 18
         1: .line 912
            aload 1 /* src */
            checkcast sun.nio.ch.DirectBuffer
            astore 3 /* dsrc */
        start local 3 // sun.nio.ch.DirectBuffer dsrc
         2: .line 913
            aload 2 /* dst */
            checkcast sun.nio.ch.DirectBuffer
            astore 4 /* ddst */
        start local 4 // sun.nio.ch.DirectBuffer ddst
         3: .line 916
            aload 3 /* dsrc */
            invokeinterface sun.nio.ch.DirectBuffer.address:()J
            lstore 5 /* srcaddr */
        start local 5 // long srcaddr
         4: .line 917
            aload 4 /* ddst */
            invokeinterface sun.nio.ch.DirectBuffer.address:()J
            lstore 7 /* dstaddr */
        start local 7 // long dstaddr
         5: .line 921
            goto 8
         6: .line 922
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEngine java.nio.ByteBuffer java.nio.ByteBuffer sun.nio.ch.DirectBuffer sun.nio.ch.DirectBuffer long long
      StackMap stack:
            aload 3 /* dsrc */
            invokeinterface sun.nio.ch.DirectBuffer.attachment:()Ljava/lang/Object;
            checkcast sun.nio.ch.DirectBuffer
            invokeinterface sun.nio.ch.DirectBuffer.address:()J
            lstore 5 /* srcaddr */
         7: .line 923
            aload 3 /* dsrc */
            invokeinterface sun.nio.ch.DirectBuffer.attachment:()Ljava/lang/Object;
            checkcast sun.nio.ch.DirectBuffer
            astore 3 /* dsrc */
         8: .line 921
      StackMap locals:
      StackMap stack:
            aload 3 /* dsrc */
            invokeinterface sun.nio.ch.DirectBuffer.attachment:()Ljava/lang/Object;
            ifnonnull 6
         9: .line 928
            goto 12
        10: .line 929
      StackMap locals:
      StackMap stack:
            aload 4 /* ddst */
            invokeinterface sun.nio.ch.DirectBuffer.attachment:()Ljava/lang/Object;
            checkcast sun.nio.ch.DirectBuffer
            invokeinterface sun.nio.ch.DirectBuffer.address:()J
            lstore 7 /* dstaddr */
        11: .line 930
            aload 4 /* ddst */
            invokeinterface sun.nio.ch.DirectBuffer.attachment:()Ljava/lang/Object;
            checkcast sun.nio.ch.DirectBuffer
            astore 4 /* ddst */
        12: .line 928
      StackMap locals:
      StackMap stack:
            aload 4 /* ddst */
            invokeinterface sun.nio.ch.DirectBuffer.attachment:()Ljava/lang/Object;
            ifnonnull 10
        13: .line 934
            lload 5 /* srcaddr */
            lload 7 /* dstaddr */
            lcmp
            ifeq 15
        14: .line 935
            aload 2 /* dst */
            areturn
        15: .line 945
      StackMap locals:
      StackMap stack:
            aload 1 /* src */
            checkcast sun.nio.ch.DirectBuffer
            invokeinterface sun.nio.ch.DirectBuffer.address:()J
            lload 5 /* srcaddr */
            lsub
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.position:()I
            i2l
            ladd
        16: .line 946
            aload 2 /* dst */
            checkcast sun.nio.ch.DirectBuffer
            invokeinterface sun.nio.ch.DirectBuffer.address:()J
            lload 7 /* dstaddr */
            lsub
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.position:()I
            i2l
            ladd
            lcmp
            iflt 26
        17: .line 947
            aload 2 /* dst */
            areturn
        end local 7 // long dstaddr
        end local 5 // long srcaddr
        end local 4 // sun.nio.ch.DirectBuffer ddst
        end local 3 // sun.nio.ch.DirectBuffer dsrc
        18: .line 950
      StackMap locals: com.sun.crypto.provider.GaloisCounterMode$GCMEngine java.nio.ByteBuffer java.nio.ByteBuffer
      StackMap stack:
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.isDirect:()Z
            ifne 25
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.isDirect:()Z
            ifne 25
        19: .line 952
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.isReadOnly:()Z
            ifne 26
        20: .line 954
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.array:()[B
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.array:()[B
            if_acmpeq 22
        21: .line 955
            aload 2 /* dst */
            areturn
        22: .line 964
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.encryption:Z
            ifeq 26
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.position:()I
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.arrayOffset:()I
            iadd
        23: .line 965
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.position:()I
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.arrayOffset:()I
            iadd
            if_icmplt 26
        24: .line 966
            aload 2 /* dst */
            areturn
        25: .line 971
      StackMap locals:
      StackMap stack:
            aload 2 /* dst */
            areturn
        26: .line 975
      StackMap locals:
      StackMap stack:
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.duplicate:()Ljava/nio/ByteBuffer;
            astore 3 /* tmp */
        start local 3 // java.nio.ByteBuffer tmp
        27: .line 977
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
            astore 4 /* bb */
        start local 4 // java.nio.ByteBuffer bb
        28: .line 978
            aload 3 /* tmp */
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.limit:()I
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/ByteBuffer;
            pop
        29: .line 979
            aload 3 /* tmp */
            aload 2 /* dst */
            invokevirtual java.nio.ByteBuffer.position:()I
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
            pop
        30: .line 980
            aload 4 /* bb */
            aload 3 /* tmp */
            invokevirtual java.nio.ByteBuffer.put:(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
            pop
        31: .line 981
            aload 4 /* bb */
            invokevirtual java.nio.ByteBuffer.flip:()Ljava/nio/ByteBuffer;
            pop
        32: .line 982
            aload 0 /* this */
            aload 2 /* dst */
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalDst:Ljava/nio/ByteBuffer;
        33: .line 983
            aload 4 /* bb */
            areturn
        end local 4 // java.nio.ByteBuffer bb
        end local 3 // java.nio.ByteBuffer tmp
        end local 2 // java.nio.ByteBuffer dst
        end local 1 // java.nio.ByteBuffer src
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   34     0     this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0   34     1      src  Ljava/nio/ByteBuffer;
            0   34     2      dst  Ljava/nio/ByteBuffer;
            2   18     3     dsrc  Lsun/nio/ch/DirectBuffer;
            3   18     4     ddst  Lsun/nio/ch/DirectBuffer;
            4   18     5  srcaddr  J
            5   18     7  dstaddr  J
           27   34     3      tmp  Ljava/nio/ByteBuffer;
           28   34     4       bb  Ljava/nio/ByteBuffer;
    MethodParameters:
      Name  Flags
      src   
      dst   

  byte[] overlapDetection(byte[], int, byte[], int);
    descriptor: ([BI[BI)[B
    flags: (0x0000) 
    Code:
      stack=2, locals=5, args_size=5
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // byte[] in
        start local 2 // int inOfs
        start local 3 // byte[] out
        start local 4 // int outOfs
         0: .line 995
            aload 1 /* in */
            aload 3 /* out */
            if_acmpne 4
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.this$0:Lcom/sun/crypto/provider/GaloisCounterMode;
            getfield com.sun.crypto.provider.GaloisCounterMode.encryption:Z
            ifeq 1
            iload 2 /* inOfs */
            iload 4 /* outOfs */
            if_icmpge 4
         1: .line 996
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* out */
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOut:[B
         2: .line 997
            aload 0 /* this */
            iload 4 /* outOfs */
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOutOfs:I
         3: .line 998
            aload 3 /* out */
            arraylength
            newarray 8
            areturn
         4: .line 1000
      StackMap locals:
      StackMap stack:
            aload 3 /* out */
            areturn
        end local 4 // int outOfs
        end local 3 // byte[] out
        end local 2 // int inOfs
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0    this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0    5     1      in  [B
            0    5     2   inOfs  I
            0    5     3     out  [B
            0    5     4  outOfs  I
    MethodParameters:
        Name  Flags
      in      
      inOfs   
      out     
      outOfs  

  void restoreDst(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // java.nio.ByteBuffer dst
         0: .line 1008
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalDst:Ljava/nio/ByteBuffer;
            ifnonnull 2
         1: .line 1009
            return
         2: .line 1012
      StackMap locals:
      StackMap stack:
            aload 1 /* dst */
            invokevirtual java.nio.ByteBuffer.flip:()Ljava/nio/ByteBuffer;
            pop
         3: .line 1013
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalDst:Ljava/nio/ByteBuffer;
            aload 1 /* dst */
            invokevirtual java.nio.ByteBuffer.put:(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
            pop
         4: .line 1014
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalDst:Ljava/nio/ByteBuffer;
         5: .line 1015
            return
        end local 1 // java.nio.ByteBuffer dst
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0    6     1   dst  Ljava/nio/ByteBuffer;
    MethodParameters:
      Name  Flags
      dst   

  void restoreOut(byte[], int);
    descriptor: ([BI)V
    flags: (0x0000) 
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
        start local 1 // byte[] out
        start local 2 // int len
         0: .line 1022
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOut:[B
            ifnonnull 2
         1: .line 1023
            return
         2: .line 1026
      StackMap locals:
      StackMap stack:
            aload 1 /* out */
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOutOfs:I
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOut:[B
            aload 0 /* this */
            getfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOutOfs:I
         3: .line 1027
            iload 2 /* len */
         4: .line 1026
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         5: .line 1028
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.GaloisCounterMode$GCMEngine.originalOut:[B
         6: .line 1029
            return
        end local 2 // int len
        end local 1 // byte[] out
        end local 0 // com.sun.crypto.provider.GaloisCounterMode$GCMEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lcom/sun/crypto/provider/GaloisCounterMode$GCMEngine;
            0    7     1   out  [B
            0    7     2   len  I
    MethodParameters:
      Name  Flags
      out   
      len   
}
SourceFile: "GaloisCounterMode.java"
NestHost: com.sun.crypto.provider.GaloisCounterMode
InnerClasses:
  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