class com.oracle.security.ucrypto.NativeGCMCipher extends com.oracle.security.ucrypto.NativeCipher
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.oracle.security.ucrypto.NativeGCMCipher
  super_class: com.oracle.security.ucrypto.NativeCipher
{
  private static final int DEFAULT_TAG_LEN;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 128

  private static final int MAX_BUF_SIZE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2147483647

  private java.io.ByteArrayOutputStream aadBuffer;
    descriptor: Ljava/io/ByteArrayOutputStream;
    flags: (0x0002) ACC_PRIVATE

  private java.io.ByteArrayOutputStream ibuffer;
    descriptor: Ljava/io/ByteArrayOutputStream;
    flags: (0x0002) ACC_PRIVATE

  private int processed;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int tagLen;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private boolean requireReinit;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private byte[] lastEncKey;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private byte[] lastEncIv;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private void checkAndUpdateProcessed(int);
    descriptor: (I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // int len
         0: .line 91
            ldc 2147483647
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            isub
            istore 2 /* inputDataLimit */
        start local 2 // int inputDataLimit
         1: .line 93
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.processed:I
            iload 2 /* inputDataLimit */
            iload 1 /* len */
            isub
            if_icmple 5
         2: .line 94
            new java.security.ProviderException
            dup
            new java.lang.StringBuilder
            dup
            ldc "OracleUcrypto provider only supports input size up to "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         3: .line 95
            iload 2 /* inputDataLimit */
            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;
         4: .line 94
            invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 97
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            dup
            getfield com.oracle.security.ucrypto.NativeGCMCipher.processed:I
            iload 1 /* len */
            iadd
            putfield com.oracle.security.ucrypto.NativeGCMCipher.processed:I
         6: .line 98
            return
        end local 2 // int inputDataLimit
        end local 1 // int len
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    7     0            this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0    7     1             len  I
            1    7     2  inputDataLimit  I
    MethodParameters:
      Name  Flags
      len   

  void <init>(int);
    descriptor: (I)V
    flags: (0x0000) 
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // int fixedKeySize
         0: .line 101
            aload 0 /* this */
            getstatic com.oracle.security.ucrypto.UcryptoMech.CRYPTO_AES_GCM:Lcom/oracle/security/ucrypto/UcryptoMech;
            iload 1 /* fixedKeySize */
            invokespecial com.oracle.security.ucrypto.NativeCipher.<init>:(Lcom/oracle/security/ucrypto/UcryptoMech;I)V
         1: .line 73
            aload 0 /* this */
            sipush 128
            putfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
         2: .line 85
            aload 0 /* this */
            aconst_null
            putfield com.oracle.security.ucrypto.NativeGCMCipher.lastEncKey:[B
         3: .line 86
            aload 0 /* this */
            aconst_null
            putfield com.oracle.security.ucrypto.NativeGCMCipher.lastEncIv:[B
         4: .line 102
            return
        end local 1 // int fixedKeySize
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    5     0          this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0    5     1  fixedKeySize  I
    Exceptions:
      throws java.security.NoSuchAlgorithmException
    MethodParameters:
              Name  Flags
      fixedKeySize  

  protected void ensureInitialized();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=2, args_size=1
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
         0: .line 106
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.initialized:Z
            ifne 9
         1: .line 107
            aconst_null
            astore 1 /* aad */
        start local 1 // byte[] aad
         2: .line 108
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 5
         3: .line 109
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            ifle 5
         4: .line 110
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 1 /* aad */
         5: .line 113
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            aload 1 /* aad */
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.init:(Z[B[BI[B)V
         6: .line 114
            aload 0 /* this */
            aconst_null
            putfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
         7: .line 115
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.initialized:Z
            ifne 9
         8: .line 116
            new com.oracle.security.ucrypto.UcryptoException
            dup
            ldc "Cannot initialize Cipher"
            invokespecial com.oracle.security.ucrypto.UcryptoException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // byte[] aad
         9: .line 119
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            2    9     1   aad  [B

  protected int getOutputSizeByOperation(int, boolean);
    descriptor: (IZ)I
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // int inLen
        start local 2 // boolean isDoFinal
         0: .line 123
            iload 1 /* inLen */
            ifge 1
            iconst_0
            ireturn
         1: .line 125
      StackMap locals:
      StackMap stack:
            iload 2 /* isDoFinal */
            ifne 3
            iload 1 /* inLen */
            ifne 3
         2: .line 126
            iconst_0
            ireturn
         3: .line 129
      StackMap locals:
      StackMap stack:
            iload 1 /* inLen */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.bytesBuffered:I
            iadd
            istore 3 /* result */
        start local 3 // int result
         4: .line 130
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            ifeq 8
         5: .line 131
            iload 2 /* isDoFinal */
            ifeq 11
         6: .line 132
            iload 3 /* result */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            bipush 8
            idiv
            iadd
            istore 3 /* result */
         7: .line 134
            goto 11
         8: .line 135
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 10
         9: .line 136
            iload 3 /* result */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            iadd
            istore 3 /* result */
        10: .line 138
      StackMap locals:
      StackMap stack:
            iload 3 /* result */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            bipush 8
            idiv
            isub
            istore 3 /* result */
        11: .line 140
      StackMap locals:
      StackMap stack:
            iload 3 /* result */
            ifge 13
        12: .line 141
            iconst_0
            istore 3 /* result */
        13: .line 143
      StackMap locals:
      StackMap stack:
            iload 3 /* result */
            ireturn
        end local 3 // int result
        end local 2 // boolean isDoFinal
        end local 1 // int inLen
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   14     0       this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   14     1      inLen  I
            0   14     2  isDoFinal  Z
            4   14     3     result  I
    MethodParameters:
           Name  Flags
      inLen      
      isDoFinal  

  protected void reset(boolean);
    descriptor: (Z)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // boolean doCancel
         0: .line 148
            aload 0 /* this */
            iload 1 /* doCancel */
            invokespecial com.oracle.security.ucrypto.NativeCipher.reset:(Z)V
         1: .line 149
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnonnull 4
         2: .line 150
            aload 0 /* this */
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            putfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
         3: .line 151
            goto 5
         4: .line 152
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.reset:()V
         5: .line 155
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 7
         6: .line 156
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.reset:()V
         7: .line 158
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            ifne 8
            aload 0 /* this */
            iconst_0
            putfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
         8: .line 159
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.oracle.security.ucrypto.NativeGCMCipher.processed:I
         9: .line 160
            return
        end local 1 // boolean doCancel
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   10     1  doCancel  Z
    MethodParameters:
          Name  Flags
      doCancel  

  protected void init(boolean, byte[], byte[], int, byte[]);
    descriptor: (Z[B[BI[B)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=7, locals=8, args_size=6
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // boolean encrypt
        start local 2 // byte[] keyVal
        start local 3 // byte[] ivVal
        start local 4 // int tLen
        start local 5 // byte[] aad
         0: .line 164
            aload 0 /* this */
            iconst_1
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.reset:(Z)V
         1: .line 165
            aload 0 /* this */
            iload 1 /* encrypt */
            putfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
         2: .line 166
            aload 0 /* this */
            aload 2 /* keyVal */
            putfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
         3: .line 167
            aload 0 /* this */
            aload 3 /* ivVal */
            putfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
         4: .line 168
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.mech:Lcom/oracle/security/ucrypto/UcryptoMech;
            invokevirtual com.oracle.security.ucrypto.UcryptoMech.value:()I
            iload 1 /* encrypt */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
         5: .line 169
            iload 4 /* tLen */
            aload 5 /* aad */
         6: .line 168
            invokestatic com.oracle.security.ucrypto.NativeCipher.nativeInit:(IZ[B[BI[B)J
            lstore 6 /* pCtxtVal */
        start local 6 // long pCtxtVal
         7: .line 170
            aload 0 /* this */
            lload 6 /* pCtxtVal */
            lconst_0
            lcmp
            ifeq 8
            iconst_1
            goto 9
      StackMap locals: com.oracle.security.ucrypto.NativeGCMCipher int byte[] byte[] int byte[] long
      StackMap stack: com.oracle.security.ucrypto.NativeGCMCipher
         8: iconst_0
      StackMap locals: com.oracle.security.ucrypto.NativeGCMCipher int byte[] byte[] int byte[] long
      StackMap stack: com.oracle.security.ucrypto.NativeGCMCipher int
         9: putfield com.oracle.security.ucrypto.NativeGCMCipher.initialized:Z
        10: .line 171
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.initialized:Z
            ifeq 13
        11: .line 172
            aload 0 /* this */
            new com.oracle.security.ucrypto.CipherContextRef
            dup
            aload 0 /* this */
            lload 6 /* pCtxtVal */
            iload 1 /* encrypt */
            invokespecial com.oracle.security.ucrypto.CipherContextRef.<init>:(Lcom/oracle/security/ucrypto/NativeCipher;JZ)V
            putfield com.oracle.security.ucrypto.NativeGCMCipher.pCtxt:Lcom/oracle/security/ucrypto/CipherContextRef;
        12: .line 173
            goto 14
        13: .line 174
      StackMap locals:
      StackMap stack:
            new com.oracle.security.ucrypto.UcryptoException
            dup
            ldc "Cannot initialize Cipher"
            invokespecial com.oracle.security.ucrypto.UcryptoException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 176
      StackMap locals:
      StackMap stack:
            return
        end local 6 // long pCtxtVal
        end local 5 // byte[] aad
        end local 4 // int tLen
        end local 3 // byte[] ivVal
        end local 2 // byte[] keyVal
        end local 1 // boolean encrypt
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   15     0      this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   15     1   encrypt  Z
            0   15     2    keyVal  [B
            0   15     3     ivVal  [B
            0   15     4      tLen  I
            0   15     5       aad  [B
            7   15     6  pCtxtVal  J
    MethodParameters:
         Name  Flags
      encrypt  
      keyVal   
      ivVal    
      tLen     
      aad      

  protected synchronized java.security.AlgorithmParameters engineGetParameters();
    descriptor: ()Ljava/security/AlgorithmParameters;
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
         0: .line 181
            aconst_null
            astore 1 /* params */
        start local 1 // java.security.AlgorithmParameters params
         1: .line 183
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
            ifnull 8
         2: .line 184
            new javax.crypto.spec.GCMParameterSpec
            dup
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
            invokevirtual byte[].clone:()Ljava/lang/Object;
            checkcast byte[]
            invokespecial javax.crypto.spec.GCMParameterSpec.<init>:(I[B)V
            astore 2 /* gcmSpec */
        start local 2 // javax.crypto.spec.GCMParameterSpec gcmSpec
         3: .line 185
            ldc "GCM"
            invokestatic java.security.AlgorithmParameters.getInstance:(Ljava/lang/String;)Ljava/security/AlgorithmParameters;
            astore 1 /* params */
         4: .line 186
            aload 1 /* params */
            aload 2 /* gcmSpec */
            invokevirtual java.security.AlgorithmParameters.init:(Ljava/security/spec/AlgorithmParameterSpec;)V
        end local 2 // javax.crypto.spec.GCMParameterSpec gcmSpec
         5: .line 188
            goto 8
      StackMap locals: com.oracle.security.ucrypto.NativeGCMCipher java.security.AlgorithmParameters
      StackMap stack: java.security.GeneralSecurityException
         6: astore 2 /* e */
        start local 2 // java.security.GeneralSecurityException e
         7: .line 191
            new com.oracle.security.ucrypto.UcryptoException
            dup
            ldc "Could not encode parameters"
            aload 2 /* e */
            invokespecial com.oracle.security.ucrypto.UcryptoException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.security.GeneralSecurityException e
         8: .line 193
      StackMap locals:
      StackMap stack:
            aload 1 /* params */
            areturn
        end local 1 // java.security.AlgorithmParameters params
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            1    9     1   params  Ljava/security/AlgorithmParameters;
            3    5     2  gcmSpec  Ljavax/crypto/spec/GCMParameterSpec;
            7    8     2        e  Ljava/security/GeneralSecurityException;
      Exception table:
        from    to  target  type
           1     5       6  Class java.security.GeneralSecurityException

  protected synchronized void engineInit(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom);
    descriptor: (ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=9, args_size=5
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // int opmode
        start local 2 // java.security.Key key
        start local 3 // java.security.spec.AlgorithmParameterSpec params
        start local 4 // java.security.SecureRandom random
         0: .line 201
            aload 0 /* this */
            aload 2 /* key */
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.checkKey:(Ljava/security/Key;)I
            pop
         1: .line 202
            iload 1 /* opmode */
            iconst_1
            if_icmpeq 8
         2: .line 203
            iload 1 /* opmode */
            iconst_2
            if_icmpeq 8
         3: .line 204
            iload 1 /* opmode */
            iconst_3
            if_icmpeq 8
         4: .line 205
            iload 1 /* opmode */
            iconst_4
            if_icmpeq 8
         5: .line 206
            new java.security.InvalidAlgorithmParameterException
            dup
         6: .line 207
            new java.lang.StringBuilder
            dup
            ldc "Unsupported mode: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 1 /* opmode */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         7: .line 206
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 209
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            putfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
         9: .line 210
            iload 1 /* opmode */
            iconst_1
            if_icmpeq 10
            iload 1 /* opmode */
            iconst_3
            if_icmpeq 10
            iconst_0
            goto 11
      StackMap locals:
      StackMap stack:
        10: iconst_1
      StackMap locals:
      StackMap stack: int
        11: istore 5 /* doEncrypt */
        start local 5 // boolean doEncrypt
        12: .line 211
            aload 2 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            invokevirtual byte[].clone:()Ljava/lang/Object;
            checkcast byte[]
            astore 6 /* keyBytes */
        start local 6 // byte[] keyBytes
        13: .line 212
            aconst_null
            astore 7 /* ivBytes */
        start local 7 // byte[] ivBytes
        14: .line 213
            aload 3 /* params */
            ifnull 22
        15: .line 214
            aload 3 /* params */
            instanceof javax.crypto.spec.GCMParameterSpec
            ifne 19
        16: .line 215
            new java.security.InvalidAlgorithmParameterException
            dup
            new java.lang.StringBuilder
            dup
            ldc "GCMParameterSpec required. Received: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        17: .line 216
            aload 3 /* params */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        18: .line 215
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        19: .line 218
      StackMap locals: int byte[] byte[]
      StackMap stack:
            aload 0 /* this */
            aload 3 /* params */
            checkcast javax.crypto.spec.GCMParameterSpec
            invokevirtual javax.crypto.spec.GCMParameterSpec.getTLen:()I
            putfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
        20: .line 219
            aload 3 /* params */
            checkcast javax.crypto.spec.GCMParameterSpec
            invokevirtual javax.crypto.spec.GCMParameterSpec.getIV:()[B
            astore 7 /* ivBytes */
        21: .line 221
            goto 30
        22: .line 222
      StackMap locals:
      StackMap stack:
            iload 5 /* doEncrypt */
            ifeq 29
        23: .line 223
            aload 0 /* this */
            sipush 128
            putfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
        24: .line 226
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.blockSize:I
            newarray 8
            astore 7 /* ivBytes */
        25: .line 227
            aload 4 /* random */
            ifnonnull 27
        26: .line 228
            invokestatic sun.security.jca.JCAUtil.getSecureRandom:()Ljava/security/SecureRandom;
            astore 4 /* random */
        27: .line 230
      StackMap locals:
      StackMap stack:
            aload 4 /* random */
            aload 7 /* ivBytes */
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
        28: .line 231
            goto 30
        29: .line 232
      StackMap locals:
      StackMap stack:
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "Parameters required for decryption"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        30: .line 235
      StackMap locals:
      StackMap stack:
            iload 5 /* doEncrypt */
            ifeq 43
        31: .line 236
            aload 0 /* this */
            aload 7 /* ivBytes */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.lastEncIv:[B
            invokestatic java.util.Arrays.equals:([B[B)Z
            ifeq 33
        32: .line 237
            aload 6 /* keyBytes */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.lastEncKey:[B
            invokestatic java.security.MessageDigest.isEqual:([B[B)Z
            ifeq 33
            iconst_1
            goto 34
      StackMap locals:
      StackMap stack: com.oracle.security.ucrypto.NativeGCMCipher
        33: iconst_0
        34: .line 236
      StackMap locals: com.oracle.security.ucrypto.NativeGCMCipher int java.security.Key java.security.spec.AlgorithmParameterSpec java.security.SecureRandom int byte[] byte[]
      StackMap stack: com.oracle.security.ucrypto.NativeGCMCipher int
            putfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
        35: .line 238
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
            ifeq 39
        36: .line 239
            new java.security.InvalidAlgorithmParameterException
            dup
        37: .line 240
            ldc "Cannot reuse iv for GCM encryption"
        38: .line 239
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        39: .line 242
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 7 /* ivBytes */
            putfield com.oracle.security.ucrypto.NativeGCMCipher.lastEncIv:[B
        40: .line 243
            aload 0 /* this */
            aload 6 /* keyBytes */
            putfield com.oracle.security.ucrypto.NativeGCMCipher.lastEncKey:[B
        41: .line 244
            aload 0 /* this */
            aconst_null
            putfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
        42: .line 245
            goto 45
        43: .line 246
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
        44: .line 247
            aload 0 /* this */
            new java.io.ByteArrayOutputStream
            dup
            invokespecial java.io.ByteArrayOutputStream.<init>:()V
            putfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
        45: .line 250
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 5 /* doEncrypt */
            aload 6 /* keyBytes */
            aload 7 /* ivBytes */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            aconst_null
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.init:(Z[B[BI[B)V
        46: .line 251
            goto 53
      StackMap locals:
      StackMap stack: com.oracle.security.ucrypto.UcryptoException
        47: astore 8 /* ex */
        start local 8 // com.oracle.security.ucrypto.UcryptoException ex
        48: .line 252
            aload 8 /* ex */
            invokevirtual com.oracle.security.ucrypto.UcryptoException.getError:()Lcom/oracle/security/ucrypto/UcryptoException$Error;
        49: .line 253
            getstatic com.oracle.security.ucrypto.UcryptoException$Error.CRYPTO_MECHANISM_PARAM_INVALID:Lcom/oracle/security/ucrypto/UcryptoException$Error;
        50: .line 252
            if_acmpne 52
        51: .line 255
            new java.security.InvalidAlgorithmParameterException
            dup
            aload 8 /* ex */
            invokevirtual com.oracle.security.ucrypto.UcryptoException.getMessage:()Ljava/lang/String;
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        52: .line 257
      StackMap locals: com.oracle.security.ucrypto.UcryptoException
      StackMap stack:
            aload 8 /* ex */
            athrow
        end local 8 // com.oracle.security.ucrypto.UcryptoException ex
        53: .line 260
      StackMap locals:
      StackMap stack:
            return
        end local 7 // byte[] ivBytes
        end local 6 // byte[] keyBytes
        end local 5 // boolean doEncrypt
        end local 4 // java.security.SecureRandom random
        end local 3 // java.security.spec.AlgorithmParameterSpec params
        end local 2 // java.security.Key key
        end local 1 // int opmode
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   54     0       this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   54     1     opmode  I
            0   54     2        key  Ljava/security/Key;
            0   54     3     params  Ljava/security/spec/AlgorithmParameterSpec;
            0   54     4     random  Ljava/security/SecureRandom;
           12   54     5  doEncrypt  Z
           13   54     6   keyBytes  [B
           14   54     7    ivBytes  [B
           48   53     8         ex  Lcom/oracle/security/ucrypto/UcryptoException;
      Exception table:
        from    to  target  type
          45    46      47  Class com.oracle.security.ucrypto.UcryptoException
    Exceptions:
      throws java.security.InvalidKeyException, java.security.InvalidAlgorithmParameterException
    MethodParameters:
        Name  Flags
      opmode  
      key     
      params  
      random  

  protected synchronized void engineInit(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom);
    descriptor: (ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=5, locals=7, args_size=5
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // int opmode
        start local 2 // java.security.Key key
        start local 3 // java.security.AlgorithmParameters params
        start local 4 // java.security.SecureRandom random
         0: .line 267
            aconst_null
            astore 5 /* spec */
        start local 5 // java.security.spec.AlgorithmParameterSpec spec
         1: .line 268
            aload 3 /* params */
            ifnull 6
         2: .line 271
            aload 3 /* params */
            ldc Ljavax/crypto/spec/GCMParameterSpec;
            invokevirtual java.security.AlgorithmParameters.getParameterSpec:(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;
            astore 5 /* spec */
         3: .line 272
            goto 6
      StackMap locals: com.oracle.security.ucrypto.NativeGCMCipher int java.security.Key java.security.AlgorithmParameters java.security.SecureRandom java.security.spec.AlgorithmParameterSpec
      StackMap stack: java.security.spec.InvalidParameterSpecException
         4: astore 6 /* iaps */
        start local 6 // java.security.spec.InvalidParameterSpecException iaps
         5: .line 273
            new java.security.InvalidAlgorithmParameterException
            dup
            aload 6 /* iaps */
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 6 // java.security.spec.InvalidParameterSpecException iaps
         6: .line 276
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* opmode */
            aload 2 /* key */
            aload 5 /* spec */
            aload 4 /* random */
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.engineInit:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
         7: .line 277
            return
        end local 5 // java.security.spec.AlgorithmParameterSpec spec
        end local 4 // java.security.SecureRandom random
        end local 3 // java.security.AlgorithmParameters params
        end local 2 // java.security.Key key
        end local 1 // int opmode
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    8     0    this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0    8     1  opmode  I
            0    8     2     key  Ljava/security/Key;
            0    8     3  params  Ljava/security/AlgorithmParameters;
            0    8     4  random  Ljava/security/SecureRandom;
            1    8     5    spec  Ljava/security/spec/AlgorithmParameterSpec;
            5    6     6    iaps  Ljava/security/spec/InvalidParameterSpecException;
      Exception table:
        from    to  target  type
           2     3       4  Class java.security.spec.InvalidParameterSpecException
    Exceptions:
      throws java.security.InvalidKeyException, java.security.InvalidAlgorithmParameterException
    MethodParameters:
        Name  Flags
      opmode  
      key     
      params  
      random  

  protected synchronized byte[] engineUpdate(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // byte[] in
        start local 2 // int inOfs
        start local 3 // int inLen
         0: .line 282
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 4
         1: .line 283
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            ifle 3
         2: .line 285
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.init:(Z[B[BI[B)V
         3: .line 287
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
         4: .line 289
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
            ifeq 8
         5: .line 290
            new java.lang.IllegalStateException
            dup
         6: .line 291
            ldc "Must use either different key or iv for GCM encryption"
         7: .line 290
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 293
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 3 /* inLen */
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.checkAndUpdateProcessed:(I)V
         9: .line 294
            iload 3 /* inLen */
            ifle 14
        10: .line 295
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            ifne 13
        11: .line 296
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        12: .line 297
            aconst_null
            areturn
        13: .line 299
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            invokespecial com.oracle.security.ucrypto.NativeCipher.engineUpdate:([BII)[B
            areturn
        14: .line 300
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 3 // int inLen
        end local 2 // int inOfs
        end local 1 // byte[] in
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   15     0   this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   15     1     in  [B
            0   15     2  inOfs  I
            0   15     3  inLen  I
    MethodParameters:
       Name  Flags
      in     
      inOfs  
      inLen  

  protected synchronized int engineUpdate(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=7, args_size=6
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher 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 307
            aload 0 /* this */
            iload 3 /* inLen */
            iconst_0
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.getOutputSizeByOperation:(IZ)I
            istore 6 /* len */
        start local 6 // int len
         1: .line 308
            aload 4 /* out */
            arraylength
            iload 5 /* outOfs */
            isub
            iload 6 /* len */
            if_icmpge 6
         2: .line 309
            new javax.crypto.ShortBufferException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Output buffer must be (at least) "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         3: .line 310
            iload 6 /* len */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " bytes long. Got: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         4: .line 311
            aload 4 /* out */
            arraylength
            iload 5 /* outOfs */
            isub
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 309
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 313
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 10
         7: .line 314
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            ifle 9
         8: .line 316
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.init:(Z[B[BI[B)V
         9: .line 318
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
        10: .line 320
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
            ifeq 14
        11: .line 321
            new java.lang.IllegalStateException
            dup
        12: .line 322
            ldc "Must use either different key or iv for GCM encryption"
        13: .line 321
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 324
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 3 /* inLen */
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.checkAndUpdateProcessed:(I)V
        15: .line 325
            iload 3 /* inLen */
            ifle 20
        16: .line 326
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            ifne 19
        17: .line 327
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        18: .line 328
            iconst_0
            ireturn
        19: .line 330
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            aload 4 /* out */
            iload 5 /* outOfs */
            invokespecial com.oracle.security.ucrypto.NativeCipher.engineUpdate:([BII[BI)I
            ireturn
        20: .line 333
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        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.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   21     0    this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   21     1      in  [B
            0   21     2   inOfs  I
            0   21     3   inLen  I
            0   21     4     out  [B
            0   21     5  outOfs  I
            1   21     6     len  I
    Exceptions:
      throws javax.crypto.ShortBufferException
    MethodParameters:
        Name  Flags
      in      
      inOfs   
      inLen   
      out     
      outOfs  

  protected synchronized void engineUpdateAAD(byte[], int, int);
    descriptor: ([BII)V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // byte[] src
        start local 2 // int srcOfs
        start local 3 // int srcLen
         0: .line 341
            aload 1 /* src */
            ifnull 1
            iload 2 /* srcOfs */
            iflt 1
            iload 2 /* srcOfs */
            iload 3 /* srcLen */
            iadd
            aload 1 /* src */
            arraylength
            if_icmple 2
         1: .line 342
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "Invalid AAD"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 344
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
            ifnonnull 4
         3: .line 345
            new java.lang.IllegalStateException
            dup
            ldc "Need to initialize Cipher first"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 347
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
            ifeq 8
         5: .line 348
            new java.lang.IllegalStateException
            dup
         6: .line 349
            ldc "Must use either different key or iv for GCM encryption"
         7: .line 348
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 351
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 11
         9: .line 352
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            aload 1 /* src */
            iload 2 /* srcOfs */
            iload 3 /* srcLen */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        10: .line 353
            goto 14
        11: .line 355
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
        12: .line 356
            ldc "Update has been called; no more AAD data"
        13: .line 355
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 358
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int srcLen
        end local 2 // int srcOfs
        end local 1 // byte[] src
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   15     0    this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   15     1     src  [B
            0   15     2  srcOfs  I
            0   15     3  srcLen  I
    Exceptions:
      throws java.lang.IllegalStateException
    MethodParameters:
        Name  Flags
      src     
      srcOfs  
      srcLen  

  protected void engineUpdateAAD(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // java.nio.ByteBuffer src
         0: .line 364
            aload 1 /* src */
            ifnonnull 2
         1: .line 365
            new java.lang.IllegalArgumentException
            dup
            ldc "Invalid AAD"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 367
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
            ifnonnull 4
         3: .line 368
            new java.lang.IllegalStateException
            dup
            ldc "Need to initialize Cipher first"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 370
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
            ifeq 8
         5: .line 371
            new java.lang.IllegalStateException
            dup
         6: .line 372
            ldc "Must use either different key or iv for GCM encryption"
         7: .line 371
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 374
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 14
         9: .line 375
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifeq 17
        10: .line 376
            aload 1 /* src */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            newarray 8
            astore 2 /* srcBytes */
        start local 2 // byte[] srcBytes
        11: .line 377
            aload 1 /* src */
            aload 2 /* srcBytes */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        12: .line 378
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            aload 2 /* srcBytes */
            iconst_0
            aload 2 /* srcBytes */
            arraylength
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        end local 2 // byte[] srcBytes
        13: .line 380
            goto 17
        14: .line 382
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
        15: .line 383
            ldc "Update has been called; no more AAD data"
        16: .line 382
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        17: .line 385
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.nio.ByteBuffer src
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   18     0      this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   18     1       src  Ljava/nio/ByteBuffer;
           11   13     2  srcBytes  [B
    Exceptions:
      throws java.lang.IllegalStateException
    MethodParameters:
      Name  Flags
      src   

  protected synchronized byte[] engineDoFinal(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=6, args_size=4
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
        start local 1 // byte[] in
        start local 2 // int inOfs
        start local 3 // int inLen
         0: .line 391
            aload 0 /* this */
            iload 3 /* inLen */
            iconst_1
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.getOutputSizeByOperation:(IZ)I
            newarray 8
            astore 4 /* out */
        start local 4 // byte[] out
         1: .line 394
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            aload 4 /* out */
            iconst_0
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.engineDoFinal:([BII[BI)I
            istore 5 /* k */
        start local 5 // int k
         2: .line 395
            aload 4 /* out */
            arraylength
            iload 5 /* k */
            if_icmpeq 4
         3: .line 396
            aload 4 /* out */
            iload 5 /* k */
            invokestatic java.util.Arrays.copyOf:([BI)[B
            astore 4 /* out */
         4: .line 398
      StackMap locals: byte[] int
      StackMap stack:
            aload 4 /* out */
         5: areturn
        end local 5 // int k
         6: .line 399
      StackMap locals: com.oracle.security.ucrypto.NativeGCMCipher byte[] int int byte[]
      StackMap stack: javax.crypto.ShortBufferException
            astore 5 /* e */
        start local 5 // javax.crypto.ShortBufferException e
         7: .line 400
            new com.oracle.security.ucrypto.UcryptoException
            dup
            ldc "Internal Error"
            aload 5 /* e */
            invokespecial com.oracle.security.ucrypto.UcryptoException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 5 // javax.crypto.ShortBufferException e
        end local 4 // byte[] out
        end local 3 // int inLen
        end local 2 // int inOfs
        end local 1 // byte[] in
        end local 0 // com.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    8     0   this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0    8     1     in  [B
            0    8     2  inOfs  I
            0    8     3  inLen  I
            1    8     4    out  [B
            2    6     5      k  I
            7    8     5      e  Ljavax/crypto/ShortBufferException;
      Exception table:
        from    to  target  type
           1     5       6  Class javax.crypto.ShortBufferException
    Exceptions:
      throws javax.crypto.IllegalBlockSizeException, javax.crypto.BadPaddingException
    MethodParameters:
       Name  Flags
      in     
      inOfs  
      inLen  

  protected synchronized int engineDoFinal(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=10, args_size=6
        start local 0 // com.oracle.security.ucrypto.NativeGCMCipher 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 410
            aload 0 /* this */
            iload 3 /* inLen */
            iconst_1
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.getOutputSizeByOperation:(IZ)I
            istore 6 /* len */
        start local 6 // int len
         1: .line 411
            aload 4 /* out */
            arraylength
            iload 5 /* outOfs */
            isub
            iload 6 /* len */
            if_icmpge 6
         2: .line 412
            new javax.crypto.ShortBufferException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Output buffer must be (at least) "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         3: .line 413
            iload 6 /* len */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " bytes long. Got: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         4: .line 414
            aload 4 /* out */
            arraylength
            iload 5 /* outOfs */
            isub
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         5: .line 412
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 416
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            ifnull 10
         7: .line 417
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            ifle 9
         8: .line 419
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.keyValue:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.iv:[B
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.init:(Z[B[BI[B)V
         9: .line 421
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield com.oracle.security.ucrypto.NativeGCMCipher.aadBuffer:Ljava/io/ByteArrayOutputStream;
        10: .line 423
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
            ifeq 14
        11: .line 424
            new java.lang.IllegalStateException
            dup
        12: .line 425
            ldc "Must use either different key or iv for GCM encryption"
        13: .line 424
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        14: .line 428
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 3 /* inLen */
            invokevirtual com.oracle.security.ucrypto.NativeGCMCipher.checkAndUpdateProcessed:(I)V
        15: .line 429
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            ifne 26
        16: .line 430
            iload 3 /* inLen */
            ifle 18
        17: .line 431
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
        18: .line 433
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            istore 3 /* inLen */
        19: .line 434
            iload 3 /* inLen */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            bipush 8
            idiv
            if_icmpge 23
        20: .line 437
            new javax.crypto.AEADBadTagException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Input too short - need tag. inLen: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        21: .line 438
            iload 3 /* inLen */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ". tagLen: "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.tagLen:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        22: .line 437
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
        23: .line 441
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 1 /* in */
        24: .line 442
            iconst_0
            istore 2 /* inOfs */
        25: .line 443
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.ibuffer:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.reset:()V
        26: .line 446
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOfs */
            iload 3 /* inLen */
            aload 4 /* out */
            iload 5 /* outOfs */
            invokespecial com.oracle.security.ucrypto.NativeCipher.engineDoFinal:([BII[BI)I
            istore 9
        27: .line 455
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            putfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
        28: .line 446
            iload 9
            ireturn
        29: .line 447
      StackMap locals:
      StackMap stack: com.oracle.security.ucrypto.UcryptoException
            astore 7 /* ue */
        start local 7 // com.oracle.security.ucrypto.UcryptoException ue
        30: .line 448
            aload 7 /* ue */
            invokevirtual com.oracle.security.ucrypto.UcryptoException.getMessage:()Ljava/lang/String;
            ldc "CRYPTO_INVALID_MAC"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 32
        31: .line 449
            new javax.crypto.AEADBadTagException
            dup
            ldc "Tag does not match"
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
        32: .line 452
      StackMap locals: com.oracle.security.ucrypto.UcryptoException
      StackMap stack:
            aload 7 /* ue */
            athrow
        end local 7 // com.oracle.security.ucrypto.UcryptoException ue
        33: .line 454
      StackMap locals: com.oracle.security.ucrypto.NativeGCMCipher byte[] int int byte[] int int
      StackMap stack: java.lang.Throwable
            astore 8
        34: .line 455
            aload 0 /* this */
            aload 0 /* this */
            getfield com.oracle.security.ucrypto.NativeGCMCipher.encrypt:Z
            putfield com.oracle.security.ucrypto.NativeGCMCipher.requireReinit:Z
        35: .line 456
            aload 8
            athrow
        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.oracle.security.ucrypto.NativeGCMCipher this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   36     0    this  Lcom/oracle/security/ucrypto/NativeGCMCipher;
            0   36     1      in  [B
            0   36     2   inOfs  I
            0   36     3   inLen  I
            0   36     4     out  [B
            0   36     5  outOfs  I
            1   36     6     len  I
           30   33     7      ue  Lcom/oracle/security/ucrypto/UcryptoException;
      Exception table:
        from    to  target  type
          26    27      29  Class com.oracle.security.ucrypto.UcryptoException
          26    27      33  any
          29    33      33  any
    Exceptions:
      throws javax.crypto.ShortBufferException, javax.crypto.IllegalBlockSizeException, javax.crypto.BadPaddingException
    MethodParameters:
        Name  Flags
      in      
      inOfs   
      inLen   
      out     
      outOfs  
}
SourceFile: "NativeGCMCipher.java"
NestMembers:
  com.oracle.security.ucrypto.NativeGCMCipher$AesGcmNoPadding
InnerClasses:
  public final AesGcmNoPadding = com.oracle.security.ucrypto.NativeGCMCipher$AesGcmNoPadding of com.oracle.security.ucrypto.NativeGCMCipher
  public final Error = com.oracle.security.ucrypto.UcryptoException$Error of com.oracle.security.ucrypto.UcryptoException