class com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter implements com.google.crypto.tink.subtle.StreamSegmentDecrypter
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter
  super_class: java.lang.Object
{
  private javax.crypto.spec.SecretKeySpec keySpec;
    descriptor: Ljavax/crypto/spec/SecretKeySpec;
    flags: (0x0002) ACC_PRIVATE

  private javax.crypto.spec.SecretKeySpec hmacKeySpec;
    descriptor: Ljavax/crypto/spec/SecretKeySpec;
    flags: (0x0002) ACC_PRIVATE

  private javax.crypto.Cipher cipher;
    descriptor: Ljavax/crypto/Cipher;
    flags: (0x0002) ACC_PRIVATE

  private javax.crypto.Mac mac;
    descriptor: Ljavax/crypto/Mac;
    flags: (0x0002) ACC_PRIVATE

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

  final com.google.crypto.tink.subtle.AesCtrHmacStreaming this$0;
    descriptor: Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 335
            ldc Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.$assertionsDisabled:Z
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.google.crypto.tink.subtle.AesCtrHmacStreaming);
    descriptor: (Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter this
         0: .line 342
            aload 0 /* this */
            aload 1
            putfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming$AesCtrHmacStreamDecrypter;
    MethodParameters:
        Name  Flags
      this$0  final

  public synchronized void init(java.nio.ByteBuffer, byte[]);
    descriptor: (Ljava/nio/ByteBuffer;[B)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter this
        start local 1 // java.nio.ByteBuffer header
        start local 2 // byte[] aad
         0: .line 346
            aload 1 /* header */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            invokevirtual com.google.crypto.tink.subtle.AesCtrHmacStreaming.getHeaderLength:()I
            if_icmpeq 2
         1: .line 347
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "Invalid header length"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 349
      StackMap locals:
      StackMap stack:
            aload 1 /* header */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 3 /* firstByte */
        start local 3 // byte firstByte
         3: .line 350
            iload 3 /* firstByte */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            invokevirtual com.google.crypto.tink.subtle.AesCtrHmacStreaming.getHeaderLength:()I
            if_icmpeq 5
         4: .line 354
            new java.security.GeneralSecurityException
            dup
            ldc "Invalid ciphertext"
            invokespecial java.security.GeneralSecurityException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 356
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            bipush 7
            newarray 8
            putfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.noncePrefix:[B
         6: .line 357
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming.keySizeInBytes:I
            newarray 8
            astore 4 /* salt */
        start local 4 // byte[] salt
         7: .line 358
            aload 1 /* header */
            aload 4 /* salt */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
         8: .line 359
            aload 1 /* header */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.noncePrefix:[B
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
         9: .line 360
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            aload 4 /* salt */
            aload 2 /* aad */
            invokevirtual com.google.crypto.tink.subtle.AesCtrHmacStreaming.deriveKeyMaterial:([B[B)[B
            astore 5 /* keymaterial */
        start local 5 // byte[] keymaterial
        10: .line 361
            aload 0 /* this */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            aload 5 /* keymaterial */
            invokevirtual com.google.crypto.tink.subtle.AesCtrHmacStreaming.deriveKeySpec:([B)Ljavax/crypto/spec/SecretKeySpec;
            putfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.keySpec:Ljavax/crypto/spec/SecretKeySpec;
        11: .line 362
            aload 0 /* this */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            aload 5 /* keymaterial */
            invokevirtual com.google.crypto.tink.subtle.AesCtrHmacStreaming.deriveHmacKeySpec:([B)Ljavax/crypto/spec/SecretKeySpec;
            putfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.hmacKeySpec:Ljavax/crypto/spec/SecretKeySpec;
        12: .line 363
            aload 0 /* this */
            invokestatic com.google.crypto.tink.subtle.AesCtrHmacStreaming.cipherInstance:()Ljavax/crypto/Cipher;
            putfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.cipher:Ljavax/crypto/Cipher;
        13: .line 364
            aload 0 /* this */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            invokevirtual com.google.crypto.tink.subtle.AesCtrHmacStreaming.macInstance:()Ljavax/crypto/Mac;
            putfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.mac:Ljavax/crypto/Mac;
        14: .line 365
            return
        end local 5 // byte[] keymaterial
        end local 4 // byte[] salt
        end local 3 // byte firstByte
        end local 2 // byte[] aad
        end local 1 // java.nio.ByteBuffer header
        end local 0 // com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   15     0         this  Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming$AesCtrHmacStreamDecrypter;
            0   15     1       header  Ljava/nio/ByteBuffer;
            0   15     2          aad  [B
            3   15     3    firstByte  B
            7   15     4         salt  [B
           10   15     5  keymaterial  [B
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
        Name  Flags
      header  
      aad     

  public synchronized void decryptSegment(java.nio.ByteBuffer, int, boolean, java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;IZLjava/nio/ByteBuffer;)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=14, args_size=5
        start local 0 // com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter this
        start local 1 // java.nio.ByteBuffer ciphertext
        start local 2 // int segmentNr
        start local 3 // boolean isLastSegment
        start local 4 // java.nio.ByteBuffer plaintext
         0: .line 371
            aload 1 /* ciphertext */
            invokevirtual java.nio.ByteBuffer.position:()I
            istore 5 /* position */
        start local 5 // int position
         1: .line 372
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.noncePrefix:[B
            iload 2 /* segmentNr */
            i2l
            iload 3 /* isLastSegment */
            invokevirtual com.google.crypto.tink.subtle.AesCtrHmacStreaming.nonceForSegment:([BJZ)[B
            astore 6 /* nonce */
        start local 6 // byte[] nonce
         2: .line 373
            aload 1 /* ciphertext */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            istore 7 /* ctLength */
        start local 7 // int ctLength
         3: .line 374
            iload 7 /* ctLength */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming.tagSizeInBytes:I
            if_icmpge 5
         4: .line 375
            new java.security.GeneralSecurityException
            dup
            ldc "Ciphertext too short"
            invokespecial java.security.GeneralSecurityException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 377
      StackMap locals: int byte[] int
      StackMap stack:
            iload 7 /* ctLength */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming.tagSizeInBytes:I
            isub
            istore 8 /* ptLength */
        start local 8 // int ptLength
         6: .line 378
            iload 5 /* position */
            iload 8 /* ptLength */
            iadd
            istore 9 /* startOfTag */
        start local 9 // int startOfTag
         7: .line 379
            aload 1 /* ciphertext */
            invokevirtual java.nio.ByteBuffer.duplicate:()Ljava/nio/ByteBuffer;
            astore 10 /* ct */
        start local 10 // java.nio.ByteBuffer ct
         8: .line 380
            aload 10 /* ct */
            iload 9 /* startOfTag */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
         9: .line 381
            aload 1 /* ciphertext */
            invokevirtual java.nio.ByteBuffer.duplicate:()Ljava/nio/ByteBuffer;
            astore 11 /* tagBuffer */
        start local 11 // java.nio.ByteBuffer tagBuffer
        10: .line 382
            aload 11 /* tagBuffer */
            iload 9 /* startOfTag */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        11: .line 384
            getstatic com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.$assertionsDisabled:Z
            ifne 12
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.mac:Ljavax/crypto/Mac;
            ifnonnull 12
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        12: .line 385
      StackMap locals: com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter java.nio.ByteBuffer int int java.nio.ByteBuffer int byte[] int int int java.nio.ByteBuffer java.nio.ByteBuffer
      StackMap stack:
            getstatic com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.$assertionsDisabled:Z
            ifne 13
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.hmacKeySpec:Ljavax/crypto/spec/SecretKeySpec;
            ifnonnull 13
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        13: .line 386
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.mac:Ljavax/crypto/Mac;
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.hmacKeySpec:Ljavax/crypto/spec/SecretKeySpec;
            invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
        14: .line 387
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.mac:Ljavax/crypto/Mac;
            aload 6 /* nonce */
            invokevirtual javax.crypto.Mac.update:([B)V
        15: .line 388
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.mac:Ljavax/crypto/Mac;
            aload 10 /* ct */
            invokevirtual javax.crypto.Mac.update:(Ljava/nio/ByteBuffer;)V
        16: .line 389
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.mac:Ljavax/crypto/Mac;
            invokevirtual javax.crypto.Mac.doFinal:()[B
            astore 12 /* tag */
        start local 12 // byte[] tag
        17: .line 390
            aload 12 /* tag */
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming.tagSizeInBytes:I
            invokestatic java.util.Arrays.copyOf:([BI)[B
            astore 12 /* tag */
        18: .line 391
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming.tagSizeInBytes:I
            newarray 8
            astore 13 /* expectedTag */
        start local 13 // byte[] expectedTag
        19: .line 392
            getstatic com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.$assertionsDisabled:Z
            ifne 20
            aload 11 /* tagBuffer */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.this$0:Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming;
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming.tagSizeInBytes:I
            if_icmpeq 20
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        20: .line 393
      StackMap locals: byte[] byte[]
      StackMap stack:
            aload 11 /* tagBuffer */
            aload 13 /* expectedTag */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
        21: .line 394
            getstatic com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.$assertionsDisabled:Z
            ifne 22
            aload 13 /* expectedTag */
            arraylength
            aload 12 /* tag */
            arraylength
            if_icmpeq 22
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        22: .line 395
      StackMap locals:
      StackMap stack:
            aload 13 /* expectedTag */
            aload 12 /* tag */
            invokestatic com.google.crypto.tink.subtle.Bytes.equal:([B[B)Z
            ifne 24
        23: .line 396
            new java.security.GeneralSecurityException
            dup
            ldc "Tag mismatch"
            invokespecial java.security.GeneralSecurityException.<init>:(Ljava/lang/String;)V
            athrow
        24: .line 399
      StackMap locals:
      StackMap stack:
            aload 1 /* ciphertext */
            iload 9 /* startOfTag */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        25: .line 400
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.cipher:Ljavax/crypto/Cipher;
            iconst_1
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.keySpec:Ljavax/crypto/spec/SecretKeySpec;
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 6 /* nonce */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            invokevirtual javax.crypto.Cipher.init:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
        26: .line 401
            aload 0 /* this */
            getfield com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter.cipher:Ljavax/crypto/Cipher;
            aload 1 /* ciphertext */
            aload 4 /* plaintext */
            invokevirtual javax.crypto.Cipher.doFinal:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
            pop
        27: .line 402
            return
        end local 13 // byte[] expectedTag
        end local 12 // byte[] tag
        end local 11 // java.nio.ByteBuffer tagBuffer
        end local 10 // java.nio.ByteBuffer ct
        end local 9 // int startOfTag
        end local 8 // int ptLength
        end local 7 // int ctLength
        end local 6 // byte[] nonce
        end local 5 // int position
        end local 4 // java.nio.ByteBuffer plaintext
        end local 3 // boolean isLastSegment
        end local 2 // int segmentNr
        end local 1 // java.nio.ByteBuffer ciphertext
        end local 0 // com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   28     0           this  Lcom/google/crypto/tink/subtle/AesCtrHmacStreaming$AesCtrHmacStreamDecrypter;
            0   28     1     ciphertext  Ljava/nio/ByteBuffer;
            0   28     2      segmentNr  I
            0   28     3  isLastSegment  Z
            0   28     4      plaintext  Ljava/nio/ByteBuffer;
            1   28     5       position  I
            2   28     6          nonce  [B
            3   28     7       ctLength  I
            6   28     8       ptLength  I
            7   28     9     startOfTag  I
            8   28    10             ct  Ljava/nio/ByteBuffer;
           10   28    11      tagBuffer  Ljava/nio/ByteBuffer;
           17   28    12            tag  [B
           19   28    13    expectedTag  [B
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
               Name  Flags
      ciphertext     
      segmentNr      
      isLastSegment  
      plaintext      
}
SourceFile: "AesCtrHmacStreaming.java"
NestHost: com.google.crypto.tink.subtle.AesCtrHmacStreaming
InnerClasses:
  AesCtrHmacStreamDecrypter = com.google.crypto.tink.subtle.AesCtrHmacStreaming$AesCtrHmacStreamDecrypter of com.google.crypto.tink.subtle.AesCtrHmacStreaming