final class sun.security.ssl.HandshakeMessage$Finished extends sun.security.ssl.HandshakeMessage
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: sun.security.ssl.HandshakeMessage$Finished
super_class: sun.security.ssl.HandshakeMessage
{
static final int CLIENT;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 1
static final int SERVER;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: 2
private static final byte[] SSL_CLIENT;
descriptor: [B
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final byte[] SSL_SERVER;
descriptor: [B
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private byte[] verifyData;
descriptor: [B
flags: (0x0002) ACC_PRIVATE
private sun.security.ssl.ProtocolVersion protocolVersion;
descriptor: Lsun/security/ssl/ProtocolVersion;
flags: (0x0002) ACC_PRIVATE
private sun.security.ssl.CipherSuite cipherSuite;
descriptor: Lsun/security/ssl/CipherSuite;
flags: (0x0002) ACC_PRIVATE
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=4, locals=0, args_size=0
0: iconst_4
newarray 8
dup
iconst_0
bipush 67
bastore
dup
iconst_1
bipush 76
bastore
dup
iconst_2
bipush 78
bastore
dup
iconst_3
bipush 84
bastore
putstatic sun.security.ssl.HandshakeMessage$Finished.SSL_CLIENT:[B
1: iconst_4
newarray 8
dup
iconst_0
bipush 83
bastore
dup
iconst_1
bipush 82
bastore
dup
iconst_2
bipush 86
bastore
dup
iconst_3
bipush 82
bastore
putstatic sun.security.ssl.HandshakeMessage$Finished.SSL_SERVER:[B
return
LocalVariableTable:
Start End Slot Name Signature
void <init>(sun.security.ssl.ProtocolVersion, sun.security.ssl.HandshakeHash, int, javax.crypto.SecretKey, sun.security.ssl.CipherSuite);
descriptor: (Lsun/security/ssl/ProtocolVersion;Lsun/security/ssl/HandshakeHash;ILjavax/crypto/SecretKey;Lsun/security/ssl/CipherSuite;)V
flags: (0x0000)
Code:
stack=5, locals=6, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 0: aload 0
invokespecial sun.security.ssl.HandshakeMessage.<init>:()V
1: aload 0
aload 1
putfield sun.security.ssl.HandshakeMessage$Finished.protocolVersion:Lsun/security/ssl/ProtocolVersion;
2: aload 0
aload 5
putfield sun.security.ssl.HandshakeMessage$Finished.cipherSuite:Lsun/security/ssl/CipherSuite;
3: aload 0
aload 0
aload 2
iload 3
aload 4
invokevirtual sun.security.ssl.HandshakeMessage$Finished.getFinished:(Lsun/security/ssl/HandshakeHash;ILjavax/crypto/SecretKey;)[B
putfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
4: return
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 5 0 this Lsun/security/ssl/HandshakeMessage$Finished;
0 5 1 protocolVersion Lsun/security/ssl/ProtocolVersion;
0 5 2 handshakeHash Lsun/security/ssl/HandshakeHash;
0 5 3 sender I
0 5 4 master Ljavax/crypto/SecretKey;
0 5 5 cipherSuite Lsun/security/ssl/CipherSuite;
MethodParameters:
Name Flags
protocolVersion
handshakeHash
sender
master
cipherSuite
void <init>(sun.security.ssl.ProtocolVersion, sun.security.ssl.HandshakeInStream, sun.security.ssl.CipherSuite);
descriptor: (Lsun/security/ssl/ProtocolVersion;Lsun/security/ssl/HandshakeInStream;Lsun/security/ssl/CipherSuite;)V
flags: (0x0000)
Code:
stack=2, locals=5, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
invokespecial sun.security.ssl.HandshakeMessage.<init>:()V
1: aload 0
aload 1
putfield sun.security.ssl.HandshakeMessage$Finished.protocolVersion:Lsun/security/ssl/ProtocolVersion;
2: aload 0
aload 3
putfield sun.security.ssl.HandshakeMessage$Finished.cipherSuite:Lsun/security/ssl/CipherSuite;
3: aload 1
getfield sun.security.ssl.ProtocolVersion.v:I
getstatic sun.security.ssl.ProtocolVersion.TLS10:Lsun/security/ssl/ProtocolVersion;
getfield sun.security.ssl.ProtocolVersion.v:I
if_icmplt 4
bipush 12
goto 5
StackMap locals: sun.security.ssl.HandshakeMessage$Finished sun.security.ssl.ProtocolVersion sun.security.ssl.HandshakeInStream sun.security.ssl.CipherSuite
StackMap stack:
4: bipush 36
StackMap locals:
StackMap stack: int
5: istore 4
start local 4 6: aload 0
iload 4
newarray 8
putfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
7: aload 2
aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
invokevirtual sun.security.ssl.HandshakeInStream.read:([B)I
pop
8: return
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lsun/security/ssl/HandshakeMessage$Finished;
0 9 1 protocolVersion Lsun/security/ssl/ProtocolVersion;
0 9 2 input Lsun/security/ssl/HandshakeInStream;
0 9 3 cipherSuite Lsun/security/ssl/CipherSuite;
6 9 4 msgLen I
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
protocolVersion
input
cipherSuite
boolean verify(sun.security.ssl.HandshakeHash, int, javax.crypto.SecretKey);
descriptor: (Lsun/security/ssl/HandshakeHash;ILjavax/crypto/SecretKey;)Z
flags: (0x0000)
Code:
stack=4, locals=5, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
aload 1
iload 2
aload 3
invokevirtual sun.security.ssl.HandshakeMessage$Finished.getFinished:(Lsun/security/ssl/HandshakeHash;ILjavax/crypto/SecretKey;)[B
astore 4
start local 4 1: aload 4
aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
invokestatic java.security.MessageDigest.isEqual:([B[B)Z
ireturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lsun/security/ssl/HandshakeMessage$Finished;
0 2 1 handshakeHash Lsun/security/ssl/HandshakeHash;
0 2 2 sender I
0 2 3 master Ljavax/crypto/SecretKey;
1 2 4 myFinished [B
MethodParameters:
Name Flags
handshakeHash
sender
master
private byte[] getFinished(sun.security.ssl.HandshakeHash, int, javax.crypto.SecretKey);
descriptor: (Lsun/security/ssl/HandshakeHash;ILjavax/crypto/SecretKey;)[B
flags: (0x0002) ACC_PRIVATE
Code:
stack=9, locals=16, args_size=4
start local 0 start local 1 start local 2 start local 3 0: iload 2
iconst_1
if_icmpne 4
1: getstatic sun.security.ssl.HandshakeMessage$Finished.SSL_CLIENT:[B
astore 4
start local 4 2: ldc "client finished"
astore 5
start local 5 3: goto 9
end local 5 end local 4 StackMap locals:
StackMap stack:
4: iload 2
iconst_2
if_icmpne 8
5: getstatic sun.security.ssl.HandshakeMessage$Finished.SSL_SERVER:[B
astore 4
start local 4 6: ldc "server finished"
astore 5
start local 5 7: goto 9
end local 5 end local 4 8: StackMap locals:
StackMap stack:
new java.lang.RuntimeException
dup
new java.lang.StringBuilder
dup
ldc "Invalid sender: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 2
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
start local 4 start local 5 9: StackMap locals: byte[] java.lang.String
StackMap stack:
aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.protocolVersion:Lsun/security/ssl/ProtocolVersion;
getfield sun.security.ssl.ProtocolVersion.v:I
getstatic sun.security.ssl.ProtocolVersion.TLS10:Lsun/security/ssl/ProtocolVersion;
getfield sun.security.ssl.ProtocolVersion.v:I
if_icmplt 41
10: aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.protocolVersion:Lsun/security/ssl/ProtocolVersion;
getfield sun.security.ssl.ProtocolVersion.v:I
getstatic sun.security.ssl.ProtocolVersion.TLS12:Lsun/security/ssl/ProtocolVersion;
getfield sun.security.ssl.ProtocolVersion.v:I
if_icmplt 15
11: aload 1
invokevirtual sun.security.ssl.HandshakeHash.getFinishedHash:()[B
astore 6
start local 6 12: ldc "SunTls12Prf"
astore 7
start local 7 13: aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.cipherSuite:Lsun/security/ssl/CipherSuite;
getfield sun.security.ssl.CipherSuite.prfAlg:Lsun/security/ssl/CipherSuite$PRF;
astore 8
start local 8 14: goto 22
end local 8 end local 7 end local 6 15: StackMap locals:
StackMap stack:
aload 1
invokevirtual sun.security.ssl.HandshakeHash.getMD5Clone:()Ljava/security/MessageDigest;
astore 9
start local 9 16: aload 1
invokevirtual sun.security.ssl.HandshakeHash.getSHAClone:()Ljava/security/MessageDigest;
astore 10
start local 10 17: bipush 36
newarray 8
astore 6
start local 6 18: aload 9
aload 6
iconst_0
bipush 16
invokevirtual java.security.MessageDigest.digest:([BII)I
pop
19: aload 10
aload 6
bipush 16
bipush 20
invokevirtual java.security.MessageDigest.digest:([BII)I
pop
20: ldc "SunTlsPrf"
astore 7
start local 7 21: getstatic sun.security.ssl.CipherSuite$PRF.P_NONE:Lsun/security/ssl/CipherSuite$PRF;
astore 8
end local 10 end local 9 start local 8 22: StackMap locals: byte[] java.lang.String sun.security.ssl.CipherSuite$PRF
StackMap stack:
aload 8
invokevirtual sun.security.ssl.CipherSuite$PRF.getPRFHashAlg:()Ljava/lang/String;
astore 9
start local 9 23: aload 8
invokevirtual sun.security.ssl.CipherSuite$PRF.getPRFHashLength:()I
istore 10
start local 10 24: aload 8
invokevirtual sun.security.ssl.CipherSuite$PRF.getPRFBlockSize:()I
istore 11
start local 11 25: new sun.security.internal.spec.TlsPrfParameterSpec
dup
26: aload 3
aload 5
aload 6
bipush 12
27: aload 9
iload 10
iload 11
28: invokespecial sun.security.internal.spec.TlsPrfParameterSpec.<init>:(Ljavax/crypto/SecretKey;Ljava/lang/String;[BILjava/lang/String;II)V
astore 12
start local 12 29: aload 7
invokestatic sun.security.ssl.JsseJce.getKeyGenerator:(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;
astore 13
start local 13 30: aload 13
aload 12
invokevirtual javax.crypto.KeyGenerator.init:(Ljava/security/spec/AlgorithmParameterSpec;)V
31: aload 13
invokevirtual javax.crypto.KeyGenerator.generateKey:()Ljavax/crypto/SecretKey;
astore 14
start local 14 32: ldc "RAW"
aload 14
invokeinterface javax.crypto.SecretKey.getFormat:()Ljava/lang/String;
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 36
33: new java.security.ProviderException
dup
34: ldc "Invalid PRF output, format must be RAW"
35: invokespecial java.security.ProviderException.<init>:(Ljava/lang/String;)V
athrow
36: StackMap locals: sun.security.ssl.HandshakeMessage$Finished sun.security.ssl.HandshakeHash int javax.crypto.SecretKey byte[] java.lang.String byte[] java.lang.String sun.security.ssl.CipherSuite$PRF java.lang.String int int sun.security.internal.spec.TlsPrfParameterSpec javax.crypto.KeyGenerator javax.crypto.SecretKey
StackMap stack:
aload 14
invokeinterface javax.crypto.SecretKey.getEncoded:()[B
astore 15
start local 15 37: aload 15
38: areturn
end local 15 end local 14 end local 13 end local 12 end local 11 end local 10 end local 9 end local 8 end local 7 end local 6 39: StackMap locals: sun.security.ssl.HandshakeMessage$Finished sun.security.ssl.HandshakeHash int javax.crypto.SecretKey byte[] java.lang.String
StackMap stack: java.security.GeneralSecurityException
astore 6
start local 6 40: new java.lang.RuntimeException
dup
ldc "PRF failed"
aload 6
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 6 41: StackMap locals:
StackMap stack:
aload 1
invokevirtual sun.security.ssl.HandshakeHash.getMD5Clone:()Ljava/security/MessageDigest;
astore 6
start local 6 42: aload 1
invokevirtual sun.security.ssl.HandshakeHash.getSHAClone:()Ljava/security/MessageDigest;
astore 7
start local 7 43: aload 6
aload 4
getstatic sun.security.ssl.HandshakeMessage$Finished.MD5_pad1:[B
getstatic sun.security.ssl.HandshakeMessage$Finished.MD5_pad2:[B
aload 3
invokestatic sun.security.ssl.HandshakeMessage$Finished.updateDigest:(Ljava/security/MessageDigest;[B[B[BLjavax/crypto/SecretKey;)V
44: aload 7
aload 4
getstatic sun.security.ssl.HandshakeMessage$Finished.SHA_pad1:[B
getstatic sun.security.ssl.HandshakeMessage$Finished.SHA_pad2:[B
aload 3
invokestatic sun.security.ssl.HandshakeMessage$Finished.updateDigest:(Ljava/security/MessageDigest;[B[B[BLjavax/crypto/SecretKey;)V
45: bipush 36
newarray 8
astore 8
start local 8 46: aload 6
aload 8
iconst_0
bipush 16
invokevirtual java.security.MessageDigest.digest:([BII)I
pop
47: aload 7
aload 8
bipush 16
bipush 20
invokevirtual java.security.MessageDigest.digest:([BII)I
pop
48: goto 51
StackMap locals: sun.security.ssl.HandshakeMessage$Finished sun.security.ssl.HandshakeHash int javax.crypto.SecretKey byte[] java.lang.String java.security.MessageDigest java.security.MessageDigest byte[]
StackMap stack: java.security.DigestException
49: astore 9
start local 9 50: new java.lang.RuntimeException
dup
ldc "Digest failed"
aload 9
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 9 51: StackMap locals:
StackMap stack:
aload 8
areturn
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 52 0 this Lsun/security/ssl/HandshakeMessage$Finished;
0 52 1 handshakeHash Lsun/security/ssl/HandshakeHash;
0 52 2 sender I
0 52 3 masterKey Ljavax/crypto/SecretKey;
2 4 4 sslLabel [B
6 8 4 sslLabel [B
9 52 4 sslLabel [B
3 4 5 tlsLabel Ljava/lang/String;
7 8 5 tlsLabel Ljava/lang/String;
9 52 5 tlsLabel Ljava/lang/String;
12 15 6 seed [B
18 39 6 seed [B
13 15 7 prfAlg Ljava/lang/String;
21 39 7 prfAlg Ljava/lang/String;
14 15 8 prf Lsun/security/ssl/CipherSuite$PRF;
22 39 8 prf Lsun/security/ssl/CipherSuite$PRF;
16 22 9 md5Clone Ljava/security/MessageDigest;
17 22 10 shaClone Ljava/security/MessageDigest;
23 39 9 prfHashAlg Ljava/lang/String;
24 39 10 prfHashLength I
25 39 11 prfBlockSize I
29 39 12 spec Lsun/security/internal/spec/TlsPrfParameterSpec;
30 39 13 kg Ljavax/crypto/KeyGenerator;
32 39 14 prfKey Ljavax/crypto/SecretKey;
37 39 15 finished [B
40 41 6 e Ljava/security/GeneralSecurityException;
42 52 6 md5Clone Ljava/security/MessageDigest;
43 52 7 shaClone Ljava/security/MessageDigest;
46 52 8 finished [B
50 51 9 e Ljava/security/DigestException;
Exception table:
from to target type
10 38 39 Class java.security.GeneralSecurityException
46 48 49 Class java.security.DigestException
MethodParameters:
Name Flags
handshakeHash
sender
masterKey
private static void updateDigest(java.security.MessageDigest, byte[], byte[], byte[], javax.crypto.SecretKey);
descriptor: (Ljava/security/MessageDigest;[B[B[BLjavax/crypto/SecretKey;)V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=4, locals=5, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: aload 0
aload 1
invokevirtual java.security.MessageDigest.update:([B)V
1: aload 0
aload 2
aload 3
aload 4
invokestatic sun.security.ssl.HandshakeMessage$CertificateVerify.updateDigest:(Ljava/security/MessageDigest;[B[BLjavax/crypto/SecretKey;)V
2: return
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 md Ljava/security/MessageDigest;
0 3 1 sender [B
0 3 2 pad1 [B
0 3 3 pad2 [B
0 3 4 masterSecret Ljavax/crypto/SecretKey;
MethodParameters:
Name Flags
md
sender
pad1
pad2
masterSecret
byte[] getVerifyData();
descriptor: ()[B
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lsun/security/ssl/HandshakeMessage$Finished;
int messageType();
descriptor: ()I
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: bipush 20
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lsun/security/ssl/HandshakeMessage$Finished;
int messageLength();
descriptor: ()I
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
arraylength
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lsun/security/ssl/HandshakeMessage$Finished;
void send(sun.security.ssl.HandshakeOutStream);
descriptor: (Lsun/security/ssl/HandshakeOutStream;)V
flags: (0x0000)
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 1
aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
invokevirtual sun.security.ssl.HandshakeOutStream.write:([B)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lsun/security/ssl/HandshakeMessage$Finished;
0 2 1 out Lsun/security/ssl/HandshakeOutStream;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
out
void print(java.io.PrintStream);
descriptor: (Ljava/io/PrintStream;)V
flags: (0x0000)
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 1
ldc "*** Finished"
invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
1: getstatic sun.security.ssl.HandshakeMessage$Finished.debug:Lsun/security/ssl/Debug;
ifnull 4
ldc "verbose"
invokestatic sun.security.ssl.Debug.isOn:(Ljava/lang/String;)Z
ifeq 4
2: aload 1
ldc "verify_data"
aload 0
getfield sun.security.ssl.HandshakeMessage$Finished.verifyData:[B
invokestatic sun.security.ssl.Debug.println:(Ljava/io/PrintStream;Ljava/lang/String;[B)V
3: aload 1
ldc "***"
invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
4: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lsun/security/ssl/HandshakeMessage$Finished;
0 5 1 s Ljava/io/PrintStream;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
s
}
SourceFile: "HandshakeMessage.java"
NestHost: sun.security.ssl.HandshakeMessage
InnerClasses:
final PRF = sun.security.ssl.CipherSuite$PRF of sun.security.ssl.CipherSuite
final CertificateVerify = sun.security.ssl.HandshakeMessage$CertificateVerify of sun.security.ssl.HandshakeMessage
final Finished = sun.security.ssl.HandshakeMessage$Finished of sun.security.ssl.HandshakeMessage