final class com.sun.crypto.provider.GCTR extends com.sun.crypto.provider.CounterMode
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: com.sun.crypto.provider.GCTR
super_class: com.sun.crypto.provider.CounterMode
{
void <init>(com.sun.crypto.provider.SymmetricCipher, byte[]);
descriptor: (Lcom/sun/crypto/provider/SymmetricCipher;[B)V
flags: (0x0000)
Code:
stack=5, locals=3, args_size=3
start local 0 // com.sun.crypto.provider.GCTR this
start local 1 // com.sun.crypto.provider.SymmetricCipher cipher
start local 2 // byte[] initialCounterBlk
0: .line 58
aload 0 /* this */
aload 1 /* cipher */
invokespecial com.sun.crypto.provider.CounterMode.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;)V
1: .line 59
aload 2 /* initialCounterBlk */
arraylength
bipush 16
if_icmpeq 5
2: .line 60
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "length of initial counter block ("
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 2 /* initialCounterBlk */
arraylength
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
3: .line 61
ldc ") not equal to AES_BLOCK_SIZE ("
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
bipush 16
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
ldc ")"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
4: .line 60
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
5: .line 64
StackMap locals: com.sun.crypto.provider.GCTR com.sun.crypto.provider.SymmetricCipher byte[]
StackMap stack:
aload 0 /* this */
aload 2 /* initialCounterBlk */
putfield com.sun.crypto.provider.GCTR.iv:[B
6: .line 65
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.reset:()V
7: .line 66
return
end local 2 // byte[] initialCounterBlk
end local 1 // com.sun.crypto.provider.SymmetricCipher cipher
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/sun/crypto/provider/GCTR;
0 8 1 cipher Lcom/sun/crypto/provider/SymmetricCipher;
0 8 2 initialCounterBlk [B
MethodParameters:
Name Flags
cipher
initialCounterBlk
java.lang.String getFeedback();
descriptor: ()Ljava/lang/String;
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 // com.sun.crypto.provider.GCTR this
0: .line 70
ldc "GCTR"
areturn
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/sun/crypto/provider/GCTR;
private long blocksUntilRollover();
descriptor: ()J
flags: (0x0002) ACC_PRIVATE
Code:
stack=4, locals=6, args_size=1
start local 0 // com.sun.crypto.provider.GCTR this
0: .line 75
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
arraylength
iconst_4
isub
iconst_4
invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
astore 1 /* buf */
start local 1 // java.nio.ByteBuffer buf
1: .line 76
aload 1 /* buf */
getstatic java.nio.ByteOrder.BIG_ENDIAN:Ljava/nio/ByteOrder;
invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
pop
2: .line 77
ldc 4294967295
aload 1 /* buf */
invokevirtual java.nio.ByteBuffer.getInt:()I
i2l
land
lstore 2 /* ctr32 */
start local 2 // long ctr32
3: .line 78
ldc 4294967296
lload 2 /* ctr32 */
lsub
lstore 4 /* blocksLeft */
start local 4 // long blocksLeft
4: .line 79
lload 4 /* blocksLeft */
lreturn
end local 4 // long blocksLeft
end local 2 // long ctr32
end local 1 // java.nio.ByteBuffer buf
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/sun/crypto/provider/GCTR;
1 5 1 buf Ljava/nio/ByteBuffer;
3 5 2 ctr32 J
4 5 4 blocksLeft J
int update(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0000)
Code:
stack=6, locals=13, args_size=6
start local 0 // com.sun.crypto.provider.GCTR 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 84
iload 3 /* inLen */
iload 2 /* inOfs */
isub
aload 1 /* in */
arraylength
if_icmple 2
1: .line 85
new java.lang.RuntimeException
dup
ldc "input length out of bound"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
2: .line 87
StackMap locals:
StackMap stack:
iload 3 /* inLen */
iflt 3
iload 3 /* inLen */
bipush 16
irem
ifeq 4
3: .line 88
StackMap locals:
StackMap stack:
new java.lang.RuntimeException
dup
ldc "input length unsupported"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
4: .line 90
StackMap locals:
StackMap stack:
aload 4 /* out */
arraylength
iload 5 /* outOfs */
isub
iload 3 /* inLen */
if_icmpge 6
5: .line 91
new java.lang.RuntimeException
dup
ldc "output buffer too small"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
6: .line 94
StackMap locals:
StackMap stack:
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.blocksUntilRollover:()J
lstore 6 /* blocksLeft */
start local 6 // long blocksLeft
7: .line 95
iload 3 /* inLen */
bipush 16
idiv
istore 8 /* numOfCompleteBlocks */
start local 8 // int numOfCompleteBlocks
8: .line 96
iload 8 /* numOfCompleteBlocks */
i2l
lload 6 /* blocksLeft */
lcmp
iflt 25
9: .line 99
bipush 16
newarray 8
astore 9 /* encryptedCntr */
start local 9 // byte[] encryptedCntr
10: .line 100
iconst_0
istore 10 /* i */
start local 10 // int i
11: goto 23
12: .line 101
StackMap locals: com.sun.crypto.provider.GCTR byte[] int int byte[] int long int byte[] int
StackMap stack:
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.embeddedCipher:Lcom/sun/crypto/provider/SymmetricCipher;
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
iconst_0
aload 9 /* encryptedCntr */
iconst_0
invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
13: .line 102
iconst_0
istore 11 /* n */
start local 11 // int n
14: goto 20
15: .line 103
StackMap locals: int
StackMap stack:
iload 10 /* i */
bipush 16
imul
iload 11 /* n */
iadd
istore 12 /* index */
start local 12 // int index
16: .line 104
aload 4 /* out */
iload 5 /* outOfs */
iload 12 /* index */
iadd
17: .line 105
aload 1 /* in */
iload 2 /* inOfs */
iload 12 /* index */
iadd
baload
aload 9 /* encryptedCntr */
iload 11 /* n */
baload
ixor
i2b
18: .line 104
bastore
end local 12 // int index
19: .line 102
iinc 11 /* n */ 1
StackMap locals:
StackMap stack:
20: iload 11 /* n */
bipush 16
if_icmplt 15
end local 11 // int n
21: .line 107
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
invokestatic com.sun.crypto.provider.GaloisCounterMode.increment32:([B)V
22: .line 100
iinc 10 /* i */ 1
StackMap locals:
StackMap stack:
23: iload 10 /* i */
iload 8 /* numOfCompleteBlocks */
if_icmplt 12
end local 10 // int i
24: .line 109
iload 3 /* inLen */
ireturn
end local 9 // byte[] encryptedCntr
25: .line 111
StackMap locals:
StackMap stack:
aload 0 /* this */
aload 1 /* in */
iload 2 /* inOfs */
iload 3 /* inLen */
aload 4 /* out */
iload 5 /* outOfs */
invokevirtual com.sun.crypto.provider.GCTR.encrypt:([BII[BI)I
ireturn
end local 8 // int numOfCompleteBlocks
end local 6 // long blocksLeft
end local 5 // int outOfs
end local 4 // byte[] out
end local 3 // int inLen
end local 2 // int inOfs
end local 1 // byte[] in
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 26 0 this Lcom/sun/crypto/provider/GCTR;
0 26 1 in [B
0 26 2 inOfs I
0 26 3 inLen I
0 26 4 out [B
0 26 5 outOfs I
7 26 6 blocksLeft J
8 26 8 numOfCompleteBlocks I
10 25 9 encryptedCntr [B
11 24 10 i I
14 21 11 n I
16 19 12 index I
MethodParameters:
Name Flags
in
inOfs
inLen
out
outOfs
int doFinal(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0000)
Code:
stack=6, locals=11, args_size=6
start local 0 // com.sun.crypto.provider.GCTR 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 119
iload 3 /* inLen */
ifge 2
1: .line 120
new javax.crypto.IllegalBlockSizeException
dup
ldc "Negative input size!"
invokespecial javax.crypto.IllegalBlockSizeException.<init>:(Ljava/lang/String;)V
athrow
2: .line 121
StackMap locals:
StackMap stack:
iload 3 /* inLen */
ifle 22
3: .line 122
iload 3 /* inLen */
bipush 16
irem
istore 6 /* lastBlockSize */
start local 6 // int lastBlockSize
4: .line 123
iload 3 /* inLen */
iload 6 /* lastBlockSize */
isub
istore 7 /* completeBlkLen */
start local 7 // int completeBlkLen
5: .line 125
aload 0 /* this */
aload 1 /* in */
iload 2 /* inOfs */
iload 7 /* completeBlkLen */
aload 4 /* out */
iload 5 /* outOfs */
invokevirtual com.sun.crypto.provider.GCTR.update:([BII[BI)I
pop
6: .line 126
iload 6 /* lastBlockSize */
ifeq 22
7: .line 128
bipush 16
newarray 8
astore 8 /* encryptedCntr */
start local 8 // byte[] encryptedCntr
8: .line 129
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.embeddedCipher:Lcom/sun/crypto/provider/SymmetricCipher;
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
iconst_0
aload 8 /* encryptedCntr */
iconst_0
invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
9: .line 130
iconst_0
istore 9 /* n */
start local 9 // int n
10: goto 17
11: .line 131
StackMap locals: com.sun.crypto.provider.GCTR byte[] int int byte[] int int int byte[] int
StackMap stack:
aload 4 /* out */
iload 5 /* outOfs */
iload 7 /* completeBlkLen */
iadd
iload 9 /* n */
iadd
12: .line 132
aload 1 /* in */
iload 2 /* inOfs */
iload 7 /* completeBlkLen */
iadd
iload 9 /* n */
iadd
baload
13: .line 133
aload 8 /* encryptedCntr */
iload 9 /* n */
baload
14: .line 132
ixor
i2b
15: .line 131
bastore
16: .line 130
iinc 9 /* n */ 1
StackMap locals:
StackMap stack:
17: iload 9 /* n */
iload 6 /* lastBlockSize */
if_icmplt 11
end local 9 // int n
end local 8 // byte[] encryptedCntr
end local 7 // int completeBlkLen
end local 6 // int lastBlockSize
18: .line 137
goto 22
StackMap locals: com.sun.crypto.provider.GCTR byte[] int int byte[] int
StackMap stack: java.lang.Throwable
19: astore 10
20: .line 138
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.reset:()V
21: .line 139
aload 10
athrow
22: .line 138
StackMap locals:
StackMap stack:
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.reset:()V
23: .line 140
iload 3 /* inLen */
ireturn
end local 5 // int outOfs
end local 4 // byte[] out
end local 3 // int inLen
end local 2 // int inOfs
end local 1 // byte[] in
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 24 0 this Lcom/sun/crypto/provider/GCTR;
0 24 1 in [B
0 24 2 inOfs I
0 24 3 inLen I
0 24 4 out [B
0 24 5 outOfs I
4 18 6 lastBlockSize I
5 18 7 completeBlkLen I
8 18 8 encryptedCntr [B
10 18 9 n I
Exception table:
from to target type
0 19 19 any
Exceptions:
throws javax.crypto.IllegalBlockSizeException
MethodParameters:
Name Flags
in
inOfs
inLen
out
outOfs
}
SourceFile: "GCTR.java"