public class org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore extends org.bouncycastle.jce.provider.JDKKeyStore
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore
  super_class: org.bouncycastle.jce.provider.JDKKeyStore
{
  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore this
         0: .line 904
            aload 0 /* this */
            invokespecial org.bouncycastle.jce.provider.JDKKeyStore.<init>:()V
            return
        end local 0 // org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/jce/provider/JDKKeyStore$BouncyCastleStore;

  public void engineLoad(java.io.InputStream, char[]);
    descriptor: (Ljava/io/InputStream;[C)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=14, args_size=3
        start local 0 // org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore this
        start local 1 // java.io.InputStream stream
        start local 2 // char[] password
         0: .line 912
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.table:Ljava/util/Hashtable;
            invokevirtual java.util.Hashtable.clear:()V
         1: .line 914
            aload 1 /* stream */
            ifnonnull 3
         2: .line 916
            return
         3: .line 919
      StackMap locals:
      StackMap stack:
            new java.io.DataInputStream
            dup
            aload 1 /* stream */
            invokespecial java.io.DataInputStream.<init>:(Ljava/io/InputStream;)V
            astore 3 /* dIn */
        start local 3 // java.io.DataInputStream dIn
         4: .line 920
            aload 3 /* dIn */
            invokevirtual java.io.DataInputStream.readInt:()I
            istore 4 /* version */
        start local 4 // int version
         5: .line 922
            iload 4 /* version */
            iconst_1
            if_icmpeq 8
         6: .line 924
            iload 4 /* version */
            ifeq 8
         7: .line 926
            new java.io.IOException
            dup
            ldc "Wrong version of key store."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 930
      StackMap locals: java.io.DataInputStream int
      StackMap stack:
            aload 3 /* dIn */
            invokevirtual java.io.DataInputStream.readInt:()I
            newarray 8
            astore 5 /* salt */
        start local 5 // byte[] salt
         9: .line 932
            aload 5 /* salt */
            arraylength
            bipush 20
            if_icmpeq 11
        10: .line 934
            new java.io.IOException
            dup
            ldc "Key store corrupted."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 937
      StackMap locals: byte[]
      StackMap stack:
            aload 3 /* dIn */
            aload 5 /* salt */
            invokevirtual java.io.DataInputStream.readFully:([B)V
        12: .line 939
            aload 3 /* dIn */
            invokevirtual java.io.DataInputStream.readInt:()I
            istore 6 /* iterationCount */
        start local 6 // int iterationCount
        13: .line 941
            iload 6 /* iterationCount */
            iflt 14
            iload 6 /* iterationCount */
            sipush 4096
            if_icmple 15
        14: .line 943
      StackMap locals: int
      StackMap stack:
            new java.io.IOException
            dup
            ldc "Key store corrupted."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 947
      StackMap locals:
      StackMap stack:
            iload 4 /* version */
            ifne 18
        16: .line 949
            ldc "OldPBEWithSHAAndTwofish-CBC"
            astore 7 /* cipherAlg */
        start local 7 // java.lang.String cipherAlg
        17: .line 950
            goto 19
        end local 7 // java.lang.String cipherAlg
        18: .line 953
      StackMap locals:
      StackMap stack:
            ldc "PBEWithSHAAndTwofish-CBC"
            astore 7 /* cipherAlg */
        start local 7 // java.lang.String cipherAlg
        19: .line 956
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 7 /* cipherAlg */
            iconst_2
            aload 2 /* password */
            aload 5 /* salt */
            iload 6 /* iterationCount */
            invokevirtual org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.makePBECipher:(Ljava/lang/String;I[C[BI)Ljavax/crypto/Cipher;
            astore 8 /* cipher */
        start local 8 // javax.crypto.Cipher cipher
        20: .line 957
            new javax.crypto.CipherInputStream
            dup
            aload 3 /* dIn */
            aload 8 /* cipher */
            invokespecial javax.crypto.CipherInputStream.<init>:(Ljava/io/InputStream;Ljavax/crypto/Cipher;)V
            astore 9 /* cIn */
        start local 9 // javax.crypto.CipherInputStream cIn
        21: .line 959
            new org.bouncycastle.crypto.digests.SHA1Digest
            dup
            invokespecial org.bouncycastle.crypto.digests.SHA1Digest.<init>:()V
            astore 10 /* dig */
        start local 10 // org.bouncycastle.crypto.Digest dig
        22: .line 960
            new org.bouncycastle.crypto.io.DigestInputStream
            dup
            aload 9 /* cIn */
            aload 10 /* dig */
            invokespecial org.bouncycastle.crypto.io.DigestInputStream.<init>:(Ljava/io/InputStream;Lorg/bouncycastle/crypto/Digest;)V
            astore 11 /* dgIn */
        start local 11 // org.bouncycastle.crypto.io.DigestInputStream dgIn
        23: .line 962
            aload 0 /* this */
            aload 11 /* dgIn */
            invokevirtual org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.loadStore:(Ljava/io/InputStream;)V
        24: .line 965
            aload 10 /* dig */
            invokeinterface org.bouncycastle.crypto.Digest.getDigestSize:()I
            newarray 8
            astore 12 /* hash */
        start local 12 // byte[] hash
        25: .line 966
            aload 10 /* dig */
            aload 12 /* hash */
            iconst_0
            invokeinterface org.bouncycastle.crypto.Digest.doFinal:([BI)I
            pop
        26: .line 970
            aload 10 /* dig */
            invokeinterface org.bouncycastle.crypto.Digest.getDigestSize:()I
            newarray 8
            astore 13 /* oldHash */
        start local 13 // byte[] oldHash
        27: .line 971
            aload 9 /* cIn */
            aload 13 /* oldHash */
            invokestatic org.bouncycastle.util.io.Streams.readFully:(Ljava/io/InputStream;[B)I
            pop
        28: .line 973
            aload 12 /* hash */
            aload 13 /* oldHash */
            invokestatic org.bouncycastle.util.Arrays.constantTimeAreEqual:([B[B)Z
            ifne 31
        29: .line 975
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.table:Ljava/util/Hashtable;
            invokevirtual java.util.Hashtable.clear:()V
        30: .line 976
            new java.io.IOException
            dup
            ldc "KeyStore integrity check failed."
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        31: .line 978
      StackMap locals: org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore java.io.InputStream char[] java.io.DataInputStream int byte[] int java.lang.String javax.crypto.Cipher javax.crypto.CipherInputStream org.bouncycastle.crypto.Digest org.bouncycastle.crypto.io.DigestInputStream byte[] byte[]
      StackMap stack:
            return
        end local 13 // byte[] oldHash
        end local 12 // byte[] hash
        end local 11 // org.bouncycastle.crypto.io.DigestInputStream dgIn
        end local 10 // org.bouncycastle.crypto.Digest dig
        end local 9 // javax.crypto.CipherInputStream cIn
        end local 8 // javax.crypto.Cipher cipher
        end local 7 // java.lang.String cipherAlg
        end local 6 // int iterationCount
        end local 5 // byte[] salt
        end local 4 // int version
        end local 3 // java.io.DataInputStream dIn
        end local 2 // char[] password
        end local 1 // java.io.InputStream stream
        end local 0 // org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   32     0            this  Lorg/bouncycastle/jce/provider/JDKKeyStore$BouncyCastleStore;
            0   32     1          stream  Ljava/io/InputStream;
            0   32     2        password  [C
            4   32     3             dIn  Ljava/io/DataInputStream;
            5   32     4         version  I
            9   32     5            salt  [B
           13   32     6  iterationCount  I
           17   18     7       cipherAlg  Ljava/lang/String;
           19   32     7       cipherAlg  Ljava/lang/String;
           20   32     8          cipher  Ljavax/crypto/Cipher;
           21   32     9             cIn  Ljavax/crypto/CipherInputStream;
           22   32    10             dig  Lorg/bouncycastle/crypto/Digest;
           23   32    11            dgIn  Lorg/bouncycastle/crypto/io/DigestInputStream;
           25   32    12            hash  [B
           27   32    13         oldHash  [B
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      stream    
      password  

  public void engineStore(java.io.OutputStream, char[]);
    descriptor: (Ljava/io/OutputStream;[C)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=11, args_size=3
        start local 0 // org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore this
        start local 1 // java.io.OutputStream stream
        start local 2 // char[] password
         0: .line 985
            new java.io.DataOutputStream
            dup
            aload 1 /* stream */
            invokespecial java.io.DataOutputStream.<init>:(Ljava/io/OutputStream;)V
            astore 4 /* dOut */
        start local 4 // java.io.DataOutputStream dOut
         1: .line 986
            bipush 20
            newarray 8
            astore 5 /* salt */
        start local 5 // byte[] salt
         2: .line 987
            sipush 1024
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.random:Ljava/security/SecureRandom;
            invokevirtual java.security.SecureRandom.nextInt:()I
            sipush 1023
            iand
            iadd
            istore 6 /* iterationCount */
        start local 6 // int iterationCount
         3: .line 989
            aload 0 /* this */
            getfield org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.random:Ljava/security/SecureRandom;
            aload 5 /* salt */
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
         4: .line 991
            aload 4 /* dOut */
            iconst_1
            invokevirtual java.io.DataOutputStream.writeInt:(I)V
         5: .line 992
            aload 4 /* dOut */
            aload 5 /* salt */
            arraylength
            invokevirtual java.io.DataOutputStream.writeInt:(I)V
         6: .line 993
            aload 4 /* dOut */
            aload 5 /* salt */
            invokevirtual java.io.DataOutputStream.write:([B)V
         7: .line 994
            aload 4 /* dOut */
            iload 6 /* iterationCount */
            invokevirtual java.io.DataOutputStream.writeInt:(I)V
         8: .line 996
            aload 0 /* this */
            ldc "PBEWithSHAAndTwofish-CBC"
            iconst_1
            aload 2 /* password */
            aload 5 /* salt */
            iload 6 /* iterationCount */
            invokevirtual org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.makePBECipher:(Ljava/lang/String;I[C[BI)Ljavax/crypto/Cipher;
            astore 3 /* cipher */
        start local 3 // javax.crypto.Cipher cipher
         9: .line 998
            new javax.crypto.CipherOutputStream
            dup
            aload 4 /* dOut */
            aload 3 /* cipher */
            invokespecial javax.crypto.CipherOutputStream.<init>:(Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V
            astore 7 /* cOut */
        start local 7 // javax.crypto.CipherOutputStream cOut
        10: .line 999
            new org.bouncycastle.crypto.io.DigestOutputStream
            dup
            aload 7 /* cOut */
            new org.bouncycastle.crypto.digests.SHA1Digest
            dup
            invokespecial org.bouncycastle.crypto.digests.SHA1Digest.<init>:()V
            invokespecial org.bouncycastle.crypto.io.DigestOutputStream.<init>:(Ljava/io/OutputStream;Lorg/bouncycastle/crypto/Digest;)V
            astore 8 /* dgOut */
        start local 8 // org.bouncycastle.crypto.io.DigestOutputStream dgOut
        11: .line 1001
            aload 0 /* this */
            aload 8 /* dgOut */
            invokevirtual org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore.saveStore:(Ljava/io/OutputStream;)V
        12: .line 1003
            aload 8 /* dgOut */
            invokevirtual org.bouncycastle.crypto.io.DigestOutputStream.getDigest:()Lorg/bouncycastle/crypto/Digest;
            astore 9 /* dig */
        start local 9 // org.bouncycastle.crypto.Digest dig
        13: .line 1004
            aload 9 /* dig */
            invokeinterface org.bouncycastle.crypto.Digest.getDigestSize:()I
            newarray 8
            astore 10 /* hash */
        start local 10 // byte[] hash
        14: .line 1006
            aload 9 /* dig */
            aload 10 /* hash */
            iconst_0
            invokeinterface org.bouncycastle.crypto.Digest.doFinal:([BI)I
            pop
        15: .line 1008
            aload 7 /* cOut */
            aload 10 /* hash */
            invokevirtual javax.crypto.CipherOutputStream.write:([B)V
        16: .line 1010
            aload 7 /* cOut */
            invokevirtual javax.crypto.CipherOutputStream.close:()V
        17: .line 1011
            return
        end local 10 // byte[] hash
        end local 9 // org.bouncycastle.crypto.Digest dig
        end local 8 // org.bouncycastle.crypto.io.DigestOutputStream dgOut
        end local 7 // javax.crypto.CipherOutputStream cOut
        end local 6 // int iterationCount
        end local 5 // byte[] salt
        end local 4 // java.io.DataOutputStream dOut
        end local 3 // javax.crypto.Cipher cipher
        end local 2 // char[] password
        end local 1 // java.io.OutputStream stream
        end local 0 // org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   18     0            this  Lorg/bouncycastle/jce/provider/JDKKeyStore$BouncyCastleStore;
            0   18     1          stream  Ljava/io/OutputStream;
            0   18     2        password  [C
            9   18     3          cipher  Ljavax/crypto/Cipher;
            1   18     4            dOut  Ljava/io/DataOutputStream;
            2   18     5            salt  [B
            3   18     6  iterationCount  I
           10   18     7            cOut  Ljavax/crypto/CipherOutputStream;
           11   18     8           dgOut  Lorg/bouncycastle/crypto/io/DigestOutputStream;
           13   18     9             dig  Lorg/bouncycastle/crypto/Digest;
           14   18    10            hash  [B
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      stream    
      password  
}
SourceFile: "JDKKeyStore.java"
NestHost: org.bouncycastle.jce.provider.JDKKeyStore
InnerClasses:
  public BouncyCastleStore = org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore of org.bouncycastle.jce.provider.JDKKeyStore