final class com.sun.crypto.provider.PBES1Core
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.crypto.provider.PBES1Core
  super_class: java.lang.Object
{
  private com.sun.crypto.provider.CipherCore cipher;
    descriptor: Lcom/sun/crypto/provider/CipherCore;
    flags: (0x0002) ACC_PRIVATE

  private java.security.MessageDigest md;
    descriptor: Ljava/security/MessageDigest;
    flags: (0x0002) ACC_PRIVATE

  private int blkSize;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String algo;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private byte[] salt;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private int iCount;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  void <init>(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // java.lang.String cipherAlg
         0: .line 58
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 49
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
         2: .line 50
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.PBES1Core.salt:[B
         3: .line 51
            aload 0 /* this */
            bipush 10
            putfield com.sun.crypto.provider.PBES1Core.iCount:I
         4: .line 60
            aload 0 /* this */
            aload 1 /* cipherAlg */
            putfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
         5: .line 61
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
            ldc "DES"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 10
         6: .line 62
            aload 0 /* this */
            new com.sun.crypto.provider.CipherCore
            dup
            new com.sun.crypto.provider.DESCrypt
            dup
            invokespecial com.sun.crypto.provider.DESCrypt.<init>:()V
         7: .line 63
            bipush 8
            invokespecial com.sun.crypto.provider.CipherCore.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;I)V
         8: .line 62
            putfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
         9: .line 64
            goto 18
      StackMap locals: com.sun.crypto.provider.PBES1Core java.lang.String
      StackMap stack:
        10: aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
            ldc "DESede"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 15
        11: .line 66
            aload 0 /* this */
            new com.sun.crypto.provider.CipherCore
            dup
            new com.sun.crypto.provider.DESedeCrypt
            dup
            invokespecial com.sun.crypto.provider.DESedeCrypt.<init>:()V
        12: .line 67
            bipush 8
            invokespecial com.sun.crypto.provider.CipherCore.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;I)V
        13: .line 66
            putfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
        14: .line 68
            goto 18
        15: .line 69
      StackMap locals:
      StackMap stack:
            new java.security.NoSuchAlgorithmException
            dup
            new java.lang.StringBuilder
            dup
            ldc "No Cipher implementation for PBEWithMD5And"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        16: .line 70
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        17: .line 69
            invokespecial java.security.NoSuchAlgorithmException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 72
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            ldc "CBC"
            invokevirtual com.sun.crypto.provider.CipherCore.setMode:(Ljava/lang/String;)V
        19: .line 73
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            ldc "PKCS5Padding"
            invokevirtual com.sun.crypto.provider.CipherCore.setPadding:(Ljava/lang/String;)V
        20: .line 75
            aload 0 /* this */
            ldc "MD5"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            putfield com.sun.crypto.provider.PBES1Core.md:Ljava/security/MessageDigest;
        21: .line 76
            return
        end local 1 // java.lang.String cipherAlg
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   22     0       this  Lcom/sun/crypto/provider/PBES1Core;
            0   22     1  cipherAlg  Ljava/lang/String;
    Exceptions:
      throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException
    MethodParameters:
           Name  Flags
      cipherAlg  

  void setMode(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // java.lang.String mode
         0: .line 88
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* mode */
            invokevirtual com.sun.crypto.provider.CipherCore.setMode:(Ljava/lang/String;)V
         1: .line 89
            return
        end local 1 // java.lang.String mode
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/crypto/provider/PBES1Core;
            0    2     1  mode  Ljava/lang/String;
    Exceptions:
      throws java.security.NoSuchAlgorithmException
    MethodParameters:
      Name  Flags
      mode  

  void setPadding(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // java.lang.String paddingScheme
         0: .line 101
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* paddingScheme */
            invokevirtual com.sun.crypto.provider.CipherCore.setPadding:(Ljava/lang/String;)V
         1: .line 102
            return
        end local 1 // java.lang.String paddingScheme
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lcom/sun/crypto/provider/PBES1Core;
            0    2     1  paddingScheme  Ljava/lang/String;
    Exceptions:
      throws javax.crypto.NoSuchPaddingException
    MethodParameters:
               Name  Flags
      paddingScheme  

  int getBlockSize();
    descriptor: ()I
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.crypto.provider.PBES1Core this
         0: .line 110
            bipush 8
            ireturn
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/crypto/provider/PBES1Core;

  int getOutputSize(int);
    descriptor: (I)I
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // int inputLen
         0: .line 132
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            iload 1 /* inputLen */
            invokevirtual com.sun.crypto.provider.CipherCore.getOutputSize:(I)I
            ireturn
        end local 1 // int inputLen
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lcom/sun/crypto/provider/PBES1Core;
            0    1     1  inputLen  I
    MethodParameters:
          Name  Flags
      inputLen  

  byte[] getIV();
    descriptor: ()[B
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.crypto.provider.PBES1Core this
         0: .line 148
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            invokevirtual com.sun.crypto.provider.CipherCore.getIV:()[B
            areturn
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/crypto/provider/PBES1Core;

  java.security.AlgorithmParameters getParameters();
    descriptor: ()Ljava/security/AlgorithmParameters;
    flags: (0x0000) 
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // com.sun.crypto.provider.PBES1Core this
         0: .line 165
            aconst_null
            astore 1 /* params */
        start local 1 // java.security.AlgorithmParameters params
         1: .line 166
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            ifnonnull 4
         2: .line 167
            aload 0 /* this */
            bipush 8
            newarray 8
            putfield com.sun.crypto.provider.PBES1Core.salt:[B
         3: .line 168
            getstatic com.sun.crypto.provider.SunJCE.RANDOM:Ljava/security/SecureRandom;
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
         4: .line 170
      StackMap locals: java.security.AlgorithmParameters
      StackMap stack:
            new javax.crypto.spec.PBEParameterSpec
            dup
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.iCount:I
            invokespecial javax.crypto.spec.PBEParameterSpec.<init>:([BI)V
            astore 2 /* pbeSpec */
        start local 2 // javax.crypto.spec.PBEParameterSpec pbeSpec
         5: .line 172
            new java.lang.StringBuilder
            dup
            ldc "PBEWithMD5And"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         6: .line 173
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
            ldc "DES"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 7
            ldc "DES"
            goto 8
      StackMap locals: com.sun.crypto.provider.PBES1Core java.security.AlgorithmParameters javax.crypto.spec.PBEParameterSpec
      StackMap stack: java.lang.StringBuilder
         7: ldc "TripleDES"
      StackMap locals: com.sun.crypto.provider.PBES1Core java.security.AlgorithmParameters javax.crypto.spec.PBEParameterSpec
      StackMap stack: java.lang.StringBuilder java.lang.String
         8: invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         9: .line 172
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        10: .line 174
            invokestatic com.sun.crypto.provider.SunJCE.getInstance:()Lcom/sun/crypto/provider/SunJCE;
        11: .line 172
            invokestatic java.security.AlgorithmParameters.getInstance:(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameters;
            astore 1 /* params */
        12: .line 175
            aload 1 /* params */
            aload 2 /* pbeSpec */
            invokevirtual java.security.AlgorithmParameters.init:(Ljava/security/spec/AlgorithmParameterSpec;)V
        13: .line 176
            goto 18
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
        14: pop
        15: .line 178
            new java.lang.RuntimeException
            dup
            ldc "SunJCE called, but not configured"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 179
      StackMap locals:
      StackMap stack: java.security.spec.InvalidParameterSpecException
            pop
        17: .line 181
            new java.lang.RuntimeException
            dup
            ldc "PBEParameterSpec not supported"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 183
      StackMap locals:
      StackMap stack:
            aload 1 /* params */
            areturn
        end local 2 // javax.crypto.spec.PBEParameterSpec pbeSpec
        end local 1 // java.security.AlgorithmParameters params
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   19     0     this  Lcom/sun/crypto/provider/PBES1Core;
            1   19     1   params  Ljava/security/AlgorithmParameters;
            5   19     2  pbeSpec  Ljavax/crypto/spec/PBEParameterSpec;
      Exception table:
        from    to  target  type
           5    13      14  Class java.security.NoSuchAlgorithmException
           5    13      16  Class java.security.spec.InvalidParameterSpecException

  void init(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom);
    descriptor: (ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
    flags: (0x0000) 
    Code:
      stack=6, locals=9, args_size=5
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // int opmode
        start local 2 // java.security.Key key
        start local 3 // java.security.spec.AlgorithmParameterSpec params
        start local 4 // java.security.SecureRandom random
         0: .line 212
            iload 1 /* opmode */
            iconst_2
            if_icmpeq 2
         1: .line 213
            iload 1 /* opmode */
            iconst_4
            if_icmpne 4
      StackMap locals:
      StackMap stack:
         2: aload 3 /* params */
            ifnonnull 4
         3: .line 214
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "Parameters missing"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 217
      StackMap locals:
      StackMap stack:
            aload 2 /* key */
            ifnonnull 6
         5: .line 218
            new java.security.InvalidKeyException
            dup
            ldc "Null key"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 222
      StackMap locals:
      StackMap stack:
            aload 2 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            astore 6 /* passwdBytes */
        start local 6 // byte[] passwdBytes
         7: .line 224
            aload 6 /* passwdBytes */
            ifnull 9
         8: .line 225
            aload 2 /* key */
            invokeinterface java.security.Key.getAlgorithm:()Ljava/lang/String;
            iconst_1
            iconst_0
            ldc "PBE"
            iconst_0
            iconst_3
            invokevirtual java.lang.String.regionMatches:(ZILjava/lang/String;II)Z
            ifne 10
         9: .line 226
      StackMap locals: com.sun.crypto.provider.PBES1Core int java.security.Key java.security.spec.AlgorithmParameterSpec java.security.SecureRandom top byte[]
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            ldc "Missing password"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 229
      StackMap locals:
      StackMap stack:
            aload 3 /* params */
            ifnonnull 14
        11: .line 231
            aload 0 /* this */
            bipush 8
            newarray 8
            putfield com.sun.crypto.provider.PBES1Core.salt:[B
        12: .line 232
            aload 4 /* random */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
        13: .line 233
            goto 28
        14: .line 234
      StackMap locals:
      StackMap stack:
            aload 3 /* params */
            instanceof javax.crypto.spec.PBEParameterSpec
            ifne 18
        15: .line 235
            new java.security.InvalidAlgorithmParameterException
            dup
        16: .line 236
            ldc "Wrong parameter type: PBE expected"
        17: .line 235
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 238
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* params */
            checkcast javax.crypto.spec.PBEParameterSpec
            invokevirtual javax.crypto.spec.PBEParameterSpec.getSalt:()[B
            putfield com.sun.crypto.provider.PBES1Core.salt:[B
        19: .line 240
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            arraylength
            bipush 8
            if_icmpeq 23
        20: .line 241
            new java.security.InvalidAlgorithmParameterException
            dup
        21: .line 242
            ldc "Salt must be 8 bytes long"
        22: .line 241
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        23: .line 244
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* params */
            checkcast javax.crypto.spec.PBEParameterSpec
            invokevirtual javax.crypto.spec.PBEParameterSpec.getIterationCount:()I
            putfield com.sun.crypto.provider.PBES1Core.iCount:I
        24: .line 245
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.iCount:I
            ifgt 28
        25: .line 246
            new java.security.InvalidAlgorithmParameterException
            dup
        26: .line 247
            ldc "IterationCount must be a positive number"
        27: .line 246
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        28: .line 250
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 6 /* passwdBytes */
            invokevirtual com.sun.crypto.provider.PBES1Core.deriveCipherKey:([B)[B
            astore 5 /* derivedKey */
        start local 5 // byte[] derivedKey
        29: .line 251
            goto 33
        end local 5 // byte[] derivedKey
      StackMap locals:
      StackMap stack: java.lang.Throwable
        30: astore 7
        31: .line 252
            aload 6 /* passwdBytes */
            ifnull 32
            aload 6 /* passwdBytes */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
        32: .line 253
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 7
            athrow
        start local 5 // byte[] derivedKey
        33: .line 252
      StackMap locals: com.sun.crypto.provider.PBES1Core int java.security.Key java.security.spec.AlgorithmParameterSpec java.security.SecureRandom byte[] byte[]
      StackMap stack:
            aload 6 /* passwdBytes */
            ifnull 34
            aload 6 /* passwdBytes */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
        34: .line 255
      StackMap locals:
      StackMap stack:
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 5 /* derivedKey */
            iconst_0
        35: .line 256
            aload 5 /* derivedKey */
            arraylength
            bipush 8
            isub
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
        36: .line 255
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BIILjava/lang/String;)V
            astore 7 /* cipherKey */
        start local 7 // javax.crypto.spec.SecretKeySpec cipherKey
        37: .line 258
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 5 /* derivedKey */
        38: .line 259
            aload 5 /* derivedKey */
            arraylength
            bipush 8
            isub
        39: .line 260
            bipush 8
        40: .line 258
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([BII)V
            astore 8 /* ivSpec */
        start local 8 // javax.crypto.spec.IvParameterSpec ivSpec
        41: .line 262
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            iload 1 /* opmode */
            aload 7 /* cipherKey */
            aload 8 /* ivSpec */
            aload 4 /* random */
            invokevirtual com.sun.crypto.provider.CipherCore.init:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
        42: .line 263
            return
        end local 8 // javax.crypto.spec.IvParameterSpec ivSpec
        end local 7 // javax.crypto.spec.SecretKeySpec cipherKey
        end local 6 // byte[] passwdBytes
        end local 5 // byte[] derivedKey
        end local 4 // java.security.SecureRandom random
        end local 3 // java.security.spec.AlgorithmParameterSpec params
        end local 2 // java.security.Key key
        end local 1 // int opmode
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   43     0         this  Lcom/sun/crypto/provider/PBES1Core;
            0   43     1       opmode  I
            0   43     2          key  Ljava/security/Key;
            0   43     3       params  Ljava/security/spec/AlgorithmParameterSpec;
            0   43     4       random  Ljava/security/SecureRandom;
           29   30     5   derivedKey  [B
           33   43     5   derivedKey  [B
            7   43     6  passwdBytes  [B
           37   43     7    cipherKey  Ljavax/crypto/spec/SecretKeySpec;
           41   43     8       ivSpec  Ljavax/crypto/spec/IvParameterSpec;
      Exception table:
        from    to  target  type
           7    30      30  any
    Exceptions:
      throws java.security.InvalidKeyException, java.security.InvalidAlgorithmParameterException
    MethodParameters:
        Name  Flags
      opmode  
      key     
      params  
      random  

  private byte[] deriveCipherKey(byte[]);
    descriptor: ([B)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // byte[] passwdBytes
         0: .line 267
            aconst_null
            astore 2 /* result */
        start local 2 // byte[] result
         1: .line 269
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
            ldc "DES"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 15
         2: .line 271
            aload 1 /* passwdBytes */
            arraylength
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            arraylength
            invokestatic com.sun.crypto.provider.CipherCore.addExact:(II)I
            newarray 8
            astore 3 /* concat */
        start local 3 // byte[] concat
         3: .line 272
            aload 1 /* passwdBytes */
            iconst_0
            aload 3 /* concat */
            iconst_0
            aload 1 /* passwdBytes */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 273
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iconst_0
            aload 3 /* concat */
            aload 1 /* passwdBytes */
            arraylength
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         5: .line 276
            aload 3 /* concat */
            astore 4 /* toBeHashed */
        start local 4 // byte[] toBeHashed
         6: .line 277
            iconst_0
            istore 5 /* i */
        start local 5 // int i
         7: goto 11
         8: .line 278
      StackMap locals: com.sun.crypto.provider.PBES1Core byte[] byte[] byte[] byte[] int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.md:Ljava/security/MessageDigest;
            aload 4 /* toBeHashed */
            invokevirtual java.security.MessageDigest.update:([B)V
         9: .line 279
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.md:Ljava/security/MessageDigest;
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 4 /* toBeHashed */
        10: .line 277
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        11: iload 5 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.iCount:I
            if_icmplt 8
        end local 5 // int i
        12: .line 281
            aload 3 /* concat */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
        13: .line 282
            aload 4 /* toBeHashed */
            astore 2 /* result */
        end local 4 // byte[] toBeHashed
        end local 3 // byte[] concat
        14: .line 283
            goto 48
      StackMap locals:
      StackMap stack:
        15: aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.algo:Ljava/lang/String;
            ldc "DESede"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 48
        16: .line 286
            iconst_0
            istore 3 /* i */
        start local 3 // int i
        17: goto 21
        18: .line 287
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iload 3 /* i */
            baload
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iload 3 /* i */
            iconst_4
            iadd
            baload
            if_icmpeq 20
        19: .line 288
            goto 22
        20: .line 286
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        21: iload 3 /* i */
            iconst_4
            if_icmplt 18
        22: .line 290
      StackMap locals:
      StackMap stack:
            iload 3 /* i */
            iconst_4
            if_icmpne 29
        23: .line 291
            iconst_0
            istore 3 /* i */
            goto 28
        24: .line 292
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iload 3 /* i */
            baload
            istore 4 /* tmp */
        start local 4 // byte tmp
        25: .line 293
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iload 3 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iconst_3
            iload 3 /* i */
            isub
            baload
            bastore
        26: .line 294
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iconst_3
            iload 3 /* i */
            isub
            iload 4 /* tmp */
            bastore
        end local 4 // byte tmp
        27: .line 291
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        28: iload 3 /* i */
            iconst_2
            if_icmplt 24
        29: .line 304
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 4 /* toBeHashed */
        start local 4 // byte[] toBeHashed
        30: .line 305
            bipush 32
            newarray 8
            astore 2 /* result */
        31: .line 307
            iconst_0
            istore 3 /* i */
            goto 47
        32: .line 308
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            arraylength
            iconst_2
            idiv
            newarray 8
            astore 4 /* toBeHashed */
        33: .line 309
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            iload 3 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.salt:[B
            arraylength
            iconst_2
            idiv
            imul
            aload 4 /* toBeHashed */
            iconst_0
        34: .line 310
            aload 4 /* toBeHashed */
            arraylength
        35: .line 309
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        36: .line 311
            iconst_0
            istore 5 /* j */
        start local 5 // int j
        37: goto 42
        38: .line 312
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.md:Ljava/security/MessageDigest;
            aload 4 /* toBeHashed */
            invokevirtual java.security.MessageDigest.update:([B)V
        39: .line 313
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.md:Ljava/security/MessageDigest;
            aload 1 /* passwdBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
        40: .line 314
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.md:Ljava/security/MessageDigest;
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 4 /* toBeHashed */
        41: .line 311
            iinc 5 /* j */ 1
      StackMap locals:
      StackMap stack:
        42: iload 5 /* j */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.iCount:I
            if_icmplt 38
        end local 5 // int j
        43: .line 316
            aload 4 /* toBeHashed */
            iconst_0
            aload 2 /* result */
            iload 3 /* i */
            bipush 16
            imul
        44: .line 317
            aload 4 /* toBeHashed */
            arraylength
        45: .line 316
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        46: .line 307
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        47: iload 3 /* i */
            iconst_2
            if_icmplt 32
        end local 4 // byte[] toBeHashed
        end local 3 // int i
        48: .line 321
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.md:Ljava/security/MessageDigest;
            invokevirtual java.security.MessageDigest.reset:()V
        49: .line 322
            aload 2 /* result */
            areturn
        end local 2 // byte[] result
        end local 1 // byte[] passwdBytes
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   50     0         this  Lcom/sun/crypto/provider/PBES1Core;
            0   50     1  passwdBytes  [B
            1   50     2       result  [B
            3   14     3       concat  [B
            6   14     4   toBeHashed  [B
            7   12     5            i  I
           17   48     3            i  I
           25   27     4          tmp  B
           30   48     4   toBeHashed  [B
           37   43     5            j  I
    MethodParameters:
             Name  Flags
      passwdBytes  

  void init(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom);
    descriptor: (ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=6, args_size=5
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // int opmode
        start local 2 // java.security.Key key
        start local 3 // java.security.AlgorithmParameters params
        start local 4 // java.security.SecureRandom random
         0: .line 328
            aconst_null
            astore 5 /* pbeSpec */
        start local 5 // javax.crypto.spec.PBEParameterSpec pbeSpec
         1: .line 329
            aload 3 /* params */
            ifnull 6
         2: .line 331
            aload 3 /* params */
            ldc Ljavax/crypto/spec/PBEParameterSpec;
            invokevirtual java.security.AlgorithmParameters.getParameterSpec:(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;
            checkcast javax.crypto.spec.PBEParameterSpec
            astore 5 /* pbeSpec */
         3: .line 332
            goto 6
      StackMap locals: com.sun.crypto.provider.PBES1Core int java.security.Key java.security.AlgorithmParameters java.security.SecureRandom javax.crypto.spec.PBEParameterSpec
      StackMap stack: java.security.spec.InvalidParameterSpecException
         4: pop
         5: .line 333
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "Wrong parameter type: PBE expected"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 338
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* opmode */
            aload 2 /* key */
            aload 5 /* pbeSpec */
            aload 4 /* random */
            invokevirtual com.sun.crypto.provider.PBES1Core.init:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
         7: .line 339
            return
        end local 5 // javax.crypto.spec.PBEParameterSpec pbeSpec
        end local 4 // java.security.SecureRandom random
        end local 3 // java.security.AlgorithmParameters params
        end local 2 // java.security.Key key
        end local 1 // int opmode
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Lcom/sun/crypto/provider/PBES1Core;
            0    8     1   opmode  I
            0    8     2      key  Ljava/security/Key;
            0    8     3   params  Ljava/security/AlgorithmParameters;
            0    8     4   random  Ljava/security/SecureRandom;
            1    8     5  pbeSpec  Ljavax/crypto/spec/PBEParameterSpec;
      Exception table:
        from    to  target  type
           2     3       4  Class java.security.spec.InvalidParameterSpecException
    Exceptions:
      throws java.security.InvalidKeyException, java.security.InvalidAlgorithmParameterException
    MethodParameters:
        Name  Flags
      opmode  
      key     
      params  
      random  

  byte[] update(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // byte[] input
        start local 2 // int inputOffset
        start local 3 // int inputLen
         0: .line 359
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* input */
            iload 2 /* inputOffset */
            iload 3 /* inputLen */
            invokevirtual com.sun.crypto.provider.CipherCore.update:([BII)[B
            areturn
        end local 3 // int inputLen
        end local 2 // int inputOffset
        end local 1 // byte[] input
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Lcom/sun/crypto/provider/PBES1Core;
            0    1     1        input  [B
            0    1     2  inputOffset  I
            0    1     3     inputLen  I
    MethodParameters:
             Name  Flags
      input        
      inputOffset  
      inputLen     

  int update(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0000) 
    Code:
      stack=6, locals=6, args_size=6
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // byte[] input
        start local 2 // int inputOffset
        start local 3 // int inputLen
        start local 4 // byte[] output
        start local 5 // int outputOffset
         0: .line 388
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* input */
            iload 2 /* inputOffset */
            iload 3 /* inputLen */
         1: .line 389
            aload 4 /* output */
            iload 5 /* outputOffset */
         2: .line 388
            invokevirtual com.sun.crypto.provider.CipherCore.update:([BII[BI)I
            ireturn
        end local 5 // int outputOffset
        end local 4 // byte[] output
        end local 3 // int inputLen
        end local 2 // int inputOffset
        end local 1 // byte[] input
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0          this  Lcom/sun/crypto/provider/PBES1Core;
            0    3     1         input  [B
            0    3     2   inputOffset  I
            0    3     3      inputLen  I
            0    3     4        output  [B
            0    3     5  outputOffset  I
    Exceptions:
      throws javax.crypto.ShortBufferException
    MethodParameters:
              Name  Flags
      input         
      inputOffset   
      inputLen      
      output        
      outputOffset  

  byte[] doFinal(byte[], int, int);
    descriptor: ([BII)[B
    flags: (0x0000) 
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // byte[] input
        start local 2 // int inputOffset
        start local 3 // int inputLen
         0: .line 423
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* input */
            iload 2 /* inputOffset */
            iload 3 /* inputLen */
            invokevirtual com.sun.crypto.provider.CipherCore.doFinal:([BII)[B
            areturn
        end local 3 // int inputLen
        end local 2 // int inputOffset
        end local 1 // byte[] input
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Lcom/sun/crypto/provider/PBES1Core;
            0    1     1        input  [B
            0    1     2  inputOffset  I
            0    1     3     inputLen  I
    Exceptions:
      throws javax.crypto.IllegalBlockSizeException, javax.crypto.BadPaddingException
    MethodParameters:
             Name  Flags
      input        
      inputOffset  
      inputLen     

  int doFinal(byte[], int, int, byte[], int);
    descriptor: ([BII[BI)I
    flags: (0x0000) 
    Code:
      stack=6, locals=6, args_size=6
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // byte[] input
        start local 2 // int inputOffset
        start local 3 // int inputLen
        start local 4 // byte[] output
        start local 5 // int outputOffset
         0: .line 465
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBES1Core.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* input */
            iload 2 /* inputOffset */
            iload 3 /* inputLen */
         1: .line 466
            aload 4 /* output */
            iload 5 /* outputOffset */
         2: .line 465
            invokevirtual com.sun.crypto.provider.CipherCore.doFinal:([BII[BI)I
            ireturn
        end local 5 // int outputOffset
        end local 4 // byte[] output
        end local 3 // int inputLen
        end local 2 // int inputOffset
        end local 1 // byte[] input
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0          this  Lcom/sun/crypto/provider/PBES1Core;
            0    3     1         input  [B
            0    3     2   inputOffset  I
            0    3     3      inputLen  I
            0    3     4        output  [B
            0    3     5  outputOffset  I
    Exceptions:
      throws javax.crypto.ShortBufferException, javax.crypto.IllegalBlockSizeException, javax.crypto.BadPaddingException
    MethodParameters:
              Name  Flags
      input         
      inputOffset   
      inputLen      
      output        
      outputOffset  

  byte[] wrap(java.security.Key);
    descriptor: (Ljava/security/Key;)[B
    flags: (0x0000) 
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // java.security.Key key
         0: .line 487
            aconst_null
            astore 2 /* result */
        start local 2 // byte[] result
         1: .line 488
            aconst_null
            astore 3 /* encodedKey */
        start local 3 // byte[] encodedKey
         2: .line 490
            aload 1 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            astore 3 /* encodedKey */
         3: .line 491
            aload 3 /* encodedKey */
            ifnull 4
            aload 3 /* encodedKey */
            arraylength
            ifne 5
         4: .line 492
      StackMap locals: byte[] byte[]
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            ldc "Cannot get an encoding of the key to be wrapped"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 496
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* encodedKey */
            iconst_0
            aload 3 /* encodedKey */
            arraylength
            invokevirtual com.sun.crypto.provider.PBES1Core.doFinal:([BII)[B
            astore 2 /* result */
         6: .line 497
            goto 12
      StackMap locals:
      StackMap stack: javax.crypto.BadPaddingException
         7: pop
         8: .line 500
            aload 3 /* encodedKey */
            ifnull 13
            aload 3 /* encodedKey */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
            goto 13
         9: .line 499
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 4
        10: .line 500
            aload 3 /* encodedKey */
            ifnull 11
            aload 3 /* encodedKey */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
        11: .line 501
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 4
            athrow
        12: .line 500
      StackMap locals:
      StackMap stack:
            aload 3 /* encodedKey */
            ifnull 13
            aload 3 /* encodedKey */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
        13: .line 503
      StackMap locals:
      StackMap stack:
            aload 2 /* result */
            areturn
        end local 3 // byte[] encodedKey
        end local 2 // byte[] result
        end local 1 // java.security.Key key
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   14     0        this  Lcom/sun/crypto/provider/PBES1Core;
            0   14     1         key  Ljava/security/Key;
            1   14     2      result  [B
            2   14     3  encodedKey  [B
      Exception table:
        from    to  target  type
           2     6       7  Class javax.crypto.BadPaddingException
           2     8       9  any
    Exceptions:
      throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException
    MethodParameters:
      Name  Flags
      key   

  java.security.Key unwrap(byte[], java.lang.String, int);
    descriptor: ([BLjava/lang/String;I)Ljava/security/Key;
    flags: (0x0000) 
    Code:
      stack=4, locals=5, args_size=4
        start local 0 // com.sun.crypto.provider.PBES1Core this
        start local 1 // byte[] wrappedKey
        start local 2 // java.lang.String wrappedKeyAlgorithm
        start local 3 // int wrappedKeyType
         0: .line 533
            aload 0 /* this */
            aload 1 /* wrappedKey */
            iconst_0
            aload 1 /* wrappedKey */
            arraylength
            invokevirtual com.sun.crypto.provider.PBES1Core.doFinal:([BII)[B
            astore 4 /* encodedKey */
        start local 4 // byte[] encodedKey
         1: .line 534
            goto 6
        end local 4 // byte[] encodedKey
      StackMap locals:
      StackMap stack: javax.crypto.BadPaddingException
         2: pop
         3: .line 535
            new java.security.InvalidKeyException
            dup
            ldc "The wrapped key is not padded correctly"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 537
      StackMap locals:
      StackMap stack: javax.crypto.IllegalBlockSizeException
            pop
         5: .line 538
            new java.security.InvalidKeyException
            dup
            ldc "The wrapped key does not have the correct length"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
        start local 4 // byte[] encodedKey
         6: .line 541
      StackMap locals: byte[]
      StackMap stack:
            aload 4 /* encodedKey */
            aload 2 /* wrappedKeyAlgorithm */
         7: .line 542
            iload 3 /* wrappedKeyType */
         8: .line 541
            invokestatic com.sun.crypto.provider.ConstructKeys.constructKey:([BLjava/lang/String;I)Ljava/security/Key;
            areturn
        end local 4 // byte[] encodedKey
        end local 3 // int wrappedKeyType
        end local 2 // java.lang.String wrappedKeyAlgorithm
        end local 1 // byte[] wrappedKey
        end local 0 // com.sun.crypto.provider.PBES1Core this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    9     0                 this  Lcom/sun/crypto/provider/PBES1Core;
            0    9     1           wrappedKey  [B
            0    9     2  wrappedKeyAlgorithm  Ljava/lang/String;
            0    9     3       wrappedKeyType  I
            1    2     4           encodedKey  [B
            6    9     4           encodedKey  [B
      Exception table:
        from    to  target  type
           0     1       2  Class javax.crypto.BadPaddingException
           0     1       4  Class javax.crypto.IllegalBlockSizeException
    Exceptions:
      throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException
    MethodParameters:
                     Name  Flags
      wrappedKey           
      wrappedKeyAlgorithm  
      wrappedKeyType       
}
SourceFile: "PBES1Core.java"