public class sun.security.krb5.internal.crypto.dk.Des3DkCrypto extends sun.security.krb5.internal.crypto.dk.DkCrypto
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: sun.security.krb5.internal.crypto.dk.Des3DkCrypto
  super_class: sun.security.krb5.internal.crypto.dk.DkCrypto
{
  private static final byte[] ZERO_IV;
    descriptor: [B
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 43
            bipush 8
            newarray 8
            putstatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.ZERO_IV:[B
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
         0: .line 45
            aload 0 /* this */
            invokespecial sun.security.krb5.internal.crypto.dk.DkCrypto.<init>:()V
         1: .line 46
            return
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;

  protected int getKeySeedLength();
    descriptor: ()I
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
         0: .line 49
            sipush 168
            ireturn
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;

  public byte[] stringToKey(char[]);
    descriptor: ([C)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
        start local 1 // char[] salt
         0: .line 53
            aconst_null
            astore 2 /* saltUtf8 */
        start local 2 // byte[] saltUtf8
         1: .line 55
            aload 1 /* salt */
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.charToUtf8:([C)[B
            astore 2 /* saltUtf8 */
         2: .line 56
            aload 0 /* this */
            aload 2 /* saltUtf8 */
            aconst_null
            invokevirtual sun.security.krb5.internal.crypto.dk.Des3DkCrypto.stringToKey:([B[B)[B
            astore 4
         3: .line 58
            aload 2 /* saltUtf8 */
            ifnull 5
         4: .line 59
            aload 2 /* saltUtf8 */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
         5: .line 56
      StackMap locals: sun.security.krb5.internal.crypto.dk.Des3DkCrypto char[] byte[] top byte[]
      StackMap stack:
            aload 4
            areturn
         6: .line 57
      StackMap locals: sun.security.krb5.internal.crypto.dk.Des3DkCrypto char[] byte[]
      StackMap stack: java.lang.Throwable
            astore 3
         7: .line 58
            aload 2 /* saltUtf8 */
            ifnull 9
         8: .line 59
            aload 2 /* saltUtf8 */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
         9: .line 62
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 3
            athrow
        end local 2 // byte[] saltUtf8
        end local 1 // char[] salt
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0      this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;
            0   10     1      salt  [C
            1   10     2  saltUtf8  [B
      Exception table:
        from    to  target  type
           1     3       6  any
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
      Name  Flags
      salt  

  private byte[] stringToKey(byte[], byte[]);
    descriptor: ([B[B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
        start local 1 // byte[] secretAndSalt
        start local 2 // byte[] opaque
         0: .line 68
            aload 2 /* opaque */
            ifnull 2
            aload 2 /* opaque */
            arraylength
            ifle 2
         1: .line 69
            new java.lang.RuntimeException
            dup
            ldc "Invalid parameter to stringToKey"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 72
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* secretAndSalt */
            aload 0 /* this */
            invokevirtual sun.security.krb5.internal.crypto.dk.Des3DkCrypto.getKeySeedLength:()I
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.nfold:([BI)[B
            invokevirtual sun.security.krb5.internal.crypto.dk.Des3DkCrypto.randomToKey:([B)[B
            astore 3 /* tmpKey */
        start local 3 // byte[] tmpKey
         3: .line 73
            aload 0 /* this */
            aload 3 /* tmpKey */
            getstatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.KERBEROS_CONSTANT:[B
            invokevirtual sun.security.krb5.internal.crypto.dk.Des3DkCrypto.dk:([B[B)[B
            areturn
        end local 3 // byte[] tmpKey
        end local 2 // byte[] opaque
        end local 1 // byte[] secretAndSalt
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;
            0    4     1  secretAndSalt  [B
            0    4     2         opaque  [B
            3    4     3         tmpKey  [B
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
               Name  Flags
      secretAndSalt  
      opaque         

  public byte[] parityFix(byte[]);
    descriptor: ([B)[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
        start local 1 // byte[] value
         0: .line 79
            aload 1 /* value */
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.setParityBit:([B)V
         1: .line 80
            aload 1 /* value */
            areturn
        end local 1 // byte[] value
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0   this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;
            0    2     1  value  [B
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
       Name  Flags
      value  

  protected byte[] randomToKey(byte[]);
    descriptor: ([B)[B
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
        start local 1 // byte[] in
         0: .line 92
            aload 1 /* in */
            arraylength
            bipush 21
            if_icmpeq 2
         1: .line 93
            new java.lang.IllegalArgumentException
            dup
            ldc "input must be 168 bits"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 96
      StackMap locals:
      StackMap stack:
            aload 1 /* in */
            iconst_0
            bipush 7
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.des3Expand:([BII)[B
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.keyCorrection:([B)[B
            astore 2 /* one */
        start local 2 // byte[] one
         3: .line 97
            aload 1 /* in */
            bipush 7
            bipush 14
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.des3Expand:([BII)[B
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.keyCorrection:([B)[B
            astore 3 /* two */
        start local 3 // byte[] two
         4: .line 98
            aload 1 /* in */
            bipush 14
            bipush 21
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.des3Expand:([BII)[B
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.keyCorrection:([B)[B
            astore 4 /* three */
        start local 4 // byte[] three
         5: .line 100
            bipush 24
            newarray 8
            astore 5 /* key */
        start local 5 // byte[] key
         6: .line 101
            aload 2 /* one */
            iconst_0
            aload 5 /* key */
            iconst_0
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         7: .line 102
            aload 3 /* two */
            iconst_0
            aload 5 /* key */
            bipush 8
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         8: .line 103
            aload 4 /* three */
            iconst_0
            aload 5 /* key */
            bipush 16
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         9: .line 105
            aload 5 /* key */
            areturn
        end local 5 // byte[] key
        end local 4 // byte[] three
        end local 3 // byte[] two
        end local 2 // byte[] one
        end local 1 // byte[] in
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   10     0   this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;
            0   10     1     in  [B
            3   10     2    one  [B
            4   10     3    two  [B
            5   10     4  three  [B
            6   10     5    key  [B
    MethodParameters:
      Name  Flags
      in    

  private static byte[] keyCorrection(byte[]);
    descriptor: ([B)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // byte[] key
         0: .line 111
            aload 0 /* key */
            iconst_0
            invokestatic javax.crypto.spec.DESKeySpec.isWeak:([BI)Z
            ifeq 4
         1: .line 112
            aload 0 /* key */
            bipush 7
            aload 0 /* key */
            bipush 7
            baload
            sipush 240
            ixor
            i2b
            bastore
         2: .line 114
            goto 4
      StackMap locals:
      StackMap stack: java.security.InvalidKeyException
         3: pop
         4: .line 117
      StackMap locals:
      StackMap stack:
            aload 0 /* key */
            areturn
        end local 0 // byte[] key
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0   key  [B
      Exception table:
        from    to  target  type
           0     2       3  Class java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  private static byte[] des3Expand(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=8, args_size=3
        start local 0 // byte[] input
        start local 1 // int start
        start local 2 // int end
         0: .line 142
            iload 2 /* end */
            iload 1 /* start */
            isub
            bipush 7
            if_icmpeq 4
         1: .line 143
            new java.lang.IllegalArgumentException
            dup
         2: .line 144
            new java.lang.StringBuilder
            dup
            ldc "Invalid length of DES Key Value:"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 1 /* start */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ","
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 2 /* end */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         3: .line 143
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 146
      StackMap locals:
      StackMap stack:
            bipush 8
            newarray 8
            astore 3 /* result */
        start local 3 // byte[] result
         5: .line 147
            iconst_0
            istore 4 /* last */
        start local 4 // byte last
         6: .line 148
            aload 0 /* input */
            iload 1 /* start */
            aload 3 /* result */
            iconst_0
            bipush 7
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         7: .line 149
            iconst_0
            istore 5 /* posn */
        start local 5 // byte posn
         8: .line 152
            iload 1 /* start */
            istore 6 /* i */
        start local 6 // int i
         9: goto 15
        10: .line 153
      StackMap locals: byte[] int int byte[] int int int
      StackMap stack:
            aload 0 /* input */
            iload 6 /* i */
            baload
            iconst_1
            iand
            i2b
            istore 7 /* bit */
        start local 7 // byte bit
        11: .line 158
            iload 5 /* posn */
            iconst_1
            iadd
            i2b
            istore 5 /* posn */
        12: .line 159
            iload 7 /* bit */
            ifeq 14
        13: .line 160
            iload 4 /* last */
            iload 7 /* bit */
            iload 5 /* posn */
            ishl
            ior
            i2b
            istore 4 /* last */
        end local 7 // byte bit
        14: .line 152
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        15: iload 6 /* i */
            iload 2 /* end */
            if_icmplt 10
        end local 6 // int i
        16: .line 167
            aload 3 /* result */
            bipush 7
            iload 4 /* last */
            bastore
        17: .line 168
            aload 3 /* result */
            invokestatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.setParityBit:([B)V
        18: .line 169
            aload 3 /* result */
            areturn
        end local 5 // byte posn
        end local 4 // byte last
        end local 3 // byte[] result
        end local 2 // int end
        end local 1 // int start
        end local 0 // byte[] input
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   19     0   input  [B
            0   19     1   start  I
            0   19     2     end  I
            5   19     3  result  [B
            6   19     4    last  B
            8   19     5    posn  B
            9   16     6       i  I
           11   14     7     bit  B
    MethodParameters:
       Name  Flags
      input  
      start  
      end    

  private static void setParityBit(byte[]);
    descriptor: ([B)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // byte[] key
         0: .line 177
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         1: goto 6
         2: .line 178
      StackMap locals: int
      StackMap stack:
            aload 0 /* key */
            iload 1 /* i */
            baload
            sipush 254
            iand
            istore 2 /* b */
        start local 2 // int b
         3: .line 179
            iload 2 /* b */
            iload 2 /* b */
            invokestatic java.lang.Integer.bitCount:(I)I
            iconst_1
            iand
            iconst_1
            ixor
            ior
            istore 2 /* b */
         4: .line 180
            aload 0 /* key */
            iload 1 /* i */
            iload 2 /* b */
            i2b
            bastore
        end local 2 // int b
         5: .line 177
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
         6: iload 1 /* i */
            aload 0 /* key */
            arraylength
            if_icmplt 2
        end local 1 // int i
         7: .line 182
            return
        end local 0 // byte[] key
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0   key  [B
            1    7     1     i  I
            3    5     2     b  I
    MethodParameters:
      Name  Flags
      key   

  protected javax.crypto.Cipher getCipher(byte[], byte[], int);
    descriptor: ([B[BI)Ljavax/crypto/Cipher;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=9, args_size=4
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
        start local 1 // byte[] key
        start local 2 // byte[] ivec
        start local 3 // int mode
         0: .line 187
            ldc "desede"
            invokestatic javax.crypto.SecretKeyFactory.getInstance:(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;
            astore 4 /* factory */
        start local 4 // javax.crypto.SecretKeyFactory factory
         1: .line 190
            new javax.crypto.spec.DESedeKeySpec
            dup
            aload 1 /* key */
            iconst_0
            invokespecial javax.crypto.spec.DESedeKeySpec.<init>:([BI)V
            astore 5 /* spec */
        start local 5 // java.security.spec.KeySpec spec
         2: .line 193
            aload 4 /* factory */
            aload 5 /* spec */
            invokevirtual javax.crypto.SecretKeyFactory.generateSecret:(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;
            astore 6 /* secretKey */
        start local 6 // javax.crypto.SecretKey secretKey
         3: .line 196
            aload 2 /* ivec */
            ifnonnull 5
         4: .line 197
            getstatic sun.security.krb5.internal.crypto.dk.Des3DkCrypto.ZERO_IV:[B
            astore 2 /* ivec */
         5: .line 202
      StackMap locals: javax.crypto.SecretKeyFactory java.security.spec.KeySpec javax.crypto.SecretKey
      StackMap stack:
            ldc "DESede/CBC/NoPadding"
            invokestatic javax.crypto.Cipher.getInstance:(Ljava/lang/String;)Ljavax/crypto/Cipher;
            astore 7 /* cipher */
        start local 7 // javax.crypto.Cipher cipher
         6: .line 203
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 2 /* ivec */
            iconst_0
            aload 2 /* ivec */
            arraylength
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([BII)V
            astore 8 /* encIv */
        start local 8 // javax.crypto.spec.IvParameterSpec encIv
         7: .line 206
            aload 7 /* cipher */
            iload 3 /* mode */
            aload 6 /* secretKey */
            aload 8 /* encIv */
            invokevirtual javax.crypto.Cipher.init:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
         8: .line 208
            aload 7 /* cipher */
            areturn
        end local 8 // javax.crypto.spec.IvParameterSpec encIv
        end local 7 // javax.crypto.Cipher cipher
        end local 6 // javax.crypto.SecretKey secretKey
        end local 5 // java.security.spec.KeySpec spec
        end local 4 // javax.crypto.SecretKeyFactory factory
        end local 3 // int mode
        end local 2 // byte[] ivec
        end local 1 // byte[] key
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    9     0       this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;
            0    9     1        key  [B
            0    9     2       ivec  [B
            0    9     3       mode  I
            1    9     4    factory  Ljavax/crypto/SecretKeyFactory;
            2    9     5       spec  Ljava/security/spec/KeySpec;
            3    9     6  secretKey  Ljavax/crypto/SecretKey;
            6    9     7     cipher  Ljavax/crypto/Cipher;
            7    9     8      encIv  Ljavax/crypto/spec/IvParameterSpec;
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
      Name  Flags
      key   
      ivec  
      mode  

  public int getChecksumLength();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
         0: .line 212
            bipush 20
            ireturn
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;

  protected byte[] getHmac(byte[], byte[]);
    descriptor: ([B[B)[B
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
        start local 1 // byte[] key
        start local 2 // byte[] msg
         0: .line 218
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 1 /* key */
            ldc "HmacSHA1"
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            astore 3 /* keyKi */
        start local 3 // javax.crypto.SecretKey keyKi
         1: .line 219
            ldc "HmacSHA1"
            invokestatic javax.crypto.Mac.getInstance:(Ljava/lang/String;)Ljavax/crypto/Mac;
            astore 4 /* m */
        start local 4 // javax.crypto.Mac m
         2: .line 220
            aload 4 /* m */
            aload 3 /* keyKi */
            invokevirtual javax.crypto.Mac.init:(Ljava/security/Key;)V
         3: .line 221
            aload 4 /* m */
            aload 2 /* msg */
            invokevirtual javax.crypto.Mac.doFinal:([B)[B
            areturn
        end local 4 // javax.crypto.Mac m
        end local 3 // javax.crypto.SecretKey keyKi
        end local 2 // byte[] msg
        end local 1 // byte[] key
        end local 0 // sun.security.krb5.internal.crypto.dk.Des3DkCrypto this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     0   this  Lsun/security/krb5/internal/crypto/dk/Des3DkCrypto;
            0    4     1    key  [B
            0    4     2    msg  [B
            1    4     3  keyKi  Ljavax/crypto/SecretKey;
            2    4     4      m  Ljavax/crypto/Mac;
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
      Name  Flags
      key   
      msg   
}
SourceFile: "Des3DkCrypto.java"