public class org.bouncycastle.crypto.modes.CTSBlockCipher extends org.bouncycastle.crypto.BufferedBlockCipher
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: org.bouncycastle.crypto.modes.CTSBlockCipher
super_class: org.bouncycastle.crypto.BufferedBlockCipher
{
private int blockSize;
descriptor: I
flags: (0x0002) ACC_PRIVATE
public void <init>(org.bouncycastle.crypto.BlockCipher);
descriptor: (Lorg/bouncycastle/crypto/BlockCipher;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
invokespecial org.bouncycastle.crypto.BufferedBlockCipher.<init>:()V
1: aload 1
instanceof org.bouncycastle.crypto.modes.OFBBlockCipher
ifne 2
aload 1
instanceof org.bouncycastle.crypto.modes.CFBBlockCipher
ifeq 3
2: StackMap locals: org.bouncycastle.crypto.modes.CTSBlockCipher org.bouncycastle.crypto.BlockCipher
StackMap stack:
new java.lang.IllegalArgumentException
dup
ldc "CTSBlockCipher can only accept ECB, or CBC ciphers"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
3: StackMap locals:
StackMap stack:
aload 0
aload 1
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
4: aload 0
aload 1
invokeinterface org.bouncycastle.crypto.BlockCipher.getBlockSize:()I
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.blockSize:I
5: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.blockSize:I
iconst_2
imul
newarray 8
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
6: aload 0
iconst_0
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
7: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lorg/bouncycastle/crypto/modes/CTSBlockCipher;
0 8 1 cipher Lorg/bouncycastle/crypto/BlockCipher;
MethodParameters:
Name Flags
cipher
public int getUpdateOutputSize(int);
descriptor: (I)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=4, args_size=2
start local 0 start local 1 0: iload 1
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iadd
istore 2
start local 2 1: iload 2
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
arraylength
irem
istore 3
start local 3 2: iload 3
ifne 4
3: iload 2
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
arraylength
isub
ireturn
4: StackMap locals: int int
StackMap stack:
iload 2
iload 3
isub
ireturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lorg/bouncycastle/crypto/modes/CTSBlockCipher;
0 5 1 len I
1 5 2 total I
2 5 3 leftOver I
MethodParameters:
Name Flags
len
public int getOutputSize(int);
descriptor: (I)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: iload 1
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iadd
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/bouncycastle/crypto/modes/CTSBlockCipher;
0 1 1 len I
MethodParameters:
Name Flags
len
public int processByte(byte, byte[], int);
descriptor: (B[BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=5, args_size=4
start local 0 start local 1 start local 2 start local 3 0: iconst_0
istore 4
start local 4 1: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
arraylength
if_icmpne 5
2: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
aload 2
iload 3
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
istore 4
3: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.blockSize:I
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.blockSize:I
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
4: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.blockSize:I
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
5: StackMap locals: int
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
aload 0
dup
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
dup_x1
iconst_1
iadd
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 1
bastore
6: iload 4
ireturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lorg/bouncycastle/crypto/modes/CTSBlockCipher;
0 7 1 in B
0 7 2 out [B
0 7 3 outOff I
1 7 4 resultLen I
Exceptions:
throws org.bouncycastle.crypto.DataLengthException, java.lang.IllegalStateException
MethodParameters:
Name Flags
in
out
outOff
public int processBytes(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=10, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 0: iload 3
ifge 2
1: new java.lang.IllegalArgumentException
dup
ldc "Can't have a negative input length!"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
invokevirtual org.bouncycastle.crypto.modes.CTSBlockCipher.getBlockSize:()I
istore 6
start local 6 3: aload 0
iload 3
invokevirtual org.bouncycastle.crypto.modes.CTSBlockCipher.getUpdateOutputSize:(I)I
istore 7
start local 7 4: iload 7
ifle 7
5: iload 5
iload 7
iadd
aload 4
arraylength
if_icmple 7
6: new org.bouncycastle.crypto.DataLengthException
dup
ldc "output buffer too short"
invokespecial org.bouncycastle.crypto.DataLengthException.<init>:(Ljava/lang/String;)V
athrow
7: StackMap locals: int int
StackMap stack:
iconst_0
istore 8
start local 8 8: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
arraylength
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
isub
istore 9
start local 9 9: iload 3
iload 9
if_icmple 23
10: aload 1
iload 2
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 9
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
11: iload 8
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
aload 4
iload 5
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
iadd
istore 8
12: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 6
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
iload 6
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
13: aload 0
iload 6
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
14: iload 3
iload 9
isub
istore 3
15: iload 2
iload 9
iadd
istore 2
16: goto 22
17: StackMap locals: int int
StackMap stack:
aload 1
iload 2
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 6
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
18: iload 8
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
aload 4
iload 5
iload 8
iadd
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
iadd
istore 8
19: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 6
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
iload 6
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
20: iload 3
iload 6
isub
istore 3
21: iload 2
iload 6
iadd
istore 2
22: StackMap locals:
StackMap stack:
iload 3
iload 6
if_icmpgt 17
23: StackMap locals:
StackMap stack:
aload 1
iload 2
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 3
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
24: aload 0
dup
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 3
iadd
putfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
25: iload 8
ireturn
end local 9 end local 8 end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 26 0 this Lorg/bouncycastle/crypto/modes/CTSBlockCipher;
0 26 1 in [B
0 26 2 inOff I
0 26 3 len I
0 26 4 out [B
0 26 5 outOff I
3 26 6 blockSize I
4 26 7 length I
8 26 8 resultLen I
9 26 9 gapLen I
Exceptions:
throws org.bouncycastle.crypto.DataLengthException, java.lang.IllegalStateException
MethodParameters:
Name Flags
in
inOff
len
out
outOff
public int doFinal(byte[], int);
descriptor: ([BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=8, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 2
iadd
aload 1
arraylength
if_icmple 2
1: new org.bouncycastle.crypto.DataLengthException
dup
ldc "output buffer to small in doFinal"
invokespecial org.bouncycastle.crypto.DataLengthException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
invokeinterface org.bouncycastle.crypto.BlockCipher.getBlockSize:()I
istore 3
start local 3 3: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 3
isub
istore 4
start local 4 4: iload 3
newarray 8
astore 5
start local 5 5: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.forEncryption:Z
ifeq 26
6: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
aload 5
iconst_0
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
7: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
iload 3
if_icmpge 9
8: new org.bouncycastle.crypto.DataLengthException
dup
ldc "need at least one block of input for CTS"
invokespecial org.bouncycastle.crypto.DataLengthException.<init>:(Ljava/lang/String;)V
athrow
9: StackMap locals: int int byte[]
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
istore 6
start local 6 10: goto 13
11: StackMap locals: int
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 6
aload 5
iload 6
iload 3
isub
baload
bastore
12: iinc 6 1
StackMap locals:
StackMap stack:
13: iload 6
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
arraylength
if_icmpne 11
end local 6 14: iload 3
istore 6
start local 6 15: goto 18
16: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 6
dup2
baload
aload 5
iload 6
iload 3
isub
baload
ixor
i2b
bastore
17: iinc 6 1
StackMap locals:
StackMap stack:
18: iload 6
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
if_icmpne 16
end local 6 19: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
instanceof org.bouncycastle.crypto.modes.CBCBlockCipher
ifeq 23
20: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
checkcast org.bouncycastle.crypto.modes.CBCBlockCipher
invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getUnderlyingCipher:()Lorg/bouncycastle/crypto/BlockCipher;
astore 6
start local 6 21: aload 6
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 3
aload 1
iload 2
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
end local 6 22: goto 24
23: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 3
aload 1
iload 2
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
24: StackMap locals:
StackMap stack:
aload 5
iconst_0
aload 1
iload 2
iload 3
iadd
iload 4
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
25: goto 40
26: StackMap locals:
StackMap stack:
iload 3
newarray 8
astore 6
start local 6 27: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
instanceof org.bouncycastle.crypto.modes.CBCBlockCipher
ifeq 31
28: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
checkcast org.bouncycastle.crypto.modes.CBCBlockCipher
invokevirtual org.bouncycastle.crypto.modes.CBCBlockCipher.getUnderlyingCipher:()Lorg/bouncycastle/crypto/BlockCipher;
astore 7
start local 7 29: aload 7
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
aload 5
iconst_0
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
end local 7 30: goto 32
31: StackMap locals: byte[]
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iconst_0
aload 5
iconst_0
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
32: StackMap locals:
StackMap stack:
iload 3
istore 7
start local 7 33: goto 36
34: StackMap locals: int
StackMap stack:
aload 6
iload 7
iload 3
isub
aload 5
iload 7
iload 3
isub
baload
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 7
baload
ixor
i2b
bastore
35: iinc 7 1
StackMap locals:
StackMap stack:
36: iload 7
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
if_icmpne 34
end local 7 37: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.buf:[B
iload 3
aload 5
iconst_0
iload 4
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
38: aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 5
iconst_0
aload 1
iload 2
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
39: aload 6
iconst_0
aload 1
iload 2
iload 3
iadd
iload 4
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
end local 6 40: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.CTSBlockCipher.bufOff:I
istore 6
start local 6 41: aload 0
invokevirtual org.bouncycastle.crypto.modes.CTSBlockCipher.reset:()V
42: iload 6
ireturn
end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 43 0 this Lorg/bouncycastle/crypto/modes/CTSBlockCipher;
0 43 1 out [B
0 43 2 outOff I
3 43 3 blockSize I
4 43 4 len I
5 43 5 block [B
10 14 6 i I
15 19 6 i I
21 22 6 c Lorg/bouncycastle/crypto/BlockCipher;
27 40 6 lastBlock [B
29 30 7 c Lorg/bouncycastle/crypto/BlockCipher;
33 37 7 i I
41 43 6 offset I
Exceptions:
throws org.bouncycastle.crypto.DataLengthException, java.lang.IllegalStateException, org.bouncycastle.crypto.InvalidCipherTextException
MethodParameters:
Name Flags
out
outOff
}
SourceFile: "CTSBlockCipher.java"