final class com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec implements com.sun.crypto.provider.ChaCha20Cipher$ChaChaEngine
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec
  super_class: java.lang.Object
{
  private final java.io.ByteArrayOutputStream cipherBuf;
    descriptor: Ljava/io/ByteArrayOutputStream;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final byte[] tag;
    descriptor: [B
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  final com.sun.crypto.provider.ChaCha20Cipher this$0;
    descriptor: Lcom/sun/crypto/provider/ChaCha20Cipher;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  public int getOutputSize(int, boolean);
    descriptor: (IZ)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
        start local 1 // int inLen
        start local 2 // boolean isFinal
         0: .line 1313
            iload 2 /* isFinal */
            ifeq 7
         1: .line 1314
            iload 1 /* inLen */
            bipush 16
            isub
         2: .line 1315
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.cipherBuf:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
         3: .line 1314
            invokestatic java.lang.Math.addExact:(II)I
         4: .line 1315
            iconst_0
         5: .line 1314
            invokestatic java.lang.Integer.max:(II)I
         6: .line 1315
            goto 8
      StackMap locals:
      StackMap stack:
         7: iconst_0
         8: .line 1313
      StackMap locals:
      StackMap stack: int
            ireturn
        end local 2 // boolean isFinal
        end local 1 // int inLen
        end local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lcom/sun/crypto/provider/ChaCha20Cipher$EngineAEADDec;
            0    9     1    inLen  I
            0    9     2  isFinal  Z
    MethodParameters:
         Name  Flags
      inLen    
      isFinal  

  private void <init>(com.sun.crypto.provider.ChaCha20Cipher);
    descriptor: (Lcom/sun/crypto/provider/ChaCha20Cipher;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
         0: .line 1318
            aload 0 /* this */
            aload 1
            putfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 1319
            aload 1
            invokevirtual com.sun.crypto.provider.ChaCha20Cipher.initAuthenticator:()V
         2: .line 1320
            aload 1
            lconst_1
            putfield com.sun.crypto.provider.ChaCha20Cipher.counter:J
         3: .line 1321
            aload 0 /* this */
            new java.io.ByteArrayOutputStream
            dup
            sipush 1024
            invokespecial java.io.ByteArrayOutputStream.<init>:(I)V
            putfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.cipherBuf:Ljava/io/ByteArrayOutputStream;
         4: .line 1322
            aload 0 /* this */
            bipush 16
            newarray 8
            putfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.tag:[B
         5: .line 1323
            return
        end local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lcom/sun/crypto/provider/ChaCha20Cipher$EngineAEADDec;
    Exceptions:
      throws java.security.InvalidKeyException
    MethodParameters:
        Name  Flags
      this$0  final

  public int doUpdate(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=6
        start local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
        start local 1 // byte[] in
        start local 2 // int inOff
        start local 3 // int inLen
        start local 4 // byte[] out
        start local 5 // int outOff
         0: .line 1328
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            getfield com.sun.crypto.provider.ChaCha20Cipher.initialized:Z
            ifeq 8
         1: .line 1332
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            getfield com.sun.crypto.provider.ChaCha20Cipher.aadDone:Z
            ifne 4
         2: .line 1333
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            getfield com.sun.crypto.provider.ChaCha20Cipher.aadLen:J
            invokevirtual com.sun.crypto.provider.ChaCha20Cipher.authPad16:(J)V
         3: .line 1334
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            iconst_1
            putfield com.sun.crypto.provider.ChaCha20Cipher.aadDone:Z
         4: .line 1337
      StackMap locals:
      StackMap stack:
            aload 1 /* in */
            ifnull 11
         5: .line 1338
            iload 2 /* inOff */
            iload 3 /* inLen */
            aload 1 /* in */
            arraylength
            invokestatic java.util.Objects.checkFromIndexSize:(III)I
            pop
         6: .line 1339
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.cipherBuf:Ljava/io/ByteArrayOutputStream;
            aload 1 /* in */
            iload 2 /* inOff */
            iload 3 /* inLen */
            invokevirtual java.io.ByteArrayOutputStream.write:([BII)V
         7: .line 1341
            goto 11
         8: .line 1342
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         9: .line 1343
            ldc "Must use either a different key or iv."
        10: .line 1342
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 1346
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 5 // int outOff
        end local 4 // byte[] out
        end local 3 // int inLen
        end local 2 // int inOff
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   12     0    this  Lcom/sun/crypto/provider/ChaCha20Cipher$EngineAEADDec;
            0   12     1      in  [B
            0   12     2   inOff  I
            0   12     3   inLen  I
            0   12     4     out  [B
            0   12     5  outOff  I
    MethodParameters:
        Name  Flags
      in      
      inOff   
      inLen   
      out     
      outOff  

  public int doFinal(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=11, args_size=6
        start local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
        start local 1 // byte[] in
        start local 2 // int inOff
        start local 3 // int inLen
        start local 4 // byte[] out
        start local 5 // int outOff
         0: .line 1356
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.cipherBuf:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.size:()I
            ifne 5
            iload 2 /* inOff */
            ifne 5
         1: .line 1360
            aload 0 /* this */
            aconst_null
            iload 2 /* inOff */
            iload 3 /* inLen */
            aload 4 /* out */
            iload 5 /* outOff */
            invokevirtual com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.doUpdate:([BII[BI)I
            pop
         2: .line 1361
            aload 1 /* in */
            astore 6 /* ctPlusTag */
        start local 6 // byte[] ctPlusTag
         3: .line 1362
            iload 3 /* inLen */
            istore 7 /* ctPlusTagLen */
        start local 7 // int ctPlusTagLen
         4: .line 1363
            goto 8
        end local 7 // int ctPlusTagLen
        end local 6 // byte[] ctPlusTag
         5: .line 1364
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* in */
            iload 2 /* inOff */
            iload 3 /* inLen */
            aload 4 /* out */
            iload 5 /* outOff */
            invokevirtual com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.doUpdate:([BII[BI)I
            pop
         6: .line 1365
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.cipherBuf:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
            astore 6 /* ctPlusTag */
        start local 6 // byte[] ctPlusTag
         7: .line 1366
            aload 6 /* ctPlusTag */
            arraylength
            istore 7 /* ctPlusTagLen */
        start local 7 // int ctPlusTagLen
         8: .line 1368
      StackMap locals: byte[] int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.cipherBuf:Ljava/io/ByteArrayOutputStream;
            invokevirtual java.io.ByteArrayOutputStream.reset:()V
         9: .line 1372
            iload 7 /* ctPlusTagLen */
            bipush 16
            if_icmpge 11
        10: .line 1373
            new javax.crypto.AEADBadTagException
            dup
            ldc "Input too short - need tag"
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 1375
      StackMap locals:
      StackMap stack:
            iload 7 /* ctPlusTagLen */
            bipush 16
            isub
            istore 8 /* ctLen */
        start local 8 // int ctLen
        12: .line 1379
            iload 5 /* outOff */
            iload 8 /* ctLen */
            aload 4 /* out */
            arraylength
            invokestatic java.util.Objects.checkFromIndexSize:(III)I
            pop
        13: .line 1380
            goto 16
      StackMap locals: com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec byte[] int int byte[] int byte[] int int
      StackMap stack: java.lang.IndexOutOfBoundsException
        14: pop
        15: .line 1381
            new javax.crypto.ShortBufferException
            dup
            ldc "Output buffer too small"
            invokespecial javax.crypto.ShortBufferException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 1386
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            aload 6 /* ctPlusTag */
            iconst_0
            iload 8 /* ctLen */
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.tag:[B
            iconst_0
            invokevirtual com.sun.crypto.provider.ChaCha20Cipher.authFinalizeData:([BII[BI)V
        17: .line 1387
            getstatic com.sun.crypto.provider.ChaCha20Cipher.asLongView:Ljava/lang/invoke/VarHandle;
            aload 6 /* ctPlusTag */
            iload 8 /* ctLen */
            invokevirtual java.lang.invoke.VarHandle.get:([BI)J
        18: .line 1388
            getstatic com.sun.crypto.provider.ChaCha20Cipher.asLongView:Ljava/lang/invoke/VarHandle;
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.tag:[B
            iconst_0
            invokevirtual java.lang.invoke.VarHandle.get:([BI)J
        19: .line 1387
            lxor
        20: .line 1389
            getstatic com.sun.crypto.provider.ChaCha20Cipher.asLongView:Ljava/lang/invoke/VarHandle;
            aload 6 /* ctPlusTag */
            iload 8 /* ctLen */
            bipush 8
            iadd
            invokevirtual java.lang.invoke.VarHandle.get:([BI)J
        21: .line 1390
            getstatic com.sun.crypto.provider.ChaCha20Cipher.asLongView:Ljava/lang/invoke/VarHandle;
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.tag:[B
            bipush 8
            invokevirtual java.lang.invoke.VarHandle.get:([BI)J
        22: .line 1389
            lxor
        23: .line 1387
            lor
            lstore 9 /* tagCompare */
        start local 9 // long tagCompare
        24: .line 1391
            lload 9 /* tagCompare */
            lconst_0
            lcmp
            ifeq 26
        25: .line 1392
            new javax.crypto.AEADBadTagException
            dup
            ldc "Tag mismatch"
            invokespecial javax.crypto.AEADBadTagException.<init>:(Ljava/lang/String;)V
            athrow
        26: .line 1394
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            aload 6 /* ctPlusTag */
            iconst_0
            iload 8 /* ctLen */
            aload 4 /* out */
            iload 5 /* outOff */
            invokevirtual com.sun.crypto.provider.ChaCha20Cipher.chaCha20Transform:([BII[BI)V
        27: .line 1395
            aload 0 /* this */
            getfield com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec.this$0:Lcom/sun/crypto/provider/ChaCha20Cipher;
            iconst_0
            putfield com.sun.crypto.provider.ChaCha20Cipher.aadDone:Z
        28: .line 1397
            iload 8 /* ctLen */
            ireturn
        end local 9 // long tagCompare
        end local 8 // int ctLen
        end local 7 // int ctPlusTagLen
        end local 6 // byte[] ctPlusTag
        end local 5 // int outOff
        end local 4 // byte[] out
        end local 3 // int inLen
        end local 2 // int inOff
        end local 1 // byte[] in
        end local 0 // com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   29     0          this  Lcom/sun/crypto/provider/ChaCha20Cipher$EngineAEADDec;
            0   29     1            in  [B
            0   29     2         inOff  I
            0   29     3         inLen  I
            0   29     4           out  [B
            0   29     5        outOff  I
            3    5     6     ctPlusTag  [B
            7   29     6     ctPlusTag  [B
            4    5     7  ctPlusTagLen  I
            8   29     7  ctPlusTagLen  I
           12   29     8         ctLen  I
           24   29     9    tagCompare  J
      Exception table:
        from    to  target  type
          12    13      14  Class java.lang.IndexOutOfBoundsException
    Exceptions:
      throws javax.crypto.ShortBufferException, javax.crypto.AEADBadTagException, java.security.KeyException
    MethodParameters:
        Name  Flags
      in      
      inOff   
      inLen   
      out     
      outOff  
}
SourceFile: "ChaCha20Cipher.java"
NestHost: com.sun.crypto.provider.ChaCha20Cipher
InnerClasses:
  abstract ChaChaEngine = com.sun.crypto.provider.ChaCha20Cipher$ChaChaEngine of com.sun.crypto.provider.ChaCha20Cipher
  private final EngineAEADDec = com.sun.crypto.provider.ChaCha20Cipher$EngineAEADDec of com.sun.crypto.provider.ChaCha20Cipher