final class com.sun.crypto.provider.PBECipherCore
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: com.sun.crypto.provider.PBECipherCore
  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.PBECipherCore this
        start local 1 // java.lang.String cipherAlg
         0: .line 57
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 48
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.PBECipherCore.algo:Ljava/lang/String;
         2: .line 49
            aload 0 /* this */
            aconst_null
            putfield com.sun.crypto.provider.PBECipherCore.salt:[B
         3: .line 50
            aload 0 /* this */
            bipush 10
            putfield com.sun.crypto.provider.PBECipherCore.iCount:I
         4: .line 59
            aload 0 /* this */
            aload 1 /* cipherAlg */
            putfield com.sun.crypto.provider.PBECipherCore.algo:Ljava/lang/String;
         5: .line 60
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.algo:Ljava/lang/String;
            ldc "DES"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 10
         6: .line 61
            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 62
            bipush 8
            invokespecial com.sun.crypto.provider.CipherCore.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;I)V
         8: .line 61
            putfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
         9: .line 63
            goto 18
      StackMap locals: com.sun.crypto.provider.PBECipherCore java.lang.String
      StackMap stack:
        10: aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.algo:Ljava/lang/String;
            ldc "DESede"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 15
        11: .line 65
            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 66
            bipush 8
            invokespecial com.sun.crypto.provider.CipherCore.<init>:(Lcom/sun/crypto/provider/SymmetricCipher;I)V
        13: .line 65
            putfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
        14: .line 67
            goto 18
        15: .line 68
      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 69
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.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 68
            invokespecial java.security.NoSuchAlgorithmException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 71
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            ldc "CBC"
            invokevirtual com.sun.crypto.provider.CipherCore.setMode:(Ljava/lang/String;)V
        19: .line 72
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            ldc "PKCS5Padding"
            invokevirtual com.sun.crypto.provider.CipherCore.setPadding:(Ljava/lang/String;)V
        20: .line 74
            aload 0 /* this */
            ldc "MD5"
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            putfield com.sun.crypto.provider.PBECipherCore.md:Ljava/security/MessageDigest;
        21: .line 75
            return
        end local 1 // java.lang.String cipherAlg
        end local 0 // com.sun.crypto.provider.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   22     0       this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore this
        start local 1 // java.lang.String mode
         0: .line 87
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* mode */
            invokevirtual com.sun.crypto.provider.CipherCore.setMode:(Ljava/lang/String;)V
         1: .line 88
            return
        end local 1 // java.lang.String mode
        end local 0 // com.sun.crypto.provider.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore this
        start local 1 // java.lang.String paddingScheme
         0: .line 100
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* paddingScheme */
            invokevirtual com.sun.crypto.provider.CipherCore.setPadding:(Ljava/lang/String;)V
         1: .line 101
            return
        end local 1 // java.lang.String paddingScheme
        end local 0 // com.sun.crypto.provider.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore this
         0: .line 109
            bipush 8
            ireturn
        end local 0 // com.sun.crypto.provider.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/crypto/provider/PBECipherCore;

  int getOutputSize(int);
    descriptor: (I)I
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.crypto.provider.PBECipherCore this
        start local 1 // int inputLen
         0: .line 131
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore this
         0: .line 147
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            invokevirtual com.sun.crypto.provider.CipherCore.getIV:()[B
            areturn
        end local 0 // com.sun.crypto.provider.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/crypto/provider/PBECipherCore;

  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.PBECipherCore this
         0: .line 164
            aconst_null
            astore 1 /* params */
        start local 1 // java.security.AlgorithmParameters params
         1: .line 165
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            ifnonnull 4
         2: .line 166
            aload 0 /* this */
            bipush 8
            newarray 8
            putfield com.sun.crypto.provider.PBECipherCore.salt:[B
         3: .line 167
            getstatic com.sun.crypto.provider.SunJCE.RANDOM:Ljava/security/SecureRandom;
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
         4: .line 169
      StackMap locals: java.security.AlgorithmParameters
      StackMap stack:
            new javax.crypto.spec.PBEParameterSpec
            dup
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.iCount:I
            invokespecial javax.crypto.spec.PBEParameterSpec.<init>:([BI)V
            astore 2 /* pbeSpec */
        start local 2 // javax.crypto.spec.PBEParameterSpec pbeSpec
         5: .line 171
            new java.lang.StringBuilder
            dup
            ldc "PBEWithMD5And"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         6: .line 172
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.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.PBECipherCore java.security.AlgorithmParameters javax.crypto.spec.PBEParameterSpec
      StackMap stack: java.lang.StringBuilder
         7: ldc "TripleDES"
      StackMap locals: com.sun.crypto.provider.PBECipherCore 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 171
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        10: .line 173
            invokestatic com.sun.crypto.provider.SunJCE.getInstance:()Lcom/sun/crypto/provider/SunJCE;
        11: .line 171
            invokestatic java.security.AlgorithmParameters.getInstance:(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameters;
            astore 1 /* params */
        12: .line 174
            aload 1 /* params */
            aload 2 /* pbeSpec */
            invokevirtual java.security.AlgorithmParameters.init:(Ljava/security/spec/AlgorithmParameterSpec;)V
        13: .line 175
            goto 18
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
        14: pop
        15: .line 177
            new java.lang.RuntimeException
            dup
            ldc "SunJCE called, but not configured"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 178
      StackMap locals:
      StackMap stack: java.security.spec.InvalidParameterSpecException
            pop
        17: .line 180
            new java.lang.RuntimeException
            dup
            ldc "PBEParameterSpec not supported"
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
            athrow
        18: .line 182
      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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   19     0     this  Lcom/sun/crypto/provider/PBECipherCore;
            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=8, args_size=5
        start local 0 // com.sun.crypto.provider.PBECipherCore 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 211
            iload 1 /* opmode */
            iconst_2
            if_icmpeq 2
         1: .line 212
            iload 1 /* opmode */
            iconst_4
            if_icmpne 4
      StackMap locals:
      StackMap stack:
         2: aload 3 /* params */
            ifnonnull 4
         3: .line 213
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "Parameters missing"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 216
      StackMap locals:
      StackMap stack:
            aload 2 /* key */
            ifnull 7
         5: .line 217
            aload 2 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            ifnull 7
         6: .line 218
            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 8
         7: .line 219
      StackMap locals:
      StackMap stack:
            new java.security.InvalidKeyException
            dup
            ldc "Missing password"
            invokespecial java.security.InvalidKeyException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 222
      StackMap locals:
      StackMap stack:
            aload 3 /* params */
            ifnonnull 12
         9: .line 224
            aload 0 /* this */
            bipush 8
            newarray 8
            putfield com.sun.crypto.provider.PBECipherCore.salt:[B
        10: .line 225
            aload 4 /* random */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
        11: .line 226
            goto 26
        12: .line 227
      StackMap locals:
      StackMap stack:
            aload 3 /* params */
            instanceof javax.crypto.spec.PBEParameterSpec
            ifne 16
        13: .line 228
            new java.security.InvalidAlgorithmParameterException
            dup
        14: .line 229
            ldc "Wrong parameter type: PBE expected"
        15: .line 228
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 231
      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.PBECipherCore.salt:[B
        17: .line 233
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            arraylength
            bipush 8
            if_icmpeq 21
        18: .line 234
            new java.security.InvalidAlgorithmParameterException
            dup
        19: .line 235
            ldc "Salt must be 8 bytes long"
        20: .line 234
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        21: .line 237
      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.PBECipherCore.iCount:I
        22: .line 238
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.iCount:I
            ifgt 26
        23: .line 239
            new java.security.InvalidAlgorithmParameterException
            dup
        24: .line 240
            ldc "IterationCount must be a positive number"
        25: .line 239
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
        26: .line 244
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* key */
            invokevirtual com.sun.crypto.provider.PBECipherCore.deriveCipherKey:(Ljava/security/Key;)[B
            astore 5 /* derivedKey */
        start local 5 // byte[] derivedKey
        27: .line 246
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 5 /* derivedKey */
            iconst_0
        28: .line 247
            aload 5 /* derivedKey */
            arraylength
            bipush 8
            isub
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.algo:Ljava/lang/String;
        29: .line 246
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BIILjava/lang/String;)V
            astore 6 /* cipherKey */
        start local 6 // javax.crypto.spec.SecretKeySpec cipherKey
        30: .line 249
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 5 /* derivedKey */
        31: .line 250
            aload 5 /* derivedKey */
            arraylength
            bipush 8
            isub
        32: .line 251
            bipush 8
        33: .line 249
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([BII)V
            astore 7 /* ivSpec */
        start local 7 // javax.crypto.spec.IvParameterSpec ivSpec
        34: .line 253
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            iload 1 /* opmode */
            aload 6 /* cipherKey */
            aload 7 /* ivSpec */
            aload 4 /* random */
            invokevirtual com.sun.crypto.provider.CipherCore.init:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
        35: .line 254
            return
        end local 7 // javax.crypto.spec.IvParameterSpec ivSpec
        end local 6 // javax.crypto.spec.SecretKeySpec cipherKey
        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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   36     0        this  Lcom/sun/crypto/provider/PBECipherCore;
            0   36     1      opmode  I
            0   36     2         key  Ljava/security/Key;
            0   36     3      params  Ljava/security/spec/AlgorithmParameterSpec;
            0   36     4      random  Ljava/security/SecureRandom;
           27   36     5  derivedKey  [B
           30   36     6   cipherKey  Ljavax/crypto/spec/SecretKeySpec;
           34   36     7      ivSpec  Ljavax/crypto/spec/IvParameterSpec;
    Exceptions:
      throws java.security.InvalidKeyException, java.security.InvalidAlgorithmParameterException
    MethodParameters:
        Name  Flags
      opmode  
      key     
      params  
      random  

  private byte[] deriveCipherKey(java.security.Key);
    descriptor: (Ljava/security/Key;)[B
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=7, args_size=2
        start local 0 // com.sun.crypto.provider.PBECipherCore this
        start local 1 // java.security.Key key
         0: .line 258
            aconst_null
            astore 2 /* result */
        start local 2 // byte[] result
         1: .line 259
            aload 1 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            astore 3 /* passwdBytes */
        start local 3 // byte[] passwdBytes
         2: .line 261
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.algo:Ljava/lang/String;
            ldc "DES"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 17
         3: .line 263
            aload 3 /* passwdBytes */
            arraylength
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            arraylength
            invokestatic com.sun.crypto.provider.CipherCore.addExact:(II)I
            newarray 8
            astore 4 /* concat */
        start local 4 // byte[] concat
         4: .line 264
            aload 3 /* passwdBytes */
            iconst_0
            aload 4 /* concat */
            iconst_0
            aload 3 /* passwdBytes */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         5: .line 265
            aload 3 /* passwdBytes */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
         6: .line 266
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iconst_0
            aload 4 /* concat */
            aload 3 /* passwdBytes */
            arraylength
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         7: .line 269
            aload 4 /* concat */
            astore 5 /* toBeHashed */
        start local 5 // byte[] toBeHashed
         8: .line 270
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         9: goto 13
        10: .line 271
      StackMap locals: com.sun.crypto.provider.PBECipherCore java.security.Key byte[] byte[] byte[] byte[] int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.md:Ljava/security/MessageDigest;
            aload 5 /* toBeHashed */
            invokevirtual java.security.MessageDigest.update:([B)V
        11: .line 272
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.md:Ljava/security/MessageDigest;
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 5 /* toBeHashed */
        12: .line 270
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        13: iload 6 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.iCount:I
            if_icmplt 10
        end local 6 // int i
        14: .line 274
            aload 4 /* concat */
            iconst_0
            invokestatic java.util.Arrays.fill:([BB)V
        15: .line 275
            aload 5 /* toBeHashed */
            astore 2 /* result */
        end local 5 // byte[] toBeHashed
        end local 4 // byte[] concat
        16: .line 276
            goto 50
      StackMap locals:
      StackMap stack:
        17: aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.algo:Ljava/lang/String;
            ldc "DESede"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 50
        18: .line 279
            iconst_0
            istore 4 /* i */
        start local 4 // int i
        19: goto 23
        20: .line 280
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iload 4 /* i */
            baload
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iload 4 /* i */
            iconst_4
            iadd
            baload
            if_icmpeq 22
        21: .line 281
            goto 24
        22: .line 279
      StackMap locals:
      StackMap stack:
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
        23: iload 4 /* i */
            iconst_4
            if_icmplt 20
        24: .line 283
      StackMap locals:
      StackMap stack:
            iload 4 /* i */
            iconst_4
            if_icmpne 31
        25: .line 284
            iconst_0
            istore 4 /* i */
            goto 30
        26: .line 285
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iload 4 /* i */
            baload
            istore 5 /* tmp */
        start local 5 // byte tmp
        27: .line 286
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iload 4 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iconst_3
            iload 4 /* i */
            isub
            baload
            bastore
        28: .line 287
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iconst_3
            iload 4 /* i */
            isub
            iload 5 /* tmp */
            bastore
        end local 5 // byte tmp
        29: .line 284
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
        30: iload 4 /* i */
            iconst_2
            if_icmplt 26
        31: .line 299
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 5 /* toBeHashed */
        start local 5 // byte[] toBeHashed
        32: .line 300
            bipush 32
            newarray 8
            astore 2 /* result */
        33: .line 302
            iconst_0
            istore 4 /* i */
            goto 49
        34: .line 303
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            arraylength
            iconst_2
            idiv
            newarray 8
            astore 5 /* toBeHashed */
        35: .line 304
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            iload 4 /* i */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.salt:[B
            arraylength
            iconst_2
            idiv
            imul
            aload 5 /* toBeHashed */
            iconst_0
        36: .line 305
            aload 5 /* toBeHashed */
            arraylength
        37: .line 304
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        38: .line 306
            iconst_0
            istore 6 /* j */
        start local 6 // int j
        39: goto 44
        40: .line 307
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.md:Ljava/security/MessageDigest;
            aload 5 /* toBeHashed */
            invokevirtual java.security.MessageDigest.update:([B)V
        41: .line 308
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.md:Ljava/security/MessageDigest;
            aload 3 /* passwdBytes */
            invokevirtual java.security.MessageDigest.update:([B)V
        42: .line 309
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.md:Ljava/security/MessageDigest;
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 5 /* toBeHashed */
        43: .line 306
            iinc 6 /* j */ 1
      StackMap locals:
      StackMap stack:
        44: iload 6 /* j */
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.iCount:I
            if_icmplt 40
        end local 6 // int j
        45: .line 311
            aload 5 /* toBeHashed */
            iconst_0
            aload 2 /* result */
            iload 4 /* i */
            bipush 16
            imul
        46: .line 312
            aload 5 /* toBeHashed */
            arraylength
        47: .line 311
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        48: .line 302
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
        49: iload 4 /* i */
            iconst_2
            if_icmplt 34
        end local 5 // byte[] toBeHashed
        end local 4 // int i
        50: .line 315
      StackMap locals:
      StackMap stack:
            aload 2 /* result */
            areturn
        end local 3 // byte[] passwdBytes
        end local 2 // byte[] result
        end local 1 // java.security.Key key
        end local 0 // com.sun.crypto.provider.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   51     0         this  Lcom/sun/crypto/provider/PBECipherCore;
            0   51     1          key  Ljava/security/Key;
            1   51     2       result  [B
            2   51     3  passwdBytes  [B
            4   16     4       concat  [B
            8   16     5   toBeHashed  [B
            9   14     6            i  I
           19   50     4            i  I
           27   29     5          tmp  B
           32   50     5   toBeHashed  [B
           39   45     6            j  I
    MethodParameters:
      Name  Flags
      key   

  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.PBECipherCore 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 321
            aconst_null
            astore 5 /* pbeSpec */
        start local 5 // javax.crypto.spec.PBEParameterSpec pbeSpec
         1: .line 322
            aload 3 /* params */
            ifnull 6
         2: .line 324
            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 325
            goto 6
      StackMap locals: com.sun.crypto.provider.PBECipherCore int java.security.Key java.security.AlgorithmParameters java.security.SecureRandom javax.crypto.spec.PBEParameterSpec
      StackMap stack: java.security.spec.InvalidParameterSpecException
         4: pop
         5: .line 326
            new java.security.InvalidAlgorithmParameterException
            dup
            ldc "Wrong parameter type: PBE expected"
            invokespecial java.security.InvalidAlgorithmParameterException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 331
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* opmode */
            aload 2 /* key */
            aload 5 /* pbeSpec */
            aload 4 /* random */
            invokevirtual com.sun.crypto.provider.PBECipherCore.init:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
         7: .line 332
            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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore this
        start local 1 // byte[] input
        start local 2 // int inputOffset
        start local 3 // int inputLen
         0: .line 352
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore 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 381
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* input */
            iload 2 /* inputOffset */
            iload 3 /* inputLen */
         1: .line 382
            aload 4 /* output */
            iload 5 /* outputOffset */
         2: .line 381
            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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0          this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore this
        start local 1 // byte[] input
        start local 2 // int inputOffset
        start local 3 // int inputLen
         0: .line 416
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Lcom/sun/crypto/provider/PBECipherCore;
            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.PBECipherCore 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 458
            aload 0 /* this */
            getfield com.sun.crypto.provider.PBECipherCore.cipher:Lcom/sun/crypto/provider/CipherCore;
            aload 1 /* input */
            iload 2 /* inputOffset */
            iload 3 /* inputLen */
         1: .line 459
            aload 4 /* output */
            iload 5 /* outputOffset */
         2: .line 458
            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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    3     0          this  Lcom/sun/crypto/provider/PBECipherCore;
            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=4, args_size=2
        start local 0 // com.sun.crypto.provider.PBECipherCore this
        start local 1 // java.security.Key key
         0: .line 480
            aconst_null
            astore 2 /* result */
        start local 2 // byte[] result
         1: .line 483
            aload 1 /* key */
            invokeinterface java.security.Key.getEncoded:()[B
            astore 3 /* encodedKey */
        start local 3 // byte[] encodedKey
         2: .line 484
            aload 3 /* encodedKey */
            ifnull 3
            aload 3 /* encodedKey */
            arraylength
            ifne 4
         3: .line 485
      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
         4: .line 489
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* encodedKey */
            iconst_0
            aload 3 /* encodedKey */
            arraylength
            invokevirtual com.sun.crypto.provider.PBECipherCore.doFinal:([BII)[B
            astore 2 /* result */
        end local 3 // byte[] encodedKey
         5: .line 490
            goto 7
      StackMap locals: com.sun.crypto.provider.PBECipherCore java.security.Key byte[]
      StackMap stack: javax.crypto.BadPaddingException
         6: pop
         7: .line 494
      StackMap locals:
      StackMap stack:
            aload 2 /* result */
            areturn
        end local 2 // byte[] result
        end local 1 // java.security.Key key
        end local 0 // com.sun.crypto.provider.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    8     0        this  Lcom/sun/crypto/provider/PBECipherCore;
            0    8     1         key  Ljava/security/Key;
            1    8     2      result  [B
            2    5     3  encodedKey  [B
      Exception table:
        from    to  target  type
           1     5       6  Class javax.crypto.BadPaddingException
    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.PBECipherCore this
        start local 1 // byte[] wrappedKey
        start local 2 // java.lang.String wrappedKeyAlgorithm
        start local 3 // int wrappedKeyType
         0: .line 524
            aload 0 /* this */
            aload 1 /* wrappedKey */
            iconst_0
            aload 1 /* wrappedKey */
            arraylength
            invokevirtual com.sun.crypto.provider.PBECipherCore.doFinal:([BII)[B
            astore 4 /* encodedKey */
        start local 4 // byte[] encodedKey
         1: .line 525
            goto 6
        end local 4 // byte[] encodedKey
      StackMap locals:
      StackMap stack: javax.crypto.BadPaddingException
         2: pop
         3: .line 526
            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 528
      StackMap locals:
      StackMap stack: javax.crypto.IllegalBlockSizeException
            pop
         5: .line 529
            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 532
      StackMap locals: byte[]
      StackMap stack:
            aload 4 /* encodedKey */
            aload 2 /* wrappedKeyAlgorithm */
         7: .line 533
            iload 3 /* wrappedKeyType */
         8: .line 532
            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.PBECipherCore this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    9     0                 this  Lcom/sun/crypto/provider/PBECipherCore;
            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: "PBECipherCore.java"