final class com.sun.crypto.provider.GCTR extends com.sun.crypto.provider.CounterMode implements com.sun.crypto.provider.GCM
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
{
private static final int MAX_LEN;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 1024
private byte[] block;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
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 61
aload 0 /* this */
aload 1 /* cipher */
invokespecial com.sun.crypto.provider.CounterMode.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;)V
1: .line 62
aload 2 /* initialCounterBlk */
arraylength
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
if_icmpeq 6
2: .line 63
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
3: .line 64
aload 2 /* initialCounterBlk */
arraylength
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
ldc ") not equal to blockSize ("
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
4: .line 65
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
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;
5: .line 63
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
6: .line 68
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
7: .line 69
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.reset:()V
8: .line 70
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 9 0 this Lcom/sun/crypto/provider/GCTR;
0 9 1 cipher Lcom/sun/crypto/provider/SymmetricCipher;
0 9 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 74
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 79
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 80
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 81
ldc 4294967295
aload 1 /* buf */
invokevirtual java.nio.ByteBuffer.getInt:()I
i2l
land
lstore 2 /* ctr32 */
start local 2 // long ctr32
3: .line 82
ldc 4294967296
lload 2 /* ctr32 */
lsub
lstore 4 /* blocksLeft */
start local 4 // long blocksLeft
4: .line 83
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
private void checkBlock();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=1, args_size=1
start local 0 // com.sun.crypto.provider.GCTR this
0: .line 87
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
ifnonnull 3
1: .line 88
aload 0 /* this */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
newarray 8
putfield com.sun.crypto.provider.GCTR.block:[B
2: .line 89
goto 4
3: .line 90
StackMap locals:
StackMap stack:
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iconst_0
invokestatic java.util.Arrays.fill:([BB)V
4: .line 92
StackMap locals:
StackMap stack:
return
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/sun/crypto/provider/GCTR;
public int update(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=12, 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 100
iload 3 /* inLen */
ifne 2
1: .line 101
iconst_0
ireturn
2: .line 104
StackMap locals:
StackMap stack:
iload 3 /* inLen */
iload 2 /* inOfs */
isub
aload 1 /* in */
arraylength
if_icmple 4
3: .line 105
new java.lang.RuntimeException
dup
ldc "input length out of bound"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
4: .line 107
StackMap locals:
StackMap stack:
iload 3 /* inLen */
ifge 6
5: .line 108
new java.lang.RuntimeException
dup
ldc "input length unsupported"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
6: .line 110
StackMap locals:
StackMap stack:
aload 4 /* out */
arraylength
iload 5 /* outOfs */
isub
iload 3 /* inLen */
iload 3 /* inLen */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
irem
isub
if_icmpge 8
7: .line 111
new java.lang.RuntimeException
dup
ldc "output buffer too small"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
8: .line 114
StackMap locals:
StackMap stack:
iload 3 /* inLen */
iload 3 /* inLen */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
irem
isub
istore 3 /* inLen */
9: .line 115
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.blocksUntilRollover:()J
lstore 6 /* blocksLeft */
start local 6 // long blocksLeft
10: .line 116
iload 3 /* inLen */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
idiv
istore 8 /* numOfCompleteBlocks */
start local 8 // int numOfCompleteBlocks
11: .line 117
iload 8 /* numOfCompleteBlocks */
i2l
lload 6 /* blocksLeft */
lcmp
iflt 28
12: .line 120
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.checkBlock:()V
13: .line 121
iconst_0
istore 9 /* i */
start local 9 // int i
14: goto 26
15: .line 122
StackMap locals: long int 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 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iconst_0
invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
16: .line 123
iconst_0
istore 10 /* n */
start local 10 // int n
17: goto 23
18: .line 124
StackMap locals: int
StackMap stack:
iload 9 /* i */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
imul
iload 10 /* n */
iadd
istore 11 /* index */
start local 11 // int index
19: .line 125
aload 4 /* out */
iload 5 /* outOfs */
iload 11 /* index */
iadd
20: .line 126
aload 1 /* in */
iload 2 /* inOfs */
iload 11 /* index */
iadd
baload
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iload 10 /* n */
baload
ixor
i2b
21: .line 125
bastore
end local 11 // int index
22: .line 123
iinc 10 /* n */ 1
StackMap locals:
StackMap stack:
23: iload 10 /* n */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
if_icmplt 18
end local 10 // int n
24: .line 128
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
invokestatic com.sun.crypto.provider.GaloisCounterMode.increment32:([B)V
25: .line 121
iinc 9 /* i */ 1
StackMap locals:
StackMap stack:
26: iload 9 /* i */
iload 8 /* numOfCompleteBlocks */
if_icmplt 15
end local 9 // int i
27: .line 130
iload 3 /* inLen */
ireturn
28: .line 132
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 29 0 this Lcom/sun/crypto/provider/GCTR;
0 29 1 in [B
0 29 2 inOfs I
0 29 3 inLen I
0 29 4 out [B
0 29 5 outOfs I
10 29 6 blocksLeft J
11 29 8 numOfCompleteBlocks I
14 27 9 i I
17 24 10 n I
19 22 11 index I
MethodParameters:
Name Flags
in
inOfs
inLen
out
outOfs
public int update(byte[], int, int, java.nio.ByteBuffer);
descriptor: ([BIILjava/nio/ByteBuffer;)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=12, args_size=5
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 // java.nio.ByteBuffer dst
0: .line 142
aload 4 /* dst */
invokevirtual java.nio.ByteBuffer.isDirect:()Z
ifne 6
1: .line 143
aload 0 /* this */
aload 1 /* in */
iload 2 /* inOfs */
iload 3 /* inLen */
aload 4 /* dst */
invokevirtual java.nio.ByteBuffer.array:()[B
2: .line 144
aload 4 /* dst */
invokevirtual java.nio.ByteBuffer.arrayOffset:()I
aload 4 /* dst */
invokevirtual java.nio.ByteBuffer.position:()I
iadd
3: .line 143
invokevirtual com.sun.crypto.provider.GCTR.update:([BII[BI)I
istore 5 /* len */
start local 5 // int len
4: .line 145
aload 4 /* dst */
aload 4 /* dst */
invokevirtual java.nio.ByteBuffer.position:()I
iload 5 /* len */
iadd
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
5: .line 146
iload 5 /* len */
ireturn
end local 5 // int len
6: .line 150
StackMap locals:
StackMap stack:
iload 3 /* inLen */
iload 2 /* inOfs */
isub
aload 1 /* in */
arraylength
if_icmple 8
7: .line 151
new java.lang.RuntimeException
dup
ldc "input length out of bound"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
8: .line 153
StackMap locals:
StackMap stack:
iload 3 /* inLen */
ifge 10
9: .line 154
new java.lang.RuntimeException
dup
ldc "input length unsupported"
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
10: .line 159
StackMap locals:
StackMap stack:
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.blocksUntilRollover:()J
lstore 5 /* blocksLeft */
start local 5 // long blocksLeft
11: .line 160
iload 3 /* inLen */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
idiv
istore 7 /* numOfCompleteBlocks */
start local 7 // int numOfCompleteBlocks
12: .line 161
iload 7 /* numOfCompleteBlocks */
i2l
lload 5 /* blocksLeft */
lcmp
iflt 27
13: .line 164
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.checkBlock:()V
14: .line 165
iconst_0
istore 8 /* i */
start local 8 // int i
15: goto 25
16: .line 166
StackMap locals: long int 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 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iconst_0
invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
17: .line 167
iconst_0
istore 9 /* n */
start local 9 // int n
18: goto 22
19: .line 168
StackMap locals: int
StackMap stack:
iload 8 /* i */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
imul
iload 9 /* n */
iadd
istore 10 /* index */
start local 10 // int index
20: .line 169
aload 4 /* dst */
aload 1 /* in */
iload 2 /* inOfs */
iload 10 /* index */
iadd
baload
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iload 9 /* n */
baload
ixor
i2b
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
end local 10 // int index
21: .line 167
iinc 9 /* n */ 1
StackMap locals:
StackMap stack:
22: iload 9 /* n */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
if_icmplt 19
end local 9 // int n
23: .line 171
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
invokestatic com.sun.crypto.provider.GaloisCounterMode.increment32:([B)V
24: .line 165
iinc 8 /* i */ 1
StackMap locals:
StackMap stack:
25: iload 8 /* i */
iload 7 /* numOfCompleteBlocks */
if_icmplt 16
end local 8 // int i
26: .line 173
iload 3 /* inLen */
ireturn
27: .line 175
StackMap locals:
StackMap stack:
iload 3 /* inLen */
iload 3 /* inLen */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
irem
isub
istore 8 /* len */
start local 8 // int len
28: .line 176
iload 8 /* len */
istore 9 /* processed */
start local 9 // int processed
29: .line 177
sipush 1024
iload 8 /* len */
invokestatic java.lang.Math.min:(II)I
newarray 8
astore 10 /* out */
start local 10 // byte[] out
30: .line 178
iload 2 /* inOfs */
istore 11 /* offset */
start local 11 // int offset
31: .line 179
goto 36
32: .line 180
StackMap locals: com.sun.crypto.provider.GCTR byte[] int int java.nio.ByteBuffer long int int int byte[] int
StackMap stack:
aload 0 /* this */
aload 1 /* in */
iload 11 /* offset */
sipush 1024
aload 10 /* out */
iconst_0
invokevirtual com.sun.crypto.provider.GCTR.encrypt:([BII[BI)I
pop
33: .line 181
aload 4 /* dst */
aload 10 /* out */
iconst_0
sipush 1024
invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
pop
34: .line 182
iinc 9 /* processed */ -1024
35: .line 183
iinc 11 /* offset */ 1024
36: .line 179
StackMap locals:
StackMap stack:
iload 9 /* processed */
sipush 1024
if_icmpgt 32
37: .line 185
aload 0 /* this */
aload 1 /* in */
iload 11 /* offset */
iload 9 /* processed */
aload 10 /* out */
iconst_0
invokevirtual com.sun.crypto.provider.GCTR.encrypt:([BII[BI)I
pop
38: .line 189
aload 4 /* dst */
aload 10 /* out */
iconst_0
aload 4 /* dst */
invokevirtual java.nio.ByteBuffer.remaining:()I
iload 9 /* processed */
invokestatic java.lang.Math.min:(II)I
invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
pop
39: .line 190
iload 8 /* len */
ireturn
end local 11 // int offset
end local 10 // byte[] out
end local 9 // int processed
end local 8 // int len
end local 7 // int numOfCompleteBlocks
end local 5 // long blocksLeft
end local 4 // java.nio.ByteBuffer dst
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 40 0 this Lcom/sun/crypto/provider/GCTR;
0 40 1 in [B
0 40 2 inOfs I
0 40 3 inLen I
0 40 4 dst Ljava/nio/ByteBuffer;
4 6 5 len I
11 40 5 blocksLeft J
12 40 7 numOfCompleteBlocks I
15 26 8 i I
18 23 9 n I
20 21 10 index I
28 40 8 len I
29 40 9 processed I
30 40 10 out [B
31 40 11 offset I
MethodParameters:
Name Flags
in
inOfs
inLen
dst
public int update(java.nio.ByteBuffer, java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=9, args_size=3
start local 0 // com.sun.crypto.provider.GCTR this
start local 1 // java.nio.ByteBuffer src
start local 2 // java.nio.ByteBuffer dst
0: .line 202
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.hasArray:()Z
ifeq 8
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.hasArray:()Z
ifeq 8
1: .line 203
aload 0 /* this */
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.array:()[B
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.arrayOffset:()I
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.position:()I
iadd
2: .line 204
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.remaining:()I
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.remaining:()I
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
irem
isub
3: .line 205
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.array:()[B
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.arrayOffset:()I
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.position:()I
iadd
4: .line 203
invokevirtual com.sun.crypto.provider.GCTR.update:([BII[BI)I
istore 3 /* len */
start local 3 // int len
5: .line 206
aload 1 /* src */
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.position:()I
iload 3 /* len */
iadd
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
6: .line 207
aload 2 /* dst */
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.position:()I
iload 3 /* len */
iadd
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
7: .line 208
iload 3 /* len */
ireturn
end local 3 // int len
8: .line 212
StackMap locals:
StackMap stack:
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.blocksUntilRollover:()J
lstore 4 /* blocksLeft */
start local 4 // long blocksLeft
9: .line 213
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.remaining:()I
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
idiv
istore 6 /* numOfCompleteBlocks */
start local 6 // int numOfCompleteBlocks
10: .line 214
iload 6 /* numOfCompleteBlocks */
i2l
lload 4 /* blocksLeft */
lcmp
iflt 24
11: .line 217
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.checkBlock:()V
12: .line 218
iconst_0
istore 7 /* i */
start local 7 // int i
13: goto 22
14: .line 219
StackMap locals: com.sun.crypto.provider.GCTR java.nio.ByteBuffer java.nio.ByteBuffer top long int 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 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iconst_0
invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
15: .line 220
iconst_0
istore 8 /* n */
start local 8 // int n
16: goto 19
17: .line 221
StackMap locals: int
StackMap stack:
aload 2 /* dst */
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.get:()B
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iload 8 /* n */
baload
ixor
i2b
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
18: .line 220
iinc 8 /* n */ 1
StackMap locals:
StackMap stack:
19: iload 8 /* n */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
if_icmplt 17
end local 8 // int n
20: .line 223
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.counter:[B
invokestatic com.sun.crypto.provider.GaloisCounterMode.increment32:([B)V
21: .line 218
iinc 7 /* i */ 1
StackMap locals:
StackMap stack:
22: iload 7 /* i */
iload 6 /* numOfCompleteBlocks */
if_icmplt 14
end local 7 // int i
23: .line 225
iload 6 /* numOfCompleteBlocks */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
imul
ireturn
24: .line 228
StackMap locals:
StackMap stack:
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.remaining:()I
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.remaining:()I
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
irem
isub
istore 3 /* len */
start local 3 // int len
25: .line 229
iload 3 /* len */
istore 7 /* processed */
start local 7 // int processed
26: .line 230
sipush 1024
iload 3 /* len */
invokestatic java.lang.Math.min:(II)I
newarray 8
astore 8 /* in */
start local 8 // byte[] in
27: .line 231
goto 32
28: .line 232
StackMap locals: com.sun.crypto.provider.GCTR java.nio.ByteBuffer java.nio.ByteBuffer int long int int byte[]
StackMap stack:
aload 1 /* src */
aload 8 /* in */
iconst_0
sipush 1024
invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
pop
29: .line 233
aload 0 /* this */
aload 8 /* in */
iconst_0
sipush 1024
aload 8 /* in */
iconst_0
invokevirtual com.sun.crypto.provider.GCTR.encrypt:([BII[BI)I
pop
30: .line 234
aload 2 /* dst */
aload 8 /* in */
iconst_0
sipush 1024
invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
pop
31: .line 235
iinc 7 /* processed */ -1024
32: .line 231
StackMap locals:
StackMap stack:
iload 7 /* processed */
sipush 1024
if_icmpgt 28
33: .line 237
aload 1 /* src */
aload 8 /* in */
iconst_0
iload 7 /* processed */
invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
pop
34: .line 238
aload 0 /* this */
aload 8 /* in */
iconst_0
iload 7 /* processed */
aload 8 /* in */
iconst_0
invokevirtual com.sun.crypto.provider.GCTR.encrypt:([BII[BI)I
pop
35: .line 239
aload 2 /* dst */
aload 8 /* in */
iconst_0
iload 7 /* processed */
invokevirtual java.nio.ByteBuffer.put:([BII)Ljava/nio/ByteBuffer;
pop
36: .line 240
iload 3 /* len */
ireturn
end local 8 // byte[] in
end local 7 // int processed
end local 6 // int numOfCompleteBlocks
end local 4 // long blocksLeft
end local 3 // int len
end local 2 // java.nio.ByteBuffer dst
end local 1 // java.nio.ByteBuffer src
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 37 0 this Lcom/sun/crypto/provider/GCTR;
0 37 1 src Ljava/nio/ByteBuffer;
0 37 2 dst Ljava/nio/ByteBuffer;
5 8 3 len I
25 37 3 len I
9 37 4 blocksLeft J
10 37 6 numOfCompleteBlocks I
13 23 7 i I
16 20 8 n I
26 37 7 processed I
27 37 8 in [B
MethodParameters:
Name Flags
src
dst
public int doFinal(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=9, 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 251
iload 3 /* inLen */
ifne 2
1: .line 252
iconst_0
ireturn
2: .line 254
StackMap locals:
StackMap stack:
iload 3 /* inLen */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
irem
istore 6 /* lastBlockSize */
start local 6 // int lastBlockSize
3: .line 255
iload 3 /* inLen */
iload 6 /* lastBlockSize */
isub
istore 7 /* completeBlkLen */
start local 7 // int completeBlkLen
4: .line 257
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
5: .line 258
iload 6 /* lastBlockSize */
ifeq 15
6: .line 260
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.checkBlock:()V
7: .line 261
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 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iconst_0
invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
8: .line 262
iconst_0
istore 8 /* n */
start local 8 // int n
9: goto 14
10: .line 263
StackMap locals: int int int
StackMap stack:
aload 4 /* out */
iload 5 /* outOfs */
iload 7 /* completeBlkLen */
iadd
iload 8 /* n */
iadd
11: .line 264
aload 1 /* in */
iload 2 /* inOfs */
iload 7 /* completeBlkLen */
iadd
iload 8 /* n */
iadd
baload
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iload 8 /* n */
baload
ixor
i2b
12: .line 263
bastore
13: .line 262
iinc 8 /* n */ 1
StackMap locals:
StackMap stack:
14: iload 8 /* n */
iload 6 /* lastBlockSize */
if_icmplt 10
end local 8 // int n
15: .line 267
StackMap locals:
StackMap stack:
iload 3 /* inLen */
ireturn
end local 7 // int completeBlkLen
end local 6 // int lastBlockSize
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 16 0 this Lcom/sun/crypto/provider/GCTR;
0 16 1 in [B
0 16 2 inOfs I
0 16 3 inLen I
0 16 4 out [B
0 16 5 outOfs I
3 16 6 lastBlockSize I
4 16 7 completeBlkLen I
9 15 8 n I
MethodParameters:
Name Flags
in
inOfs
inLen
out
outOfs
public int doFinal(java.nio.ByteBuffer, java.nio.ByteBuffer);
descriptor: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=6, args_size=3
start local 0 // com.sun.crypto.provider.GCTR this
start local 1 // java.nio.ByteBuffer src
start local 2 // java.nio.ByteBuffer dst
0: .line 280
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.hasArray:()Z
ifeq 8
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.hasArray:()Z
ifeq 8
1: .line 281
aload 0 /* this */
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.array:()[B
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.arrayOffset:()I
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.position:()I
iadd
2: .line 282
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.remaining:()I
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.array:()[B
3: .line 283
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.arrayOffset:()I
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.position:()I
iadd
4: .line 281
invokevirtual com.sun.crypto.provider.GCTR.doFinal:([BII[BI)I
istore 3 /* len */
start local 3 // int len
5: .line 284
aload 1 /* src */
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.position:()I
iload 3 /* len */
iadd
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
6: .line 285
aload 2 /* dst */
aload 2 /* dst */
invokevirtual java.nio.ByteBuffer.position:()I
iload 3 /* len */
iadd
invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/ByteBuffer;
pop
7: .line 286
iload 3 /* len */
ireturn
end local 3 // int len
8: .line 289
StackMap locals:
StackMap stack:
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.remaining:()I
istore 3 /* len */
start local 3 // int len
9: .line 290
iload 3 /* len */
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.blockSize:I
irem
istore 4 /* lastBlockSize */
start local 4 // int lastBlockSize
10: .line 291
aload 0 /* this */
aload 1 /* src */
aload 2 /* dst */
invokevirtual com.sun.crypto.provider.GCTR.update:(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I
pop
11: .line 292
iload 4 /* lastBlockSize */
ifeq 19
12: .line 293
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GCTR.checkBlock:()V
13: .line 295
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 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iconst_0
invokevirtual com.sun.crypto.provider.SymmetricCipher.encryptBlock:([BI[BI)V
14: .line 296
iconst_0
istore 5 /* n */
start local 5 // int n
15: goto 18
16: .line 297
StackMap locals: int int int
StackMap stack:
aload 2 /* dst */
aload 1 /* src */
invokevirtual java.nio.ByteBuffer.get:()B
aload 0 /* this */
getfield com.sun.crypto.provider.GCTR.block:[B
iload 5 /* n */
baload
ixor
i2b
invokevirtual java.nio.ByteBuffer.put:(B)Ljava/nio/ByteBuffer;
pop
17: .line 296
iinc 5 /* n */ 1
StackMap locals:
StackMap stack:
18: iload 5 /* n */
iload 4 /* lastBlockSize */
if_icmplt 16
end local 5 // int n
19: .line 300
StackMap locals:
StackMap stack:
iload 3 /* len */
ireturn
end local 4 // int lastBlockSize
end local 3 // int len
end local 2 // java.nio.ByteBuffer dst
end local 1 // java.nio.ByteBuffer src
end local 0 // com.sun.crypto.provider.GCTR this
LocalVariableTable:
Start End Slot Name Signature
0 20 0 this Lcom/sun/crypto/provider/GCTR;
0 20 1 src Ljava/nio/ByteBuffer;
0 20 2 dst Ljava/nio/ByteBuffer;
5 8 3 len I
9 20 3 len I
10 20 4 lastBlockSize I
15 19 5 n I
MethodParameters:
Name Flags
src
dst
}
SourceFile: "GCTR.java"