public final class android.security.KeyChain
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: android.security.KeyChain
  super_class: java.lang.Object
{
  public static final java.lang.String ACCOUNT_TYPE;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.android.keychain"

  private static final java.lang.String KEYCHAIN_PACKAGE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.android.keychain"

  private static final java.lang.String ACTION_CHOOSER;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.android.keychain.CHOOSER"

  private static final java.lang.String CERT_INSTALLER_PACKAGE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "com.android.certinstaller"

  public static final java.lang.String EXTRA_RESPONSE;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "response"

  public static final java.lang.String EXTRA_URI;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "uri"

  public static final java.lang.String EXTRA_ALIAS;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "alias"

  public static final java.lang.String EXTRA_SENDER;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "sender"

  private static final java.lang.String ACTION_INSTALL;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "android.credentials.INSTALL"

  public static final java.lang.String EXTRA_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "name"

  public static final java.lang.String EXTRA_CERTIFICATE;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "CERT"

  public static final java.lang.String EXTRA_PKCS12;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "PKCS12"

  public static final java.lang.String ACTION_STORAGE_CHANGED;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "android.security.STORAGE_CHANGED"

  public static final java.lang.String ACTION_KEYCHAIN_CHANGED;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "android.security.action.KEYCHAIN_CHANGED"

  public static final java.lang.String ACTION_TRUST_STORE_CHANGED;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "android.security.action.TRUST_STORE_CHANGED"

  public static final java.lang.String ACTION_KEY_ACCESS_CHANGED;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "android.security.action.KEY_ACCESS_CHANGED"

  public static final java.lang.String EXTRA_KEY_ALIAS;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "android.security.extra.KEY_ALIAS"

  public static final java.lang.String EXTRA_KEY_ACCESSIBLE;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "android.security.extra.KEY_ACCESSIBLE"

  public static final int KEY_GEN_SUCCESS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  public static final int KEY_GEN_MISSING_ALIAS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  public static final int KEY_GEN_SUPERFLUOUS_ATTESTATION_CHALLENGE;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  public static final int KEY_GEN_NO_SUCH_ALGORITHM;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  public static final int KEY_GEN_INVALID_ALGORITHM_PARAMETERS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  public static final int KEY_GEN_NO_KEYSTORE_PROVIDER;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 5

  public static final int KEY_GEN_FAILURE;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 6

  public static final int KEY_ATTESTATION_SUCCESS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  public static final int KEY_ATTESTATION_MISSING_CHALLENGE;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  public static final int KEY_ATTESTATION_CANNOT_COLLECT_DATA;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  public static final int KEY_ATTESTATION_CANNOT_ATTEST_IDS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  public static final int KEY_ATTESTATION_FAILURE;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.security.KeyChain this
         0: .line 98
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // android.security.KeyChain this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/security/KeyChain;

  public static android.content.Intent createInstallIntent();
    descriptor: ()Landroid/content/Intent;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 343
            new android.content.Intent
            dup
            ldc "android.credentials.INSTALL"
            invokespecial android.content.Intent.<init>:(Ljava/lang/String;)V
            astore 0 /* intent */
        start local 0 // android.content.Intent intent
         1: .line 344
            aload 0 /* intent */
            ldc "com.android.certinstaller"
         2: .line 345
            ldc "com.android.certinstaller.CertInstallerMain"
         3: .line 344
            invokevirtual android.content.Intent.setClassName:(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
            pop
         4: .line 346
            aload 0 /* intent */
            areturn
        end local 0 // android.content.Intent intent
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            1    5     0  intent  Landroid/content/Intent;

  public static void choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, java.lang.String[], java.security.Principal[], java.lang.String, int, java.lang.String);
    descriptor: (Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Ljava/lang/String;ILjava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=8, args_size=7
        start local 0 // android.app.Activity activity
        start local 1 // android.security.KeyChainAliasCallback response
        start local 2 // java.lang.String[] keyTypes
        start local 3 // java.security.Principal[] issuers
        start local 4 // java.lang.String host
        start local 5 // int port
        start local 6 // java.lang.String alias
         0: .line 394
            aconst_null
            astore 7 /* uri */
        start local 7 // android.net.Uri uri
         1: .line 395
            aload 4 /* host */
            ifnull 8
         2: .line 396
            new android.net.Uri$Builder
            dup
            invokespecial android.net.Uri$Builder.<init>:()V
         3: .line 397
            new java.lang.StringBuilder
            dup
            aload 4 /* host */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 5 /* port */
            iconst_m1
            if_icmpeq 4
            new java.lang.StringBuilder
            dup
            ldc ":"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 5 /* port */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            goto 5
      StackMap locals: android.app.Activity android.security.KeyChainAliasCallback java.lang.String[] java.security.Principal[] java.lang.String int java.lang.String android.net.Uri
      StackMap stack: android.net.Uri$Builder java.lang.StringBuilder
         4: ldc ""
      StackMap locals: android.app.Activity android.security.KeyChainAliasCallback java.lang.String[] java.security.Principal[] java.lang.String int java.lang.String android.net.Uri
      StackMap stack: android.net.Uri$Builder java.lang.StringBuilder java.lang.String
         5: invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual android.net.Uri$Builder.authority:(Ljava/lang/String;)Landroid/net/Uri$Builder;
         6: .line 398
            invokevirtual android.net.Uri$Builder.build:()Landroid/net/Uri;
         7: .line 396
            astore 7 /* uri */
         8: .line 400
      StackMap locals:
      StackMap stack:
            aload 0 /* activity */
            aload 1 /* response */
            aload 2 /* keyTypes */
            aload 3 /* issuers */
            aload 7 /* uri */
            aload 6 /* alias */
            invokestatic android.security.KeyChain.choosePrivateKeyAlias:(Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Landroid/net/Uri;Ljava/lang/String;)V
         9: .line 401
            return
        end local 7 // android.net.Uri uri
        end local 6 // java.lang.String alias
        end local 5 // int port
        end local 4 // java.lang.String host
        end local 3 // java.security.Principal[] issuers
        end local 2 // java.lang.String[] keyTypes
        end local 1 // android.security.KeyChainAliasCallback response
        end local 0 // android.app.Activity activity
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   10     0  activity  Landroid/app/Activity;
            0   10     1  response  Landroid/security/KeyChainAliasCallback;
            0   10     2  keyTypes  [Ljava/lang/String;
            0   10     3   issuers  [Ljava/security/Principal;
            0   10     4      host  Ljava/lang/String;
            0   10     5      port  I
            0   10     6     alias  Ljava/lang/String;
            1   10     7       uri  Landroid/net/Uri;
    MethodParameters:
          Name  Flags
      activity  
      response  
      keyTypes  
      issuers   
      host      
      port      
      alias     

  public static void choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, java.lang.String[], java.security.Principal[], android.net.Uri, java.lang.String);
    descriptor: (Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Landroid/net/Uri;Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=7, args_size=6
        start local 0 // android.app.Activity activity
        start local 1 // android.security.KeyChainAliasCallback response
        start local 2 // java.lang.String[] keyTypes
        start local 3 // java.security.Principal[] issuers
        start local 4 // android.net.Uri uri
        start local 5 // java.lang.String alias
         0: .line 462
            aload 0 /* activity */
            ifnonnull 2
         1: .line 463
            new java.lang.NullPointerException
            dup
            ldc "activity == null"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 465
      StackMap locals:
      StackMap stack:
            aload 1 /* response */
            ifnonnull 4
         3: .line 466
            new java.lang.NullPointerException
            dup
            ldc "response == null"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 468
      StackMap locals:
      StackMap stack:
            new android.content.Intent
            dup
            ldc "com.android.keychain.CHOOSER"
            invokespecial android.content.Intent.<init>:(Ljava/lang/String;)V
            astore 6 /* intent */
        start local 6 // android.content.Intent intent
         5: .line 469
            aload 6 /* intent */
            ldc "com.android.keychain"
            invokevirtual android.content.Intent.setPackage:(Ljava/lang/String;)Landroid/content/Intent;
            pop
         6: .line 470
            aload 6 /* intent */
            ldc "response"
            new android.security.KeyChain$AliasResponse
            dup
            aload 1 /* response */
            invokespecial android.security.KeyChain$AliasResponse.<init>:(Landroid/security/KeyChainAliasCallback;)V
            invokevirtual android.content.Intent.putExtra:(Ljava/lang/String;Landroid/os/IBinder;)Landroid/content/Intent;
            pop
         7: .line 471
            aload 6 /* intent */
            ldc "uri"
            aload 4 /* uri */
            invokevirtual android.content.Intent.putExtra:(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;
            pop
         8: .line 472
            aload 6 /* intent */
            ldc "alias"
            aload 5 /* alias */
            invokevirtual android.content.Intent.putExtra:(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
            pop
         9: .line 474
            aload 6 /* intent */
            ldc "sender"
            aload 0 /* activity */
            iconst_0
            new android.content.Intent
            dup
            invokespecial android.content.Intent.<init>:()V
            iconst_0
            invokestatic android.app.PendingIntent.getActivity:(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
            invokevirtual android.content.Intent.putExtra:(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;
            pop
        10: .line 475
            aload 0 /* activity */
            aload 6 /* intent */
            invokevirtual android.app.Activity.startActivity:(Landroid/content/Intent;)V
        11: .line 476
            return
        end local 6 // android.content.Intent intent
        end local 5 // java.lang.String alias
        end local 4 // android.net.Uri uri
        end local 3 // java.security.Principal[] issuers
        end local 2 // java.lang.String[] keyTypes
        end local 1 // android.security.KeyChainAliasCallback response
        end local 0 // android.app.Activity activity
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   12     0  activity  Landroid/app/Activity;
            0   12     1  response  Landroid/security/KeyChainAliasCallback;
            0   12     2  keyTypes  [Ljava/lang/String;
            0   12     3   issuers  [Ljava/security/Principal;
            0   12     4       uri  Landroid/net/Uri;
            0   12     5     alias  Ljava/lang/String;
            5   12     6    intent  Landroid/content/Intent;
    MethodParameters:
          Name  Flags
      activity  
      response  
      keyTypes  
      issuers   
      uri       
      alias     

  public static java.security.PrivateKey getPrivateKey(android.content.Context, java.lang.String);
    descriptor: (Landroid/content/Context;Ljava/lang/String;)Ljava/security/PrivateKey;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // android.content.Context context
        start local 1 // java.lang.String alias
         0: .line 506
            aload 0 /* context */
            aload 1 /* alias */
            invokestatic android.security.KeyChain.getKeyPair:(Landroid/content/Context;Ljava/lang/String;)Ljava/security/KeyPair;
            astore 2 /* keyPair */
        start local 2 // java.security.KeyPair keyPair
         1: .line 507
            aload 2 /* keyPair */
            ifnull 3
         2: .line 508
            aload 2 /* keyPair */
            invokevirtual java.security.KeyPair.getPrivate:()Ljava/security/PrivateKey;
            areturn
         3: .line 511
      StackMap locals: java.security.KeyPair
      StackMap stack:
            aconst_null
            areturn
        end local 2 // java.security.KeyPair keyPair
        end local 1 // java.lang.String alias
        end local 0 // android.content.Context context
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0  context  Landroid/content/Context;
            0    4     1    alias  Ljava/lang/String;
            1    4     2  keyPair  Ljava/security/KeyPair;
    Exceptions:
      throws android.security.KeyChainException, java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  
      alias    

  public static java.security.KeyPair getKeyPair(android.content.Context, java.lang.String);
    descriptor: (Landroid/content/Context;Ljava/lang/String;)Ljava/security/KeyPair;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // android.content.Context context
        start local 1 // java.lang.String alias
         0: .line 518
            aload 1 /* alias */
            ifnonnull 2
         1: .line 519
            new java.lang.NullPointerException
            dup
            ldc "alias == null"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 521
      StackMap locals:
      StackMap stack:
            aload 0 /* context */
            ifnonnull 4
         3: .line 522
            new java.lang.NullPointerException
            dup
            ldc "context == null"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 526
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 3
            aconst_null
            astore 4
         5: aload 0 /* context */
            invokevirtual android.content.Context.getApplicationContext:()Landroid/content/Context;
            invokestatic android.security.KeyChain.bind:(Landroid/content/Context;)Landroid/security/KeyChain$KeyChainConnection;
            astore 5 /* keyChainConnection */
        start local 5 // android.security.KeyChain$KeyChainConnection keyChainConnection
         6: .line 527
            aload 5 /* keyChainConnection */
            invokevirtual android.security.KeyChain$KeyChainConnection.getService:()Landroid/security/IKeyChainService;
            aload 1 /* alias */
            invokeinterface android.security.IKeyChainService.requestPrivateKey:(Ljava/lang/String;)Ljava/lang/String;
            astore 2 /* keyId */
        start local 2 // java.lang.String keyId
         7: .line 528
            aload 5 /* keyChainConnection */
            ifnull 17
            aload 5 /* keyChainConnection */
            invokevirtual android.security.KeyChain$KeyChainConnection.close:()V
            goto 17
        end local 2 // java.lang.String keyId
      StackMap locals: android.content.Context java.lang.String top java.lang.Throwable java.lang.Throwable android.security.KeyChain$KeyChainConnection
      StackMap stack: java.lang.Throwable
         8: astore 3
            aload 5 /* keyChainConnection */
            ifnull 9
            aload 5 /* keyChainConnection */
            invokevirtual android.security.KeyChain$KeyChainConnection.close:()V
        end local 5 // android.security.KeyChain$KeyChainConnection keyChainConnection
      StackMap locals:
      StackMap stack:
         9: aload 3
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        10: astore 4
            aload 3
            ifnonnull 11
            aload 4
            astore 3
            goto 12
      StackMap locals:
      StackMap stack:
        11: aload 3
            aload 4
            if_acmpeq 12
            aload 3
            aload 4
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        12: aload 3
            athrow
      StackMap locals: android.content.Context java.lang.String
      StackMap stack: android.os.RemoteException
        13: astore 3 /* e */
        start local 3 // android.os.RemoteException e
        14: .line 529
            new android.security.KeyChainException
            dup
            aload 3 /* e */
            invokespecial android.security.KeyChainException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // android.os.RemoteException e
        15: .line 530
      StackMap locals:
      StackMap stack: java.lang.RuntimeException
            astore 3 /* e */
        start local 3 // java.lang.RuntimeException e
        16: .line 532
            new android.security.KeyChainException
            dup
            aload 3 /* e */
            invokespecial android.security.KeyChainException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.lang.RuntimeException e
        start local 2 // java.lang.String keyId
        17: .line 535
      StackMap locals: java.lang.String
      StackMap stack:
            aload 2 /* keyId */
            ifnonnull 19
        18: .line 536
            aconst_null
            areturn
        19: .line 540
      StackMap locals:
      StackMap stack:
            invokestatic android.security.KeyStore.getInstance:()Landroid/security/KeyStore;
            aload 2 /* keyId */
            iconst_m1
        20: .line 539
            invokestatic android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore:(Landroid/security/KeyStore;Ljava/lang/String;I)Ljava/security/KeyPair;
        21: areturn
        22: .line 541
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 3 /* e */
        start local 3 // java.lang.Exception e
        23: .line 542
            new android.security.KeyChainException
            dup
            aload 3 /* e */
            invokespecial android.security.KeyChainException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.lang.Exception e
        end local 2 // java.lang.String keyId
        end local 1 // java.lang.String alias
        end local 0 // android.content.Context context
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   24     0             context  Landroid/content/Context;
            0   24     1               alias  Ljava/lang/String;
            7    8     2               keyId  Ljava/lang/String;
           17   24     2               keyId  Ljava/lang/String;
            6    9     5  keyChainConnection  Landroid/security/KeyChain$KeyChainConnection;
           14   15     3                   e  Landroid/os/RemoteException;
           16   17     3                   e  Ljava/lang/RuntimeException;
           23   24     3                   e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           6     7       8  any
           5    10      10  any
           4    13      13  Class android.os.RemoteException
           4    13      15  Class java.lang.RuntimeException
          19    21      22  Class java.lang.RuntimeException
          19    21      22  Class java.security.UnrecoverableKeyException
    Exceptions:
      throws android.security.KeyChainException, java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  
      alias    

  public static java.security.cert.X509Certificate[] getCertificateChain(android.content.Context, java.lang.String);
    descriptor: (Landroid/content/Context;Ljava/lang/String;)[Ljava/security/cert/X509Certificate;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
         0: .line 611
            new java.lang.Error
            dup
            ldc "Unresolved compilation problems: \n\tTrustedCertificateStore cannot be resolved to a type\n\tTrustedCertificateStore cannot be resolved to a type\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Exceptions:
      throws android.security.KeyChainException, java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  
      alias    

  public static boolean isKeyAlgorithmSupported(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // java.lang.String algorithm
         0: .line 627
            aload 0 /* algorithm */
            getstatic java.util.Locale.US:Ljava/util/Locale;
            invokevirtual java.lang.String.toUpperCase:(Ljava/util/Locale;)Ljava/lang/String;
            astore 1 /* algUpper */
        start local 1 // java.lang.String algUpper
         1: .line 628
            ldc "EC"
            aload 1 /* algUpper */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
         2: .line 629
            ldc "RSA"
            aload 1 /* algUpper */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 4
         3: .line 628
            iconst_0
            ireturn
      StackMap locals: java.lang.String
      StackMap stack:
         4: iconst_1
            ireturn
        end local 1 // java.lang.String algUpper
        end local 0 // java.lang.String algorithm
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0  algorithm  Ljava/lang/String;
            1    5     1   algUpper  Ljava/lang/String;
    MethodParameters:
           Name  Flags
      algorithm  

  public static boolean isBoundKeyAlgorithm(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String algorithm
         0: .line 654
            aload 0 /* algorithm */
            invokestatic android.security.KeyChain.isKeyAlgorithmSupported:(Ljava/lang/String;)Z
            ifne 2
         1: .line 655
            iconst_0
            ireturn
         2: .line 658
      StackMap locals:
      StackMap stack:
            invokestatic android.security.KeyStore.getInstance:()Landroid/security/KeyStore;
            aload 0 /* algorithm */
            invokevirtual android.security.KeyStore.isHardwareBacked:(Ljava/lang/String;)Z
            ireturn
        end local 0 // java.lang.String algorithm
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0  algorithm  Ljava/lang/String;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
           Name  Flags
      algorithm  

  public static java.security.cert.X509Certificate toCertificate(byte[]);
    descriptor: ([B)Ljava/security/cert/X509Certificate;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // byte[] bytes
         0: .line 664
            aload 0 /* bytes */
            ifnonnull 2
         1: .line 665
            new java.lang.IllegalArgumentException
            dup
            ldc "bytes == null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 668
      StackMap locals:
      StackMap stack:
            ldc "X.509"
            invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
            astore 1 /* certFactory */
        start local 1 // java.security.cert.CertificateFactory certFactory
         3: .line 669
            aload 1 /* certFactory */
            new java.io.ByteArrayInputStream
            dup
            aload 0 /* bytes */
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
            invokevirtual java.security.cert.CertificateFactory.generateCertificate:(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
            astore 2 /* cert */
        start local 2 // java.security.cert.Certificate cert
         4: .line 670
            aload 2 /* cert */
            checkcast java.security.cert.X509Certificate
         5: areturn
        end local 2 // java.security.cert.Certificate cert
        end local 1 // java.security.cert.CertificateFactory certFactory
         6: .line 671
      StackMap locals:
      StackMap stack: java.security.cert.CertificateException
            astore 1 /* e */
        start local 1 // java.security.cert.CertificateException e
         7: .line 672
            new java.lang.AssertionError
            dup
            aload 1 /* e */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        end local 1 // java.security.cert.CertificateException e
        end local 0 // byte[] bytes
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    8     0        bytes  [B
            3    6     1  certFactory  Ljava/security/cert/CertificateFactory;
            4    6     2         cert  Ljava/security/cert/Certificate;
            7    8     1            e  Ljava/security/cert/CertificateException;
      Exception table:
        from    to  target  type
           2     5       6  Class java.security.cert.CertificateException
    MethodParameters:
       Name  Flags
      bytes  

  public static java.util.Collection<java.security.cert.X509Certificate> toCertificates(byte[]);
    descriptor: ([B)Ljava/util/Collection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // byte[] bytes
         0: .line 679
            aload 0 /* bytes */
            ifnonnull 2
         1: .line 680
            new java.lang.IllegalArgumentException
            dup
            ldc "bytes == null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 683
      StackMap locals:
      StackMap stack:
            ldc "X.509"
            invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
            astore 1 /* certFactory */
        start local 1 // java.security.cert.CertificateFactory certFactory
         3: .line 684
            aload 1 /* certFactory */
         4: .line 685
            new java.io.ByteArrayInputStream
            dup
            aload 0 /* bytes */
            invokespecial java.io.ByteArrayInputStream.<init>:([B)V
         5: .line 684
            invokevirtual java.security.cert.CertificateFactory.generateCertificates:(Ljava/io/InputStream;)Ljava/util/Collection;
         6: areturn
        end local 1 // java.security.cert.CertificateFactory certFactory
         7: .line 686
      StackMap locals:
      StackMap stack: java.security.cert.CertificateException
            astore 1 /* e */
        start local 1 // java.security.cert.CertificateException e
         8: .line 687
            new java.lang.AssertionError
            dup
            aload 1 /* e */
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        end local 1 // java.security.cert.CertificateException e
        end local 0 // byte[] bytes
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0        bytes  [B
            3    7     1  certFactory  Ljava/security/cert/CertificateFactory;
            8    9     1            e  Ljava/security/cert/CertificateException;
      Exception table:
        from    to  target  type
           2     6       7  Class java.security.cert.CertificateException
    Signature: ([B)Ljava/util/Collection<Ljava/security/cert/X509Certificate;>;
    MethodParameters:
       Name  Flags
      bytes  

  public static android.security.KeyChain$KeyChainConnection bind(android.content.Context);
    descriptor: (Landroid/content/Context;)Landroid/security/KeyChain$KeyChainConnection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // android.content.Context context
         0: .line 721
            aload 0 /* context */
            invokestatic android.os.Process.myUserHandle:()Landroid/os/UserHandle;
            invokestatic android.security.KeyChain.bindAsUser:(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
            areturn
        end local 0 // android.content.Context context
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0  context  Landroid/content/Context;
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  

  public static android.security.KeyChain$KeyChainConnection bindAsUser(android.content.Context, android.os.UserHandle);
    descriptor: (Landroid/content/Context;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // android.content.Context context
        start local 1 // android.os.UserHandle user
         0: .line 730
            aload 0 /* context */
            ifnonnull 2
         1: .line 731
            new java.lang.NullPointerException
            dup
            ldc "context == null"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 733
      StackMap locals:
      StackMap stack:
            aload 0 /* context */
            invokestatic android.security.KeyChain.ensureNotOnMainThread:(Landroid/content/Context;)V
         3: .line 734
            new java.util.concurrent.LinkedBlockingQueue
            dup
            iconst_1
            invokespecial java.util.concurrent.LinkedBlockingQueue.<init>:(I)V
            astore 2 /* q */
        start local 2 // java.util.concurrent.BlockingQueue q
         4: .line 735
            new android.security.KeyChain$1
            dup
            aload 2 /* q */
            invokespecial android.security.KeyChain$1.<init>:(Ljava/util/concurrent/BlockingQueue;)V
            astore 3 /* keyChainServiceConnection */
        start local 3 // android.content.ServiceConnection keyChainServiceConnection
         5: .line 749
            new android.content.Intent
            dup
            ldc Landroid/security/IKeyChainService;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokespecial android.content.Intent.<init>:(Ljava/lang/String;)V
            astore 4 /* intent */
        start local 4 // android.content.Intent intent
         6: .line 750
            aload 4 /* intent */
            aload 0 /* context */
            invokevirtual android.content.Context.getPackageManager:()Landroid/content/pm/PackageManager;
            iconst_0
            invokevirtual android.content.Intent.resolveSystemService:(Landroid/content/pm/PackageManager;I)Landroid/content/ComponentName;
            astore 5 /* comp */
        start local 5 // android.content.ComponentName comp
         7: .line 751
            aload 4 /* intent */
            aload 5 /* comp */
            invokevirtual android.content.Intent.setComponent:(Landroid/content/ComponentName;)Landroid/content/Intent;
            pop
         8: .line 752
            aload 5 /* comp */
            ifnull 12
            aload 0 /* context */
         9: .line 753
            aload 4 /* intent */
            aload 3 /* keyChainServiceConnection */
            iconst_1
            aload 1 /* user */
        10: .line 752
            invokevirtual android.content.Context.bindServiceAsUser:(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
        11: .line 753
            ifne 13
        12: .line 754
      StackMap locals: android.content.Context android.os.UserHandle java.util.concurrent.BlockingQueue android.content.ServiceConnection android.content.Intent android.content.ComponentName
      StackMap stack:
            new java.lang.AssertionError
            dup
            ldc "could not bind to KeyChainService"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        13: .line 756
      StackMap locals:
      StackMap stack:
            new android.security.KeyChain$KeyChainConnection
            dup
            aload 0 /* context */
            aload 3 /* keyChainServiceConnection */
            aload 2 /* q */
            invokeinterface java.util.concurrent.BlockingQueue.take:()Ljava/lang/Object;
            checkcast android.security.IKeyChainService
            invokespecial android.security.KeyChain$KeyChainConnection.<init>:(Landroid/content/Context;Landroid/content/ServiceConnection;Landroid/security/IKeyChainService;)V
            areturn
        end local 5 // android.content.ComponentName comp
        end local 4 // android.content.Intent intent
        end local 3 // android.content.ServiceConnection keyChainServiceConnection
        end local 2 // java.util.concurrent.BlockingQueue q
        end local 1 // android.os.UserHandle user
        end local 0 // android.content.Context context
      LocalVariableTable:
        Start  End  Slot                       Name  Signature
            0   14     0                    context  Landroid/content/Context;
            0   14     1                       user  Landroid/os/UserHandle;
            4   14     2                          q  Ljava/util/concurrent/BlockingQueue<Landroid/security/IKeyChainService;>;
            5   14     3  keyChainServiceConnection  Landroid/content/ServiceConnection;
            6   14     4                     intent  Landroid/content/Intent;
            7   14     5                       comp  Landroid/content/ComponentName;
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  
      user     

  private static void ensureNotOnMainThread(android.content.Context);
    descriptor: (Landroid/content/Context;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // android.content.Context context
         0: .line 760
            invokestatic android.os.Looper.myLooper:()Landroid/os/Looper;
            astore 1 /* looper */
        start local 1 // android.os.Looper looper
         1: .line 761
            aload 1 /* looper */
            ifnull 5
            aload 1 /* looper */
            aload 0 /* context */
            invokevirtual android.content.Context.getMainLooper:()Landroid/os/Looper;
            if_acmpne 5
         2: .line 762
            new java.lang.IllegalStateException
            dup
         3: .line 763
            ldc "calling this from your main thread can lead to deadlock"
         4: .line 762
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 765
      StackMap locals: android.os.Looper
      StackMap stack:
            return
        end local 1 // android.os.Looper looper
        end local 0 // android.content.Context context
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0  context  Landroid/content/Context;
            1    6     1   looper  Landroid/os/Looper;
    MethodParameters:
         Name  Flags
      context  
}
SourceFile: "KeyChain.java"
NestMembers:
  android.security.KeyChain$1  android.security.KeyChain$AliasResponse  android.security.KeyChain$KeyChainConnection
InnerClasses:
  public final Builder = android.net.Uri$Builder of android.net.Uri
  android.security.KeyChain$1
  private AliasResponse = android.security.KeyChain$AliasResponse of android.security.KeyChain
  public KeyChainConnection = android.security.KeyChain$KeyChainConnection of android.security.KeyChain