final class sun.security.ssl.HKDF
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: sun.security.ssl.HKDF
super_class: java.lang.Object
{
private final java.lang.String hmacAlg;
descriptor: Ljava/lang/String;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final javax.crypto.Mac hmacObj;
descriptor: Ljavax/crypto/Mac;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int hmacLen;
descriptor: I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
void <init>(java.lang.String);
descriptor: (Ljava/lang/String;)V
flags: (0x0000)
Code:
stack=5, locals=2, args_size=2
start local 0 start local 1 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 1
2: ldc "Must provide underlying HKDF Digest algorithm."
3: invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
pop
4: aload 0
new java.lang.StringBuilder
dup
ldc "Hmac"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 1
ldc "-"
ldc ""
invokevirtual java.lang.String.replace:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
putfield sun.security.ssl.HKDF.hmacAlg:Ljava/lang/String;
5: aload 0
aload 0
getfield sun.security.ssl.HKDF.hmacAlg:Ljava/lang/String;
invokestatic sun.security.ssl.JsseJce.getMac:(Ljava/lang/String;)Ljavax/crypto/Mac;
putfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
6: aload 0
aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
invokevirtual javax.crypto.Mac.getMacLength:()I
putfield sun.security.ssl.HKDF.hmacLen:I
7: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lsun/security/ssl/HKDF;
0 8 1 hashAlg Ljava/lang/String;
Exceptions:
throws java.security.NoSuchAlgorithmException
MethodParameters:
Name Flags
hashAlg
javax.crypto.SecretKey (javax.crypto.SecretKey, javax.crypto.SecretKey, java.lang.String);
descriptor: (Ljavax/crypto/SecretKey;Ljavax/crypto/SecretKey;Ljava/lang/String;)Ljavax/crypto/SecretKey;
flags: (0x0000)
Code:
stack=4, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 1
ifnonnull 2
1: new javax.crypto.spec.SecretKeySpec
dup
aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
newarray 8
ldc "HKDF-Salt"
invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
astore 1
2: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
aload 1
invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
3: new javax.crypto.spec.SecretKeySpec
dup
aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
aload 2
invokeinterface javax.crypto.SecretKey.getEncoded:()[B
invokevirtual javax.crypto.Mac.doFinal:([B)[B
4: aload 3
5: invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lsun/security/ssl/HKDF;
0 6 1 salt Ljavax/crypto/SecretKey;
0 6 2 inputKey Ljavax/crypto/SecretKey;
0 6 3 keyAlg Ljava/lang/String;
Exceptions:
throws java.security.InvalidKeyException
MethodParameters:
Name Flags
salt
inputKey
keyAlg
javax.crypto.SecretKey (byte[], javax.crypto.SecretKey, java.lang.String);
descriptor: ([BLjavax/crypto/SecretKey;Ljava/lang/String;)Ljavax/crypto/SecretKey;
flags: (0x0000)
Code:
stack=5, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 1
ifnonnull 2
1: aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
newarray 8
astore 1
2: StackMap locals:
StackMap stack:
aload 0
new javax.crypto.spec.SecretKeySpec
dup
aload 1
ldc "HKDF-Salt"
invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
aload 2
aload 3
invokevirtual sun.security.ssl.HKDF.extract:(Ljavax/crypto/SecretKey;Ljavax/crypto/SecretKey;Ljava/lang/String;)Ljavax/crypto/SecretKey;
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lsun/security/ssl/HKDF;
0 3 1 salt [B
0 3 2 inputKey Ljavax/crypto/SecretKey;
0 3 3 keyAlg Ljava/lang/String;
Exceptions:
throws java.security.InvalidKeyException
MethodParameters:
Name Flags
salt
inputKey
keyAlg
javax.crypto.SecretKey expand(javax.crypto.SecretKey, byte[], int, java.lang.String);
descriptor: (Ljavax/crypto/SecretKey;[BILjava/lang/String;)Ljavax/crypto/SecretKey;
flags: (0x0000)
Code:
stack=6, locals=11, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: aload 1
ldc "A null PRK is not allowed."
invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
pop
1: iload 3
sipush 255
aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
imul
if_icmple 3
2: new java.lang.IllegalArgumentException
dup
ldc "Requested output length exceeds maximum length allowed for HKDF expansion"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
3: StackMap locals:
StackMap stack:
aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
aload 1
invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
4: aload 2
ifnonnull 6
5: iconst_0
newarray 8
astore 2
6: StackMap locals:
StackMap stack:
iload 3
aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
iadd
iconst_1
isub
aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
idiv
istore 6
start local 6 7: iload 6
aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
imul
newarray 8
astore 5
start local 5 8: iconst_0
istore 7
start local 7 9: iconst_0
istore 8
start local 8 10: iconst_0
istore 9
start local 9 11: goto 24
12: StackMap locals: sun.security.ssl.HKDF javax.crypto.SecretKey byte[] int java.lang.String byte[] int int int int
StackMap stack:
aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
aload 5
13: iconst_0
iload 7
aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
isub
invokestatic java.lang.Math.max:(II)I
iload 8
14: invokevirtual javax.crypto.Mac.update:([BII)V
15: aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
aload 2
invokevirtual javax.crypto.Mac.update:([B)V
16: aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
iload 9
iconst_1
iadd
i2b
invokevirtual javax.crypto.Mac.update:(B)V
17: aload 0
getfield sun.security.ssl.HKDF.hmacObj:Ljavax/crypto/Mac;
aload 5
iload 7
invokevirtual javax.crypto.Mac.doFinal:([BI)V
18: aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
istore 8
19: iload 7
aload 0
getfield sun.security.ssl.HKDF.hmacLen:I
iadd
istore 7
20: goto 23
StackMap locals:
StackMap stack: javax.crypto.ShortBufferException
21: astore 10
start local 10 22: new java.lang.RuntimeException
dup
aload 10
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
athrow
end local 10 23: StackMap locals:
StackMap stack:
iinc 9 1
StackMap locals:
StackMap stack:
24: iload 9
iload 6
if_icmplt 12
end local 9 25: new javax.crypto.spec.SecretKeySpec
dup
aload 5
iconst_0
iload 3
aload 4
invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BIILjava/lang/String;)V
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 26 0 this Lsun/security/ssl/HKDF;
0 26 1 pseudoRandKey Ljavax/crypto/SecretKey;
0 26 2 info [B
0 26 3 outLen I
0 26 4 keyAlg Ljava/lang/String;
8 26 5 kdfOutput [B
7 26 6 rounds I
9 26 7 offset I
10 26 8 tLength I
11 25 9 i I
22 23 10 sbe Ljavax/crypto/ShortBufferException;
Exception table:
from to target type
12 20 21 Class javax.crypto.ShortBufferException
Exceptions:
throws java.security.InvalidKeyException
MethodParameters:
Name Flags
pseudoRandKey
info
outLen
keyAlg
}
SourceFile: "HKDF.java"