public class org.bouncycastle.crypto.modes.GCMBlockCipher implements org.bouncycastle.crypto.modes.AEADBlockCipher
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: org.bouncycastle.crypto.modes.GCMBlockCipher
super_class: java.lang.Object
{
private static final int BLOCK_SIZE;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 16
private static final byte[] ZEROES;
descriptor: [B
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private org.bouncycastle.crypto.BlockCipher cipher;
descriptor: Lorg/bouncycastle/crypto/BlockCipher;
flags: (0x0002) ACC_PRIVATE
private org.bouncycastle.crypto.modes.gcm.GCMMultiplier multiplier;
descriptor: Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
flags: (0x0002) ACC_PRIVATE
private boolean forEncryption;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
private int macSize;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private byte[] nonce;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private byte[] A;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private org.bouncycastle.crypto.params.KeyParameter keyParam;
descriptor: Lorg/bouncycastle/crypto/params/KeyParameter;
flags: (0x0002) ACC_PRIVATE
private byte[] H;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private byte[] initS;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private byte[] J0;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private byte[] bufBlock;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private byte[] macBlock;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private byte[] S;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private byte[] counter;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private int bufOff;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private long totalLength;
descriptor: J
flags: (0x0002) ACC_PRIVATE
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: bipush 16
newarray 8
putstatic org.bouncycastle.crypto.modes.GCMBlockCipher.ZEROES:[B
return
LocalVariableTable:
Start End Slot Name Signature
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
aload 1
aconst_null
invokespecial org.bouncycastle.crypto.modes.GCMBlockCipher.<init>:(Lorg/bouncycastle/crypto/BlockCipher;Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 2 1 c Lorg/bouncycastle/crypto/BlockCipher;
MethodParameters:
Name Flags
c
public void <init>(org.bouncycastle.crypto.BlockCipher, org.bouncycastle.crypto.modes.gcm.GCMMultiplier);
descriptor: (Lorg/bouncycastle/crypto/BlockCipher;Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 1
invokeinterface org.bouncycastle.crypto.BlockCipher.getBlockSize:()I
bipush 16
if_icmpeq 5
2: new java.lang.IllegalArgumentException
dup
3: ldc "cipher required with a block size of 16."
4: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
5: StackMap locals: org.bouncycastle.crypto.modes.GCMBlockCipher org.bouncycastle.crypto.BlockCipher org.bouncycastle.crypto.modes.gcm.GCMMultiplier
StackMap stack:
aload 2
ifnonnull 7
6: new org.bouncycastle.crypto.modes.gcm.Tables8kGCMMultiplier
dup
invokespecial org.bouncycastle.crypto.modes.gcm.Tables8kGCMMultiplier.<init>:()V
astore 2
7: StackMap locals:
StackMap stack:
aload 0
aload 1
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
8: aload 0
aload 2
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.multiplier:Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
9: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 10 1 c Lorg/bouncycastle/crypto/BlockCipher;
0 10 2 m Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
MethodParameters:
Name Flags
c
m
public org.bouncycastle.crypto.BlockCipher getUnderlyingCipher();
descriptor: ()Lorg/bouncycastle/crypto/BlockCipher;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
public java.lang.String getAlgorithmName();
descriptor: ()Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: new java.lang.StringBuilder
dup
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
invokeinterface org.bouncycastle.crypto.BlockCipher.getAlgorithmName:()Ljava/lang/String;
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
ldc "/GCM"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
public void init(boolean, org.bouncycastle.crypto.CipherParameters);
descriptor: (ZLorg/bouncycastle/crypto/CipherParameters;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.forEncryption:Z
1: aload 0
aconst_null
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.macBlock:[B
2: aload 2
instanceof org.bouncycastle.crypto.params.AEADParameters
ifeq 12
3: aload 2
checkcast org.bouncycastle.crypto.params.AEADParameters
astore 3
start local 3 4: aload 0
aload 3
invokevirtual org.bouncycastle.crypto.params.AEADParameters.getNonce:()[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
5: aload 0
aload 3
invokevirtual org.bouncycastle.crypto.params.AEADParameters.getAssociatedText:()[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.A:[B
6: aload 3
invokevirtual org.bouncycastle.crypto.params.AEADParameters.getMacSize:()I
istore 4
start local 4 7: iload 4
bipush 96
if_icmplt 8
iload 4
sipush 128
if_icmpgt 8
iload 4
bipush 8
irem
ifeq 9
8: StackMap locals: org.bouncycastle.crypto.params.AEADParameters int
StackMap stack:
new java.lang.IllegalArgumentException
dup
new java.lang.StringBuilder
dup
ldc "Invalid value for MAC size: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 4
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
9: StackMap locals:
StackMap stack:
aload 0
iload 4
bipush 8
idiv
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
10: aload 0
aload 3
invokevirtual org.bouncycastle.crypto.params.AEADParameters.getKey:()Lorg/bouncycastle/crypto/params/KeyParameter;
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.keyParam:Lorg/bouncycastle/crypto/params/KeyParameter;
end local 4 end local 3 11: goto 20
12: StackMap locals:
StackMap stack:
aload 2
instanceof org.bouncycastle.crypto.params.ParametersWithIV
ifeq 19
13: aload 2
checkcast org.bouncycastle.crypto.params.ParametersWithIV
astore 3
start local 3 14: aload 0
aload 3
invokevirtual org.bouncycastle.crypto.params.ParametersWithIV.getIV:()[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
15: aload 0
aconst_null
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.A:[B
16: aload 0
bipush 16
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
17: aload 0
aload 3
invokevirtual org.bouncycastle.crypto.params.ParametersWithIV.getParameters:()Lorg/bouncycastle/crypto/CipherParameters;
checkcast org.bouncycastle.crypto.params.KeyParameter
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.keyParam:Lorg/bouncycastle/crypto/params/KeyParameter;
end local 3 18: goto 20
19: StackMap locals:
StackMap stack:
new java.lang.IllegalArgumentException
dup
ldc "invalid parameters passed to GCM"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
20: StackMap locals:
StackMap stack:
iload 1
ifeq 21
bipush 16
goto 22
StackMap locals:
StackMap stack:
21: bipush 16
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
iadd
StackMap locals:
StackMap stack: int
22: istore 3
start local 3 23: aload 0
iload 3
newarray 8
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
24: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
ifnull 25
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
arraylength
iconst_1
if_icmpge 26
25: StackMap locals: int
StackMap stack:
new java.lang.IllegalArgumentException
dup
ldc "IV must be at least 1 byte"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
26: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.A:[B
ifnonnull 28
27: aload 0
iconst_0
newarray 8
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.A:[B
28: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
iconst_1
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.keyParam:Lorg/bouncycastle/crypto/params/KeyParameter;
invokeinterface org.bouncycastle.crypto.BlockCipher.init:(ZLorg/bouncycastle/crypto/CipherParameters;)V
29: aload 0
bipush 16
newarray 8
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.H:[B
30: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
getstatic org.bouncycastle.crypto.modes.GCMBlockCipher.ZEROES:[B
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.H:[B
iconst_0
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
31: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.multiplier:Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.H:[B
invokeinterface org.bouncycastle.crypto.modes.gcm.GCMMultiplier.init:([B)V
32: aload 0
aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.A:[B
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.gHASH:([B)[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.initS:[B
33: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
arraylength
bipush 12
if_icmpne 38
34: aload 0
bipush 16
newarray 8
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
35: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
arraylength
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
36: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
bipush 15
iconst_1
bastore
37: goto 43
38: StackMap locals:
StackMap stack:
aload 0
aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.gHASH:([B)[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
39: bipush 16
newarray 8
astore 4
start local 4 40: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.nonce:[B
arraylength
i2l
ldc 8
lmul
aload 4
bipush 8
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.packLength:(J[BI)V
41: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
aload 4
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.xor:([B[B)V
42: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.multiplier:Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
invokeinterface org.bouncycastle.crypto.modes.gcm.GCMMultiplier.multiplyH:([B)V
end local 4 43: StackMap locals:
StackMap stack:
aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.initS:[B
invokestatic org.bouncycastle.util.Arrays.clone:([B)[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.S:[B
44: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
invokestatic org.bouncycastle.util.Arrays.clone:([B)[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.counter:[B
45: aload 0
iconst_0
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
46: aload 0
lconst_0
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.totalLength:J
47: return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 48 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 48 1 forEncryption Z
0 48 2 params Lorg/bouncycastle/crypto/CipherParameters;
4 11 3 param Lorg/bouncycastle/crypto/params/AEADParameters;
7 11 4 macSizeBits I
14 18 3 param Lorg/bouncycastle/crypto/params/ParametersWithIV;
23 48 3 bufLength I
40 43 4 X [B
Exceptions:
throws java.lang.IllegalArgumentException
MethodParameters:
Name Flags
forEncryption
params
public byte[] getMac();
descriptor: ()[B
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macBlock:[B
invokestatic org.bouncycastle.util.Arrays.clone:([B)[B
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
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: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.forEncryption:Z
ifeq 2
1: iload 1
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
iadd
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
iadd
ireturn
2: StackMap locals:
StackMap stack:
iload 1
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
iadd
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
isub
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 3 1 len I
MethodParameters:
Name Flags
len
public int getUpdateOutputSize(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.GCMBlockCipher.bufOff:I
iadd
bipush 16
idiv
bipush 16
imul
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
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=4, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
iload 1
aload 2
iload 3
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.process:(B[BI)I
ireturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 1 1 in B
0 1 2 out [B
0 1 3 outOff I
Exceptions:
throws org.bouncycastle.crypto.DataLengthException
MethodParameters:
Name Flags
in
out
outOff
public int processBytes(byte[], int, int, byte[], int);
descriptor: ([BII[BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=8, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 0: iconst_0
istore 6
start local 6 1: iconst_0
istore 7
start local 7 2: goto 11
3: StackMap locals: int int
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
aload 0
dup
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
dup_x1
iconst_1
iadd
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
aload 1
iload 2
iload 7
iadd
baload
bastore
4: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
arraylength
if_icmpne 10
5: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
bipush 16
aload 4
iload 5
iload 6
iadd
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.gCTRBlock:([BI[BI)V
6: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.forEncryption:Z
ifne 8
7: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
bipush 16
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
8: StackMap locals:
StackMap stack:
aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
arraylength
bipush 16
isub
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
9: iinc 6 16
10: StackMap locals:
StackMap stack:
iinc 7 1
StackMap locals:
StackMap stack:
11: iload 7
iload 3
if_icmpne 3
end local 7 12: 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 13 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 13 1 in [B
0 13 2 inOff I
0 13 3 len I
0 13 4 out [B
0 13 5 outOff I
1 13 6 resultLen I
2 12 7 i I
Exceptions:
throws org.bouncycastle.crypto.DataLengthException
MethodParameters:
Name Flags
in
inOff
len
out
outOff
private int process(byte, byte[], int);
descriptor: (B[BI)I
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
aload 0
dup
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
dup_x1
iconst_1
iadd
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
iload 1
bastore
1: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
arraylength
if_icmpne 7
2: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
bipush 16
aload 2
iload 3
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.gCTRBlock:([BI[BI)V
3: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.forEncryption:Z
ifne 5
4: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
bipush 16
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
5: StackMap locals:
StackMap stack:
aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
arraylength
bipush 16
isub
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
6: bipush 16
ireturn
7: StackMap locals:
StackMap stack:
iconst_0
ireturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 8 1 in B
0 8 2 out [B
0 8 3 outOff I
Exceptions:
throws org.bouncycastle.crypto.DataLengthException
MethodParameters:
Name Flags
in
out
outOff
public int doFinal(byte[], int);
descriptor: ([BI)I
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=8, args_size=3
start local 0 start local 1 start local 2 0: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
istore 3
start local 3 1: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.forEncryption:Z
ifne 5
2: iload 3
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
if_icmpge 4
3: new org.bouncycastle.crypto.InvalidCipherTextException
dup
ldc "data too short"
invokespecial org.bouncycastle.crypto.InvalidCipherTextException.<init>:(Ljava/lang/String;)V
athrow
4: StackMap locals: int
StackMap stack:
iload 3
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
isub
istore 3
5: StackMap locals:
StackMap stack:
iload 3
ifle 9
6: bipush 16
newarray 8
astore 4
start local 4 7: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
iconst_0
aload 4
iconst_0
iload 3
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
8: aload 0
aload 4
iload 3
aload 1
iload 2
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.gCTRBlock:([BI[BI)V
end local 4 9: StackMap locals:
StackMap stack:
bipush 16
newarray 8
astore 4
start local 4 10: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.A:[B
arraylength
i2l
ldc 8
lmul
aload 4
iconst_0
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.packLength:(J[BI)V
11: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.totalLength:J
ldc 8
lmul
aload 4
bipush 8
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.packLength:(J[BI)V
12: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.S:[B
aload 4
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.xor:([B[B)V
13: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.multiplier:Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.S:[B
invokeinterface org.bouncycastle.crypto.modes.gcm.GCMMultiplier.multiplyH:([B)V
14: bipush 16
newarray 8
astore 5
start local 5 15: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
iconst_0
aload 5
iconst_0
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
16: aload 5
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.S:[B
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.xor:([B[B)V
17: iload 3
istore 6
start local 6 18: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
newarray 8
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.macBlock:[B
19: aload 5
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macBlock:[B
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
20: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.forEncryption:Z
ifeq 24
21: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macBlock:[B
iconst_0
aload 1
iload 2
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
iadd
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
22: iload 6
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
iadd
istore 6
23: goto 28
24: StackMap locals: byte[] byte[] int
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
newarray 8
astore 7
start local 7 25: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
iload 3
aload 7
iconst_0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macSize:I
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
26: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.macBlock:[B
aload 7
invokestatic org.bouncycastle.util.Arrays.constantTimeAreEqual:([B[B)Z
ifne 28
27: new org.bouncycastle.crypto.InvalidCipherTextException
dup
ldc "mac check in GCM failed"
invokespecial org.bouncycastle.crypto.InvalidCipherTextException.<init>:(Ljava/lang/String;)V
athrow
end local 7 28: StackMap locals:
StackMap stack:
aload 0
iconst_0
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.reset:(Z)V
29: 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 30 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 30 1 out [B
0 30 2 outOff I
1 30 3 extra I
7 9 4 tmp [B
10 30 4 X [B
15 30 5 tag [B
18 30 6 resultLen I
25 28 7 msgMac [B
Exceptions:
throws java.lang.IllegalStateException, org.bouncycastle.crypto.InvalidCipherTextException
MethodParameters:
Name Flags
out
outOff
public void reset();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
iconst_1
invokevirtual org.bouncycastle.crypto.modes.GCMBlockCipher.reset:(Z)V
1: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
private void reset(boolean);
descriptor: (Z)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.initS:[B
invokestatic org.bouncycastle.util.Arrays.clone:([B)[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.S:[B
1: aload 0
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.J0:[B
invokestatic org.bouncycastle.util.Arrays.clone:([B)[B
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.counter:[B
2: aload 0
iconst_0
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufOff:I
3: aload 0
lconst_0
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.totalLength:J
4: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
ifnull 6
5: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.bufBlock:[B
iconst_0
invokestatic org.bouncycastle.util.Arrays.fill:([BB)V
6: StackMap locals:
StackMap stack:
iload 1
ifeq 8
7: aload 0
aconst_null
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.macBlock:[B
8: StackMap locals:
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
invokeinterface org.bouncycastle.crypto.BlockCipher.reset:()V
9: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 10 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 10 1 clearMac Z
MethodParameters:
Name Flags
clearMac
private void gCTRBlock(byte[], int, byte[], int);
descriptor: ([BI[BI)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=6, locals=8, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: bipush 15
istore 5
start local 5 1: goto 7
2: StackMap locals: int
StackMap stack:
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.counter:[B
iload 5
baload
iconst_1
iadd
sipush 255
iand
i2b
istore 6
start local 6 3: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.counter:[B
iload 5
iload 6
bastore
4: iload 6
ifeq 6
5: goto 8
end local 6 6: StackMap locals:
StackMap stack:
iinc 5 -1
StackMap locals:
StackMap stack:
7: iload 5
bipush 12
if_icmpge 2
end local 5 8: StackMap locals:
StackMap stack:
bipush 16
newarray 8
astore 5
start local 5 9: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.cipher:Lorg/bouncycastle/crypto/BlockCipher;
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.counter:[B
iconst_0
aload 5
iconst_0
invokeinterface org.bouncycastle.crypto.BlockCipher.processBlock:([BI[BI)I
pop
10: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.forEncryption:Z
ifeq 14
11: getstatic org.bouncycastle.crypto.modes.GCMBlockCipher.ZEROES:[B
iload 2
aload 5
iload 2
bipush 16
iload 2
isub
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
12: aload 5
astore 6
start local 6 13: goto 15
end local 6 14: StackMap locals: byte[]
StackMap stack:
aload 1
astore 6
start local 6 15: StackMap locals: byte[]
StackMap stack:
iload 2
iconst_1
isub
istore 7
start local 7 16: goto 20
17: StackMap locals: int
StackMap stack:
aload 5
iload 7
dup2
baload
aload 1
iload 7
baload
ixor
i2b
bastore
18: aload 3
iload 4
iload 7
iadd
aload 5
iload 7
baload
bastore
19: iinc 7 -1
StackMap locals:
StackMap stack:
20: iload 7
ifge 17
end local 7 21: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.S:[B
aload 6
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.xor:([B[B)V
22: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.multiplier:Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.S:[B
invokeinterface org.bouncycastle.crypto.modes.gcm.GCMMultiplier.multiplyH:([B)V
23: aload 0
dup
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.totalLength:J
iload 2
i2l
ladd
putfield org.bouncycastle.crypto.modes.GCMBlockCipher.totalLength:J
24: return
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 25 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 25 1 buf [B
0 25 2 bufCount I
0 25 3 out [B
0 25 4 outOff I
1 8 5 i I
3 6 6 b B
9 25 5 tmp [B
13 14 6 hashBytes [B
15 25 6 hashBytes [B
16 21 7 i I
MethodParameters:
Name Flags
buf
bufCount
out
outOff
private byte[] gHASH(byte[]);
descriptor: ([B)[B
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=6, args_size=2
start local 0 start local 1 0: bipush 16
newarray 8
astore 2
start local 2 1: iconst_0
istore 3
start local 3 2: goto 9
3: StackMap locals: byte[] int
StackMap stack:
bipush 16
newarray 8
astore 4
start local 4 4: aload 1
arraylength
iload 3
isub
bipush 16
invokestatic java.lang.Math.min:(II)I
istore 5
start local 5 5: aload 1
iload 3
aload 4
iconst_0
iload 5
invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
6: aload 2
aload 4
invokestatic org.bouncycastle.crypto.modes.GCMBlockCipher.xor:([B[B)V
7: aload 0
getfield org.bouncycastle.crypto.modes.GCMBlockCipher.multiplier:Lorg/bouncycastle/crypto/modes/gcm/GCMMultiplier;
aload 2
invokeinterface org.bouncycastle.crypto.modes.gcm.GCMMultiplier.multiplyH:([B)V
end local 5 end local 4 8: iinc 3 16
StackMap locals:
StackMap stack:
9: iload 3
aload 1
arraylength
if_icmplt 3
end local 3 10: aload 2
areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lorg/bouncycastle/crypto/modes/GCMBlockCipher;
0 11 1 b [B
1 11 2 Y [B
2 10 3 pos I
4 8 4 X [B
5 8 5 num I
MethodParameters:
Name Flags
b
private static void xor(byte[], byte[]);
descriptor: ([B[B)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=5, locals=3, args_size=2
start local 0 start local 1 0: bipush 15
istore 2
start local 2 1: goto 4
2: StackMap locals: int
StackMap stack:
aload 0
iload 2
dup2
baload
aload 1
iload 2
baload
ixor
i2b
bastore
3: iinc 2 -1
StackMap locals:
StackMap stack:
4: iload 2
ifge 2
end local 2 5: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 block [B
0 6 1 val [B
1 5 2 i I
MethodParameters:
Name Flags
block
val
private static void packLength(long, byte[], int);
descriptor: (J[BI)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=4, locals=4, args_size=3
start local 0 start local 2 start local 3 0: lload 0
bipush 32
lushr
l2i
aload 2
iload 3
invokestatic org.bouncycastle.crypto.util.Pack.intToBigEndian:(I[BI)V
1: lload 0
l2i
aload 2
iload 3
iconst_4
iadd
invokestatic org.bouncycastle.crypto.util.Pack.intToBigEndian:(I[BI)V
2: return
end local 3 end local 2 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 count J
0 3 2 bs [B
0 3 3 off I
MethodParameters:
Name Flags
count
bs
off
}
SourceFile: "GCMBlockCipher.java"