final class org.bouncycastle.openssl.PEMUtilities
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: org.bouncycastle.openssl.PEMUtilities
  super_class: java.lang.Object
{
  private static final java.util.Map KEYSIZES;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.Set PKCS5_SCHEME_1;
    descriptor: Ljava/util/Set;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.Set PKCS5_SCHEME_2;
    descriptor: Ljava/util/Set;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=0, args_size=0
         0: .line 29
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putstatic org.bouncycastle.openssl.PEMUtilities.KEYSIZES:Ljava/util/Map;
         1: .line 30
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
         2: .line 31
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            putstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_2:Ljava/util/Set;
         3: .line 35
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         4: .line 36
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         5: .line 37
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         6: .line 38
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         7: .line 39
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         8: .line 40
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.pbeWithSHA1AndRC2_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
         9: .line 42
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_2:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.id_PBES2:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        10: .line 43
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_2:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.des_EDE3_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        11: .line 44
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_2:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_aes128_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        12: .line 45
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_2:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_aes192_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        13: .line 46
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_2:Ljava/util/Set;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_aes256_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
            pop
        14: .line 48
            getstatic org.bouncycastle.openssl.PEMUtilities.KEYSIZES:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.des_EDE3_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            new java.lang.Integer
            dup
            sipush 192
            invokespecial java.lang.Integer.<init>:(I)V
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        15: .line 49
            getstatic org.bouncycastle.openssl.PEMUtilities.KEYSIZES:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_aes128_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            new java.lang.Integer
            dup
            sipush 128
            invokespecial java.lang.Integer.<init>:(I)V
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        16: .line 50
            getstatic org.bouncycastle.openssl.PEMUtilities.KEYSIZES:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_aes192_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            new java.lang.Integer
            dup
            sipush 192
            invokespecial java.lang.Integer.<init>:(I)V
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        17: .line 51
            getstatic org.bouncycastle.openssl.PEMUtilities.KEYSIZES:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_aes256_CBC:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            new java.lang.Integer
            dup
            sipush 256
            invokespecial java.lang.Integer.<init>:(I)V
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        18: .line 52
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.openssl.PEMUtilities this
         0: .line 27
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.bouncycastle.openssl.PEMUtilities this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/openssl/PEMUtilities;

  static int getKeySize(java.lang.String);
    descriptor: (Ljava/lang/String;)I
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // java.lang.String algorithm
         0: .line 56
            getstatic org.bouncycastle.openssl.PEMUtilities.KEYSIZES:Ljava/util/Map;
            aload 0 /* algorithm */
            invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
            ifne 2
         1: .line 58
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "no key size for algorithm: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* algorithm */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 61
      StackMap locals:
      StackMap stack:
            getstatic org.bouncycastle.openssl.PEMUtilities.KEYSIZES:Ljava/util/Map;
            aload 0 /* algorithm */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            ireturn
        end local 0 // java.lang.String algorithm
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0  algorithm  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      algorithm  

  static boolean isPKCS5Scheme1(org.bouncycastle.asn1.DERObjectIdentifier);
    descriptor: (Lorg/bouncycastle/asn1/DERObjectIdentifier;)Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.bouncycastle.asn1.DERObjectIdentifier algOid
         0: .line 66
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_1:Ljava/util/Set;
            aload 0 /* algOid */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ireturn
        end local 0 // org.bouncycastle.asn1.DERObjectIdentifier algOid
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  algOid  Lorg/bouncycastle/asn1/DERObjectIdentifier;
    MethodParameters:
        Name  Flags
      algOid  

  static boolean isPKCS5Scheme2(org.bouncycastle.asn1.DERObjectIdentifier);
    descriptor: (Lorg/bouncycastle/asn1/DERObjectIdentifier;)Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.bouncycastle.asn1.DERObjectIdentifier algOid
         0: .line 71
            getstatic org.bouncycastle.openssl.PEMUtilities.PKCS5_SCHEME_2:Ljava/util/Set;
            aload 0 /* algOid */
            invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
            ireturn
        end local 0 // org.bouncycastle.asn1.DERObjectIdentifier algOid
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  algOid  Lorg/bouncycastle/asn1/DERObjectIdentifier;
    MethodParameters:
        Name  Flags
      algOid  

  static boolean isPKCS12(org.bouncycastle.asn1.DERObjectIdentifier);
    descriptor: (Lorg/bouncycastle/asn1/DERObjectIdentifier;)Z
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.bouncycastle.asn1.DERObjectIdentifier algOid
         0: .line 76
            aload 0 /* algOid */
            invokevirtual org.bouncycastle.asn1.DERObjectIdentifier.getId:()Ljava/lang/String;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.pkcs_12PbeIds:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ireturn
        end local 0 // org.bouncycastle.asn1.DERObjectIdentifier algOid
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0  algOid  Lorg/bouncycastle/asn1/DERObjectIdentifier;
    MethodParameters:
        Name  Flags
      algOid  

  static javax.crypto.SecretKey generateSecretKeyForPKCS5Scheme2(java.lang.String, char[], byte[], int);
    descriptor: (Ljava/lang/String;[C[BI)Ljavax/crypto/SecretKey;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=5, args_size=4
        start local 0 // java.lang.String algorithm
        start local 1 // char[] password
        start local 2 // byte[] salt
        start local 3 // int iterationCount
         0: .line 81
            new org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator
            dup
            invokespecial org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator.<init>:()V
            astore 4 /* generator */
        start local 4 // org.bouncycastle.crypto.PBEParametersGenerator generator
         1: .line 83
            aload 4 /* generator */
         2: .line 84
            aload 1 /* password */
            invokestatic org.bouncycastle.crypto.PBEParametersGenerator.PKCS5PasswordToBytes:([C)[B
         3: .line 85
            aload 2 /* salt */
         4: .line 86
            iload 3 /* iterationCount */
         5: .line 83
            invokevirtual org.bouncycastle.crypto.PBEParametersGenerator.init:([B[BI)V
         6: .line 88
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 4 /* generator */
            aload 0 /* algorithm */
            invokestatic org.bouncycastle.openssl.PEMUtilities.getKeySize:(Ljava/lang/String;)I
            invokevirtual org.bouncycastle.crypto.PBEParametersGenerator.generateDerivedParameters:(I)Lorg/bouncycastle/crypto/CipherParameters;
            checkcast org.bouncycastle.crypto.params.KeyParameter
            invokevirtual org.bouncycastle.crypto.params.KeyParameter.getKey:()[B
            aload 0 /* algorithm */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            areturn
        end local 4 // org.bouncycastle.crypto.PBEParametersGenerator generator
        end local 3 // int iterationCount
        end local 2 // byte[] salt
        end local 1 // char[] password
        end local 0 // java.lang.String algorithm
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    7     0       algorithm  Ljava/lang/String;
            0    7     1        password  [C
            0    7     2            salt  [B
            0    7     3  iterationCount  I
            1    7     4       generator  Lorg/bouncycastle/crypto/PBEParametersGenerator;
    MethodParameters:
                Name  Flags
      algorithm       
      password        
      salt            
      iterationCount  

  static byte[] crypt(boolean, java.lang.String, byte[], char[], java.lang.String, byte[]);
    descriptor: (ZLjava/lang/String;[B[CLjava/lang/String;[B)[B
    flags: (0x0008) ACC_STATIC
    Code:
      stack=6, locals=7, args_size=6
        start local 0 // boolean encrypt
        start local 1 // java.lang.String provider
        start local 2 // byte[] bytes
        start local 3 // char[] password
        start local 4 // java.lang.String dekAlgName
        start local 5 // byte[] iv
         0: .line 100
            aconst_null
            astore 6 /* prov */
        start local 6 // java.security.Provider prov
         1: .line 101
            aload 1 /* provider */
            ifnull 5
         2: .line 103
            aload 1 /* provider */
            invokestatic java.security.Security.getProvider:(Ljava/lang/String;)Ljava/security/Provider;
            astore 6 /* prov */
         3: .line 104
            aload 6 /* prov */
            ifnonnull 5
         4: .line 106
            new org.bouncycastle.openssl.EncryptionException
            dup
            new java.lang.StringBuilder
            dup
            ldc "cannot find provider: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* provider */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.bouncycastle.openssl.EncryptionException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 110
      StackMap locals: java.security.Provider
      StackMap stack:
            iload 0 /* encrypt */
            aload 6 /* prov */
            aload 2 /* bytes */
            aload 3 /* password */
            aload 4 /* dekAlgName */
            aload 5 /* iv */
            invokestatic org.bouncycastle.openssl.PEMUtilities.crypt:(ZLjava/security/Provider;[B[CLjava/lang/String;[B)[B
            areturn
        end local 6 // java.security.Provider prov
        end local 5 // byte[] iv
        end local 4 // java.lang.String dekAlgName
        end local 3 // char[] password
        end local 2 // byte[] bytes
        end local 1 // java.lang.String provider
        end local 0 // boolean encrypt
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0     encrypt  Z
            0    6     1    provider  Ljava/lang/String;
            0    6     2       bytes  [B
            0    6     3    password  [C
            0    6     4  dekAlgName  Ljava/lang/String;
            0    6     5          iv  [B
            1    6     6        prov  Ljava/security/Provider;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
            Name  Flags
      encrypt     
      provider    
      bytes       
      password    
      dekAlgName  
      iv          

  static byte[] crypt(boolean, java.security.Provider, byte[], char[], java.lang.String, byte[]);
    descriptor: (ZLjava/security/Provider;[B[CLjava/lang/String;[B)[B
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=14, args_size=6
        start local 0 // boolean encrypt
        start local 1 // java.security.Provider provider
        start local 2 // byte[] bytes
        start local 3 // char[] password
        start local 4 // java.lang.String dekAlgName
        start local 5 // byte[] iv
         0: .line 122
            new javax.crypto.spec.IvParameterSpec
            dup
            aload 5 /* iv */
            invokespecial javax.crypto.spec.IvParameterSpec.<init>:([B)V
            astore 6 /* paramSpec */
        start local 6 // java.security.spec.AlgorithmParameterSpec paramSpec
         1: .line 124
            ldc "CBC"
            astore 8 /* blockMode */
        start local 8 // java.lang.String blockMode
         2: .line 125
            ldc "PKCS5Padding"
            astore 9 /* padding */
        start local 9 // java.lang.String padding
         3: .line 129
            aload 4 /* dekAlgName */
            ldc "-CFB"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 6
         4: .line 131
            ldc "CFB"
            astore 8 /* blockMode */
         5: .line 132
            ldc "NoPadding"
            astore 9 /* padding */
         6: .line 134
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec top java.lang.String java.lang.String
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "-ECB"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifne 9
         7: .line 135
            ldc "DES-EDE"
            aload 4 /* dekAlgName */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 9
         8: .line 136
            ldc "DES-EDE3"
            aload 4 /* dekAlgName */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 11
         9: .line 140
      StackMap locals:
      StackMap stack:
            ldc "ECB"
            astore 8 /* blockMode */
        10: .line 141
            aconst_null
            astore 6 /* paramSpec */
        11: .line 143
      StackMap locals:
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "-OFB"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 14
        12: .line 145
            ldc "OFB"
            astore 8 /* blockMode */
        13: .line 146
            ldc "NoPadding"
            astore 9 /* padding */
        14: .line 151
      StackMap locals:
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "DES-EDE"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 21
        15: .line 153
            ldc "DESede"
            astore 7 /* alg */
        start local 7 // java.lang.String alg
        16: .line 156
            aload 4 /* dekAlgName */
            ldc "DES-EDE3"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 17
            iconst_0
            goto 18
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec java.lang.String java.lang.String java.lang.String
      StackMap stack:
        17: iconst_1
      StackMap locals:
      StackMap stack: int
        18: istore 11 /* des2 */
        start local 11 // boolean des2
        19: .line 157
            aload 3 /* password */
            aload 7 /* alg */
            bipush 24
            aload 5 /* iv */
            iload 11 /* des2 */
            invokestatic org.bouncycastle.openssl.PEMUtilities.getKey:([CLjava/lang/String;I[BZ)Ljavax/crypto/SecretKey;
            astore 10 /* sKey */
        end local 11 // boolean des2
        start local 10 // java.security.Key sKey
        20: .line 158
            goto 62
        end local 10 // java.security.Key sKey
        end local 7 // java.lang.String alg
        21: .line 159
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec top java.lang.String java.lang.String
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "DES-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 25
        22: .line 161
            ldc "DES"
            astore 7 /* alg */
        start local 7 // java.lang.String alg
        23: .line 162
            aload 3 /* password */
            aload 7 /* alg */
            bipush 8
            aload 5 /* iv */
            invokestatic org.bouncycastle.openssl.PEMUtilities.getKey:([CLjava/lang/String;I[B)Ljavax/crypto/SecretKey;
            astore 10 /* sKey */
        start local 10 // java.security.Key sKey
        24: .line 163
            goto 62
        end local 10 // java.security.Key sKey
        end local 7 // java.lang.String alg
        25: .line 164
      StackMap locals:
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "BF-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 29
        26: .line 166
            ldc "Blowfish"
            astore 7 /* alg */
        start local 7 // java.lang.String alg
        27: .line 167
            aload 3 /* password */
            aload 7 /* alg */
            bipush 16
            aload 5 /* iv */
            invokestatic org.bouncycastle.openssl.PEMUtilities.getKey:([CLjava/lang/String;I[B)Ljavax/crypto/SecretKey;
            astore 10 /* sKey */
        start local 10 // java.security.Key sKey
        28: .line 168
            goto 62
        end local 10 // java.security.Key sKey
        end local 7 // java.lang.String alg
        29: .line 169
      StackMap locals:
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "RC2-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 43
        30: .line 171
            ldc "RC2"
            astore 7 /* alg */
        start local 7 // java.lang.String alg
        31: .line 172
            sipush 128
            istore 11 /* keyBits */
        start local 11 // int keyBits
        32: .line 173
            aload 4 /* dekAlgName */
            ldc "RC2-40-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 35
        33: .line 175
            bipush 40
            istore 11 /* keyBits */
        34: .line 176
            goto 37
        35: .line 177
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec java.lang.String java.lang.String java.lang.String top int
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "RC2-64-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 37
        36: .line 179
            bipush 64
            istore 11 /* keyBits */
        37: .line 181
      StackMap locals:
      StackMap stack:
            aload 3 /* password */
            aload 7 /* alg */
            iload 11 /* keyBits */
            bipush 8
            idiv
            aload 5 /* iv */
            invokestatic org.bouncycastle.openssl.PEMUtilities.getKey:([CLjava/lang/String;I[B)Ljavax/crypto/SecretKey;
            astore 10 /* sKey */
        start local 10 // java.security.Key sKey
        38: .line 182
            aload 6 /* paramSpec */
            ifnonnull 41
        39: .line 184
            new javax.crypto.spec.RC2ParameterSpec
            dup
            iload 11 /* keyBits */
            invokespecial javax.crypto.spec.RC2ParameterSpec.<init>:(I)V
            astore 6 /* paramSpec */
        40: .line 185
            goto 62
        41: .line 188
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec java.lang.String java.lang.String java.lang.String java.security.Key int
      StackMap stack:
            new javax.crypto.spec.RC2ParameterSpec
            dup
            iload 11 /* keyBits */
            aload 5 /* iv */
            invokespecial javax.crypto.spec.RC2ParameterSpec.<init>:(I[B)V
            astore 6 /* paramSpec */
        end local 11 // int keyBits
        42: .line 190
            goto 62
        end local 10 // java.security.Key sKey
        end local 7 // java.lang.String alg
        43: .line 191
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec top java.lang.String java.lang.String
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "AES-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 61
        44: .line 193
            ldc "AES"
            astore 7 /* alg */
        start local 7 // java.lang.String alg
        45: .line 194
            aload 5 /* iv */
            astore 11 /* salt */
        start local 11 // byte[] salt
        46: .line 195
            aload 11 /* salt */
            arraylength
            bipush 8
            if_icmple 49
        47: .line 197
            bipush 8
            newarray 8
            astore 11 /* salt */
        48: .line 198
            aload 5 /* iv */
            iconst_0
            aload 11 /* salt */
            iconst_0
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        49: .line 202
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec java.lang.String java.lang.String java.lang.String top byte[]
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "AES-128-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 52
        50: .line 204
            sipush 128
            istore 12 /* keyBits */
        start local 12 // int keyBits
        51: .line 205
            goto 59
        end local 12 // int keyBits
        52: .line 206
      StackMap locals:
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "AES-192-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 55
        53: .line 208
            sipush 192
            istore 12 /* keyBits */
        start local 12 // int keyBits
        54: .line 209
            goto 59
        end local 12 // int keyBits
        55: .line 210
      StackMap locals:
      StackMap stack:
            aload 4 /* dekAlgName */
            ldc "AES-256-"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 58
        56: .line 212
            sipush 256
            istore 12 /* keyBits */
        start local 12 // int keyBits
        57: .line 213
            goto 59
        end local 12 // int keyBits
        58: .line 216
      StackMap locals:
      StackMap stack:
            new org.bouncycastle.openssl.EncryptionException
            dup
            ldc "unknown AES encryption with private key"
            invokespecial org.bouncycastle.openssl.EncryptionException.<init>:(Ljava/lang/String;)V
            athrow
        start local 12 // int keyBits
        59: .line 218
      StackMap locals: int
      StackMap stack:
            aload 3 /* password */
            ldc "AES"
            iload 12 /* keyBits */
            bipush 8
            idiv
            aload 11 /* salt */
            invokestatic org.bouncycastle.openssl.PEMUtilities.getKey:([CLjava/lang/String;I[B)Ljavax/crypto/SecretKey;
            astore 10 /* sKey */
        end local 12 // int keyBits
        end local 11 // byte[] salt
        start local 10 // java.security.Key sKey
        60: .line 219
            goto 62
        end local 10 // java.security.Key sKey
        end local 7 // java.lang.String alg
        61: .line 222
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec top java.lang.String java.lang.String
      StackMap stack:
            new org.bouncycastle.openssl.EncryptionException
            dup
            ldc "unknown encryption with private key"
            invokespecial org.bouncycastle.openssl.EncryptionException.<init>:(Ljava/lang/String;)V
            athrow
        start local 7 // java.lang.String alg
        start local 10 // java.security.Key sKey
        62: .line 225
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec java.lang.String java.lang.String java.lang.String java.security.Key
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 7 /* alg */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "/"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 8 /* blockMode */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "/"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 9 /* padding */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 11 /* transformation */
        start local 11 // java.lang.String transformation
        63: .line 229
            aload 11 /* transformation */
            aload 1 /* provider */
            invokestatic javax.crypto.Cipher.getInstance:(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher;
            astore 12 /* c */
        start local 12 // javax.crypto.Cipher c
        64: .line 230
            iload 0 /* encrypt */
            ifeq 65
            iconst_1
            goto 66
      StackMap locals: java.lang.String javax.crypto.Cipher
      StackMap stack:
        65: iconst_2
      StackMap locals:
      StackMap stack: int
        66: istore 13 /* mode */
        start local 13 // int mode
        67: .line 232
            aload 6 /* paramSpec */
            ifnonnull 70
        68: .line 234
            aload 12 /* c */
            iload 13 /* mode */
            aload 10 /* sKey */
            invokevirtual javax.crypto.Cipher.init:(ILjava/security/Key;)V
        69: .line 235
            goto 71
        70: .line 238
      StackMap locals: int
      StackMap stack:
            aload 12 /* c */
            iload 13 /* mode */
            aload 10 /* sKey */
            aload 6 /* paramSpec */
            invokevirtual javax.crypto.Cipher.init:(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
        71: .line 240
      StackMap locals:
      StackMap stack:
            aload 12 /* c */
            aload 2 /* bytes */
            invokevirtual javax.crypto.Cipher.doFinal:([B)[B
        72: areturn
        end local 13 // int mode
        end local 12 // javax.crypto.Cipher c
        73: .line 242
      StackMap locals: int java.security.Provider byte[] char[] java.lang.String byte[] java.security.spec.AlgorithmParameterSpec java.lang.String java.lang.String java.lang.String java.security.Key java.lang.String
      StackMap stack: java.lang.Exception
            astore 12 /* e */
        start local 12 // java.lang.Exception e
        74: .line 244
            new org.bouncycastle.openssl.EncryptionException
            dup
            ldc "exception using cipher - please check password and data."
            aload 12 /* e */
            invokespecial org.bouncycastle.openssl.EncryptionException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 12 // java.lang.Exception e
        end local 11 // java.lang.String transformation
        end local 10 // java.security.Key sKey
        end local 9 // java.lang.String padding
        end local 8 // java.lang.String blockMode
        end local 7 // java.lang.String alg
        end local 6 // java.security.spec.AlgorithmParameterSpec paramSpec
        end local 5 // byte[] iv
        end local 4 // java.lang.String dekAlgName
        end local 3 // char[] password
        end local 2 // byte[] bytes
        end local 1 // java.security.Provider provider
        end local 0 // boolean encrypt
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   75     0         encrypt  Z
            0   75     1        provider  Ljava/security/Provider;
            0   75     2           bytes  [B
            0   75     3        password  [C
            0   75     4      dekAlgName  Ljava/lang/String;
            0   75     5              iv  [B
            1   75     6       paramSpec  Ljava/security/spec/AlgorithmParameterSpec;
           16   21     7             alg  Ljava/lang/String;
           23   25     7             alg  Ljava/lang/String;
           27   29     7             alg  Ljava/lang/String;
           31   43     7             alg  Ljava/lang/String;
           45   61     7             alg  Ljava/lang/String;
           62   75     7             alg  Ljava/lang/String;
            2   75     8       blockMode  Ljava/lang/String;
            3   75     9         padding  Ljava/lang/String;
           20   21    10            sKey  Ljava/security/Key;
           24   25    10            sKey  Ljava/security/Key;
           28   29    10            sKey  Ljava/security/Key;
           38   43    10            sKey  Ljava/security/Key;
           60   61    10            sKey  Ljava/security/Key;
           62   75    10            sKey  Ljava/security/Key;
           19   20    11            des2  Z
           32   42    11         keyBits  I
           46   60    11            salt  [B
           51   52    12         keyBits  I
           54   55    12         keyBits  I
           57   58    12         keyBits  I
           59   60    12         keyBits  I
           63   75    11  transformation  Ljava/lang/String;
           64   73    12               c  Ljavax/crypto/Cipher;
           67   73    13            mode  I
           74   75    12               e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
          63    72      73  Class java.lang.Exception
    Exceptions:
      throws java.io.IOException
    MethodParameters:
            Name  Flags
      encrypt     
      provider    
      bytes       
      password    
      dekAlgName  
      iv          

  private static javax.crypto.SecretKey getKey(char[], java.lang.String, int, byte[]);
    descriptor: ([CLjava/lang/String;I[B)Ljavax/crypto/SecretKey;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // char[] password
        start local 1 // java.lang.String algorithm
        start local 2 // int keyLength
        start local 3 // byte[] salt
         0: .line 254
            aload 0 /* password */
            aload 1 /* algorithm */
            iload 2 /* keyLength */
            aload 3 /* salt */
            iconst_0
            invokestatic org.bouncycastle.openssl.PEMUtilities.getKey:([CLjava/lang/String;I[BZ)Ljavax/crypto/SecretKey;
            areturn
        end local 3 // byte[] salt
        end local 2 // int keyLength
        end local 1 // java.lang.String algorithm
        end local 0 // char[] password
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0   password  [C
            0    1     1  algorithm  Ljava/lang/String;
            0    1     2  keyLength  I
            0    1     3       salt  [B
    MethodParameters:
           Name  Flags
      password   
      algorithm  
      keyLength  
      salt       

  private static javax.crypto.SecretKey getKey(char[], java.lang.String, int, byte[], boolean);
    descriptor: ([CLjava/lang/String;I[BZ)Ljavax/crypto/SecretKey;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=8, args_size=5
        start local 0 // char[] password
        start local 1 // java.lang.String algorithm
        start local 2 // int keyLength
        start local 3 // byte[] salt
        start local 4 // boolean des2
         0: .line 264
            new org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator
            dup
            invokespecial org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator.<init>:()V
            astore 5 /* pGen */
        start local 5 // org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator pGen
         1: .line 266
            aload 5 /* pGen */
            aload 0 /* password */
            invokestatic org.bouncycastle.crypto.PBEParametersGenerator.PKCS5PasswordToBytes:([C)[B
            aload 3 /* salt */
            invokevirtual org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator.init:([B[B)V
         2: .line 269
            aload 5 /* pGen */
            iload 2 /* keyLength */
            bipush 8
            imul
            invokevirtual org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator.generateDerivedParameters:(I)Lorg/bouncycastle/crypto/CipherParameters;
            checkcast org.bouncycastle.crypto.params.KeyParameter
            astore 6 /* keyParam */
        start local 6 // org.bouncycastle.crypto.params.KeyParameter keyParam
         3: .line 270
            aload 6 /* keyParam */
            invokevirtual org.bouncycastle.crypto.params.KeyParameter.getKey:()[B
            astore 7 /* key */
        start local 7 // byte[] key
         4: .line 271
            iload 4 /* des2 */
            ifeq 6
            aload 7 /* key */
            arraylength
            bipush 24
            if_icmplt 6
         5: .line 274
            aload 7 /* key */
            iconst_0
            aload 7 /* key */
            bipush 16
            bipush 8
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         6: .line 276
      StackMap locals: org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator org.bouncycastle.crypto.params.KeyParameter byte[]
      StackMap stack:
            new javax.crypto.spec.SecretKeySpec
            dup
            aload 7 /* key */
            aload 1 /* algorithm */
            invokespecial javax.crypto.spec.SecretKeySpec.<init>:([BLjava/lang/String;)V
            areturn
        end local 7 // byte[] key
        end local 6 // org.bouncycastle.crypto.params.KeyParameter keyParam
        end local 5 // org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator pGen
        end local 4 // boolean des2
        end local 3 // byte[] salt
        end local 2 // int keyLength
        end local 1 // java.lang.String algorithm
        end local 0 // char[] password
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0   password  [C
            0    7     1  algorithm  Ljava/lang/String;
            0    7     2  keyLength  I
            0    7     3       salt  [B
            0    7     4       des2  Z
            1    7     5       pGen  Lorg/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator;
            3    7     6   keyParam  Lorg/bouncycastle/crypto/params/KeyParameter;
            4    7     7        key  [B
    MethodParameters:
           Name  Flags
      password   
      algorithm  
      keyLength  
      salt       
      des2       
}
SourceFile: "PEMUtilities.java"