final class com.sun.crypto.provider.GHASH
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: com.sun.crypto.provider.GHASH
super_class: java.lang.Object
{
private static final int AES_BLOCK_SIZE;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 16
private final long[] subkeyH;
descriptor: [J
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final long[] state;
descriptor: [J
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private long stateSave0;
descriptor: J
flags: (0x0002) ACC_PRIVATE
private long stateSave1;
descriptor: J
flags: (0x0002) ACC_PRIVATE
private static long getLong(byte[], int);
descriptor: ([BI)J
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=4, locals=6, args_size=2
start local 0 // byte[] buffer
start local 1 // int offset
0: .line 49
lconst_0
lstore 2 /* result */
start local 2 // long result
1: .line 50
iload 1 /* offset */
bipush 8
iadd
istore 4 /* end */
start local 4 // int end
2: .line 51
iload 1 /* offset */
istore 5 /* i */
start local 5 // int i
3: goto 6
4: .line 52
StackMap locals: long int int
StackMap stack:
lload 2 /* result */
bipush 8
lshl
aload 0 /* buffer */
iload 5 /* i */
baload
sipush 255
iand
i2l
ladd
lstore 2 /* result */
5: .line 51
iinc 5 /* i */ 1
StackMap locals:
StackMap stack:
6: iload 5 /* i */
iload 4 /* end */
if_icmplt 4
end local 5 // int i
7: .line 54
lload 2 /* result */
lreturn
end local 4 // int end
end local 2 // long result
end local 1 // int offset
end local 0 // byte[] buffer
LocalVariableTable:
Start End Slot Name Signature
0 8 0 buffer [B
0 8 1 offset I
1 8 2 result J
2 8 4 end I
3 7 5 i I
MethodParameters:
Name Flags
buffer
offset
private static void putLong(byte[], int, long);
descriptor: ([BIJ)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=4, locals=6, args_size=3
start local 0 // byte[] buffer
start local 1 // int offset
start local 2 // long value
0: .line 58
iload 1 /* offset */
bipush 8
iadd
istore 4 /* end */
start local 4 // int end
1: .line 59
iload 4 /* end */
iconst_1
isub
istore 5 /* i */
start local 5 // int i
2: goto 6
3: .line 60
StackMap locals: int int
StackMap stack:
aload 0 /* buffer */
iload 5 /* i */
lload 2 /* value */
l2i
i2b
bastore
4: .line 61
lload 2 /* value */
bipush 8
lshr
lstore 2 /* value */
5: .line 59
iinc 5 /* i */ -1
StackMap locals:
StackMap stack:
6: iload 5 /* i */
iload 1 /* offset */
if_icmpge 3
end local 5 // int i
7: .line 63
return
end local 4 // int end
end local 2 // long value
end local 1 // int offset
end local 0 // byte[] buffer
LocalVariableTable:
Start End Slot Name Signature
0 8 0 buffer [B
0 8 1 offset I
0 8 2 value J
1 8 4 end I
2 7 5 i I
MethodParameters:
Name Flags
buffer
offset
value
private static void blockMult(long[], long[]);
descriptor: ([J[J)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=6, locals=17, args_size=2
start local 0 // long[] st
start local 1 // long[] subH
0: .line 69
lconst_0
lstore 2 /* Z0 */
start local 2 // long Z0
1: .line 70
lconst_0
lstore 4 /* Z1 */
start local 4 // long Z1
2: .line 71
aload 1 /* subH */
iconst_0
laload
lstore 6 /* V0 */
start local 6 // long V0
3: .line 72
aload 1 /* subH */
iconst_1
laload
lstore 8 /* V1 */
start local 8 // long V1
4: .line 76
aload 0 /* st */
iconst_0
laload
lstore 10 /* X */
start local 10 // long X
5: .line 77
iconst_0
istore 12 /* i */
start local 12 // int i
6: goto 17
7: .line 79
StackMap locals: long[] long[] long long long long long int
StackMap stack:
lload 10 /* X */
bipush 63
lshr
lstore 13 /* mask */
start local 13 // long mask
8: .line 80
lload 2 /* Z0 */
lload 6 /* V0 */
lload 13 /* mask */
land
lxor
lstore 2 /* Z0 */
9: .line 81
lload 4 /* Z1 */
lload 8 /* V1 */
lload 13 /* mask */
land
lxor
lstore 4 /* Z1 */
10: .line 84
lload 8 /* V1 */
bipush 63
lshl
bipush 63
lshr
lstore 13 /* mask */
11: .line 87
lload 6 /* V0 */
lconst_1
land
lstore 15 /* carry */
start local 15 // long carry
12: .line 88
lload 6 /* V0 */
iconst_1
lushr
lstore 6 /* V0 */
13: .line 89
lload 8 /* V1 */
iconst_1
lushr
lload 15 /* carry */
bipush 63
lshl
lor
lstore 8 /* V1 */
14: .line 92
lload 6 /* V0 */
ldc -2233785415175766016
lload 13 /* mask */
land
lxor
lstore 6 /* V0 */
15: .line 93
lload 10 /* X */
iconst_1
lshl
lstore 10 /* X */
end local 15 // long carry
end local 13 // long mask
16: .line 77
iinc 12 /* i */ 1
StackMap locals:
StackMap stack:
17: iload 12 /* i */
bipush 64
if_icmplt 7
end local 12 // int i
18: .line 96
aload 0 /* st */
iconst_1
laload
lstore 10 /* X */
19: .line 97
bipush 64
istore 12 /* i */
start local 12 // int i
20: goto 31
21: .line 99
StackMap locals:
StackMap stack:
lload 10 /* X */
bipush 63
lshr
lstore 13 /* mask */
start local 13 // long mask
22: .line 100
lload 2 /* Z0 */
lload 6 /* V0 */
lload 13 /* mask */
land
lxor
lstore 2 /* Z0 */
23: .line 101
lload 4 /* Z1 */
lload 8 /* V1 */
lload 13 /* mask */
land
lxor
lstore 4 /* Z1 */
24: .line 104
lload 8 /* V1 */
bipush 63
lshl
bipush 63
lshr
lstore 13 /* mask */
25: .line 107
lload 6 /* V0 */
lconst_1
land
lstore 15 /* carry */
start local 15 // long carry
26: .line 108
lload 6 /* V0 */
iconst_1
lushr
lstore 6 /* V0 */
27: .line 109
lload 8 /* V1 */
iconst_1
lushr
lload 15 /* carry */
bipush 63
lshl
lor
lstore 8 /* V1 */
28: .line 112
lload 6 /* V0 */
ldc -2233785415175766016
lload 13 /* mask */
land
lxor
lstore 6 /* V0 */
29: .line 113
lload 10 /* X */
iconst_1
lshl
lstore 10 /* X */
end local 15 // long carry
end local 13 // long mask
30: .line 97
iinc 12 /* i */ 1
StackMap locals:
StackMap stack:
31: iload 12 /* i */
bipush 127
if_icmplt 21
end local 12 // int i
32: .line 117
lload 10 /* X */
bipush 63
lshr
lstore 12 /* mask */
start local 12 // long mask
33: .line 118
lload 2 /* Z0 */
lload 6 /* V0 */
lload 12 /* mask */
land
lxor
lstore 2 /* Z0 */
34: .line 119
lload 4 /* Z1 */
lload 8 /* V1 */
lload 12 /* mask */
land
lxor
lstore 4 /* Z1 */
35: .line 122
aload 0 /* st */
iconst_0
lload 2 /* Z0 */
lastore
36: .line 123
aload 0 /* st */
iconst_1
lload 4 /* Z1 */
lastore
37: .line 125
return
end local 12 // long mask
end local 10 // long X
end local 8 // long V1
end local 6 // long V0
end local 4 // long Z1
end local 2 // long Z0
end local 1 // long[] subH
end local 0 // long[] st
LocalVariableTable:
Start End Slot Name Signature
0 38 0 st [J
0 38 1 subH [J
1 38 2 Z0 J
2 38 4 Z1 J
3 38 6 V0 J
4 38 8 V1 J
5 38 10 X J
6 18 12 i I
8 16 13 mask J
12 16 15 carry J
20 32 12 i I
22 30 13 mask J
26 30 15 carry J
33 38 12 mask J
MethodParameters:
Name Flags
st
subH
void <init>(byte[]);
descriptor: ([B)V
flags: (0x0000)
Code:
stack=4, locals=2, args_size=2
start local 0 // com.sun.crypto.provider.GHASH this
start local 1 // byte[] subkeyH
0: .line 147
aload 0 /* this */
invokespecial java.lang.Object.<init>:()V
1: .line 148
aload 1 /* subkeyH */
ifnull 2
aload 1 /* subkeyH */
arraylength
bipush 16
if_icmpeq 3
2: .line 149
StackMap locals: com.sun.crypto.provider.GHASH byte[]
StackMap stack:
new java.security.ProviderException
dup
ldc "Internal error"
invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;)V
athrow
3: .line 151
StackMap locals:
StackMap stack:
aload 0 /* this */
iconst_2
newarray 11
putfield com.sun.crypto.provider.GHASH.state:[J
4: .line 152
aload 0 /* this */
iconst_2
newarray 11
putfield com.sun.crypto.provider.GHASH.subkeyH:[J
5: .line 153
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.subkeyH:[J
iconst_0
aload 1 /* subkeyH */
iconst_0
invokestatic com.sun.crypto.provider.GHASH.getLong:([BI)J
lastore
6: .line 154
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.subkeyH:[J
iconst_1
aload 1 /* subkeyH */
bipush 8
invokestatic com.sun.crypto.provider.GHASH.getLong:([BI)J
lastore
7: .line 155
return
end local 1 // byte[] subkeyH
end local 0 // com.sun.crypto.provider.GHASH this
LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/sun/crypto/provider/GHASH;
0 8 1 subkeyH [B
Exceptions:
throws java.security.ProviderException
MethodParameters:
Name Flags
subkeyH
void reset();
descriptor: ()V
flags: (0x0000)
Code:
stack=4, locals=1, args_size=1
start local 0 // com.sun.crypto.provider.GHASH this
0: .line 163
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_0
lconst_0
lastore
1: .line 164
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_1
lconst_0
lastore
2: .line 165
return
end local 0 // com.sun.crypto.provider.GHASH this
LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/sun/crypto/provider/GHASH;
void save();
descriptor: ()V
flags: (0x0000)
Code:
stack=3, locals=1, args_size=1
start local 0 // com.sun.crypto.provider.GHASH this
0: .line 171
aload 0 /* this */
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_0
laload
putfield com.sun.crypto.provider.GHASH.stateSave0:J
1: .line 172
aload 0 /* this */
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_1
laload
putfield com.sun.crypto.provider.GHASH.stateSave1:J
2: .line 173
return
end local 0 // com.sun.crypto.provider.GHASH this
LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/sun/crypto/provider/GHASH;
void restore();
descriptor: ()V
flags: (0x0000)
Code:
stack=4, locals=1, args_size=1
start local 0 // com.sun.crypto.provider.GHASH this
0: .line 179
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_0
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.stateSave0:J
lastore
1: .line 180
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_1
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.stateSave1:J
lastore
2: .line 181
return
end local 0 // com.sun.crypto.provider.GHASH this
LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/sun/crypto/provider/GHASH;
private static void processBlock(byte[], int, long[], long[]);
descriptor: ([BI[J[J)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=7, locals=4, args_size=4
start local 0 // byte[] data
start local 1 // int ofs
start local 2 // long[] st
start local 3 // long[] subH
0: .line 184
aload 2 /* st */
iconst_0
dup2
laload
aload 0 /* data */
iload 1 /* ofs */
invokestatic com.sun.crypto.provider.GHASH.getLong:([BI)J
lxor
lastore
1: .line 185
aload 2 /* st */
iconst_1
dup2
laload
aload 0 /* data */
iload 1 /* ofs */
bipush 8
iadd
invokestatic com.sun.crypto.provider.GHASH.getLong:([BI)J
lxor
lastore
2: .line 186
aload 2 /* st */
aload 3 /* subH */
invokestatic com.sun.crypto.provider.GHASH.blockMult:([J[J)V
3: .line 187
return
end local 3 // long[] subH
end local 2 // long[] st
end local 1 // int ofs
end local 0 // byte[] data
LocalVariableTable:
Start End Slot Name Signature
0 4 0 data [B
0 4 1 ofs I
0 4 2 st [J
0 4 3 subH [J
MethodParameters:
Name Flags
data
ofs
st
subH
void update(byte[]);
descriptor: ([B)V
flags: (0x0000)
Code:
stack=4, locals=2, args_size=2
start local 0 // com.sun.crypto.provider.GHASH this
start local 1 // byte[] in
0: .line 190
aload 0 /* this */
aload 1 /* in */
iconst_0
aload 1 /* in */
arraylength
invokevirtual com.sun.crypto.provider.GHASH.update:([BII)V
1: .line 191
return
end local 1 // byte[] in
end local 0 // com.sun.crypto.provider.GHASH this
LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/sun/crypto/provider/GHASH;
0 2 1 in [B
MethodParameters:
Name Flags
in
void update(byte[], int, int);
descriptor: ([BII)V
flags: (0x0000)
Code:
stack=5, locals=4, args_size=4
start local 0 // com.sun.crypto.provider.GHASH this
start local 1 // byte[] in
start local 2 // int inOfs
start local 3 // int inLen
0: .line 194
iload 3 /* inLen */
ifne 2
1: .line 195
return
2: .line 197
StackMap locals:
StackMap stack:
aload 1 /* in */
iload 2 /* inOfs */
iload 3 /* inLen */
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.subkeyH:[J
invokestatic com.sun.crypto.provider.GHASH.ghashRangeCheck:([BII[J[J)V
3: .line 198
aload 1 /* in */
iload 2 /* inOfs */
iload 3 /* inLen */
bipush 16
idiv
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.subkeyH:[J
invokestatic com.sun.crypto.provider.GHASH.processBlocks:([BII[J[J)V
4: .line 199
return
end local 3 // int inLen
end local 2 // int inOfs
end local 1 // byte[] in
end local 0 // com.sun.crypto.provider.GHASH this
LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/sun/crypto/provider/GHASH;
0 5 1 in [B
0 5 2 inOfs I
0 5 3 inLen I
MethodParameters:
Name Flags
in
inOfs
inLen
private static void ghashRangeCheck(byte[], int, int, long[], long[]);
descriptor: ([BII[J[J)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=5, locals=5, args_size=5
start local 0 // byte[] in
start local 1 // int inOfs
start local 2 // int inLen
start local 3 // long[] st
start local 4 // long[] subH
0: .line 202
iload 2 /* inLen */
ifge 2
1: .line 203
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "invalid input length: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 2 /* inLen */
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
2: .line 205
StackMap locals:
StackMap stack:
iload 1 /* inOfs */
ifge 4
3: .line 206
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "invalid offset: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 1 /* inOfs */
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
4: .line 208
StackMap locals:
StackMap stack:
iload 2 /* inLen */
aload 0 /* in */
arraylength
iload 1 /* inOfs */
isub
if_icmple 8
5: .line 209
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "input length out of bound: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
6: .line 210
iload 2 /* inLen */
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
ldc " > "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0 /* in */
arraylength
iload 1 /* inOfs */
isub
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
7: .line 209
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
8: .line 212
StackMap locals:
StackMap stack:
iload 2 /* inLen */
bipush 16
irem
ifeq 12
9: .line 213
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "input length/block size mismatch: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
10: .line 214
iload 2 /* inLen */
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
11: .line 213
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
12: .line 218
StackMap locals:
StackMap stack:
aload 3 /* st */
arraylength
iconst_2
if_icmpeq 16
13: .line 219
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "internal state has invalid length: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
14: .line 220
aload 3 /* st */
arraylength
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
15: .line 219
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
16: .line 222
StackMap locals:
StackMap stack:
aload 4 /* subH */
arraylength
iconst_2
if_icmpeq 20
17: .line 223
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "internal subkeyH has invalid length: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
18: .line 224
aload 4 /* subH */
arraylength
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
19: .line 223
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
athrow
20: .line 226
StackMap locals:
StackMap stack:
return
end local 4 // long[] subH
end local 3 // long[] st
end local 2 // int inLen
end local 1 // int inOfs
end local 0 // byte[] in
LocalVariableTable:
Start End Slot Name Signature
0 21 0 in [B
0 21 1 inOfs I
0 21 2 inLen I
0 21 3 st [J
0 21 4 subH [J
MethodParameters:
Name Flags
in
inOfs
inLen
st
subH
private static void processBlocks(byte[], int, int, long[], long[]);
descriptor: ([BII[J[J)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=4, locals=6, args_size=5
start local 0 // byte[] data
start local 1 // int inOfs
start local 2 // int blocks
start local 3 // long[] st
start local 4 // long[] subH
0: .line 234
iload 1 /* inOfs */
istore 5 /* offset */
start local 5 // int offset
1: .line 235
goto 5
2: .line 236
StackMap locals: int
StackMap stack:
aload 0 /* data */
iload 5 /* offset */
aload 3 /* st */
aload 4 /* subH */
invokestatic com.sun.crypto.provider.GHASH.processBlock:([BI[J[J)V
3: .line 237
iinc 2 /* blocks */ -1
4: .line 238
iinc 5 /* offset */ 16
5: .line 235
StackMap locals:
StackMap stack:
iload 2 /* blocks */
ifgt 2
6: .line 240
return
end local 5 // int offset
end local 4 // long[] subH
end local 3 // long[] st
end local 2 // int blocks
end local 1 // int inOfs
end local 0 // byte[] data
LocalVariableTable:
Start End Slot Name Signature
0 7 0 data [B
0 7 1 inOfs I
0 7 2 blocks I
0 7 3 st [J
0 7 4 subH [J
1 7 5 offset I
RuntimeVisibleAnnotations:
jdk.internal.HotSpotIntrinsicCandidate()
MethodParameters:
Name Flags
data
inOfs
blocks
st
subH
byte[] digest();
descriptor: ()[B
flags: (0x0000)
Code:
stack=4, locals=2, args_size=1
start local 0 // com.sun.crypto.provider.GHASH this
0: .line 243
bipush 16
newarray 8
astore 1 /* result */
start local 1 // byte[] result
1: .line 244
aload 1 /* result */
iconst_0
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_0
laload
invokestatic com.sun.crypto.provider.GHASH.putLong:([BIJ)V
2: .line 245
aload 1 /* result */
bipush 8
aload 0 /* this */
getfield com.sun.crypto.provider.GHASH.state:[J
iconst_1
laload
invokestatic com.sun.crypto.provider.GHASH.putLong:([BIJ)V
3: .line 246
aload 0 /* this */
invokevirtual com.sun.crypto.provider.GHASH.reset:()V
4: .line 247
aload 1 /* result */
areturn
end local 1 // byte[] result
end local 0 // com.sun.crypto.provider.GHASH this
LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/sun/crypto/provider/GHASH;
1 5 1 result [B
}
SourceFile: "GHASH.java"