class android.util.jar.StrictJarVerifier
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: android.util.jar.StrictJarVerifier
  super_class: java.lang.Object
{
  private static final java.lang.String SF_ATTRIBUTE_ANDROID_APK_SIGNED_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "X-Android-APK-Signed"

  private static final java.lang.String[] DIGEST_ALGORITHMS;
    descriptor: [Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final java.lang.String jarName;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.util.jar.StrictJarManifest manifest;
    descriptor: Landroid/util/jar/StrictJarManifest;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.HashMap<java.lang.String, byte[]> metaEntries;
    descriptor: Ljava/util/HashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/HashMap<Ljava/lang/String;[B>;

  private final int mainAttributesEnd;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean signatureSchemeRollbackProtectionsEnforced;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.Hashtable<java.lang.String, java.util.HashMap<java.lang.String, java.util.jar.Attributes>> signatures;
    descriptor: Ljava/util/Hashtable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Hashtable<Ljava/lang/String;Ljava/util/HashMap<Ljava/lang/String;Ljava/util/jar/Attributes;>;>;

  private final java.util.Hashtable<java.lang.String, java.security.cert.Certificate[]> certificates;
    descriptor: Ljava/util/Hashtable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Hashtable<Ljava/lang/String;[Ljava/security/cert/Certificate;>;

  private final java.util.Hashtable<java.lang.String, java.security.cert.Certificate[][]> verifiedEntries;
    descriptor: Ljava/util/Hashtable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Hashtable<Ljava/lang/String;[[Ljava/security/cert/Certificate;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         0: .line 74
            iconst_4
            anewarray java.lang.String
            dup
            iconst_0
         1: .line 75
            ldc "SHA-512"
            aastore
            dup
            iconst_1
         2: .line 76
            ldc "SHA-384"
            aastore
            dup
            iconst_2
         3: .line 77
            ldc "SHA-256"
            aastore
            dup
            iconst_3
         4: .line 78
            ldc "SHA1"
            aastore
         5: .line 74
            putstatic android.util.jar.StrictJarVerifier.DIGEST_ALGORITHMS:[Ljava/lang/String;
         6: .line 79
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private static java.lang.SecurityException invalidDigest(java.lang.String, java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/SecurityException;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // java.lang.String signatureFile
        start local 1 // java.lang.String name
        start local 2 // java.lang.String jarName
         0: .line 159
            new java.lang.SecurityException
            dup
            new java.lang.StringBuilder
            dup
            aload 0 /* signatureFile */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " has invalid digest for "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* name */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         1: .line 160
            ldc " in "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* jarName */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         2: .line 159
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
            athrow
        end local 2 // java.lang.String jarName
        end local 1 // java.lang.String name
        end local 0 // java.lang.String signatureFile
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    3     0  signatureFile  Ljava/lang/String;
            0    3     1           name  Ljava/lang/String;
            0    3     2        jarName  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      signatureFile  
      name           
      jarName        

  private static java.lang.SecurityException failedVerification(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/SecurityException;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // java.lang.String jarName
        start local 1 // java.lang.String signatureFile
         0: .line 164
            new java.lang.SecurityException
            dup
            new java.lang.StringBuilder
            dup
            aload 0 /* jarName */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " failed verification of "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* signatureFile */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.String signatureFile
        end local 0 // java.lang.String jarName
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0        jarName  Ljava/lang/String;
            0    1     1  signatureFile  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      jarName        
      signatureFile  

  private static java.lang.SecurityException failedVerification(java.lang.String, java.lang.String, java.lang.Throwable);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/SecurityException;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // java.lang.String jarName
        start local 1 // java.lang.String signatureFile
        start local 2 // java.lang.Throwable e
         0: .line 169
            new java.lang.SecurityException
            dup
            new java.lang.StringBuilder
            dup
            aload 0 /* jarName */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " failed verification of "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 1 /* signatureFile */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 2 /* e */
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 2 // java.lang.Throwable e
        end local 1 // java.lang.String signatureFile
        end local 0 // java.lang.String jarName
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0        jarName  Ljava/lang/String;
            0    1     1  signatureFile  Ljava/lang/String;
            0    1     2              e  Ljava/lang/Throwable;
    MethodParameters:
               Name  Flags
      jarName        
      signatureFile  
      e              

  void <init>(java.lang.String, android.util.jar.StrictJarManifest, java.util.HashMap<java.lang.String, byte[]>, );
    descriptor: (Ljava/lang/String;Landroid/util/jar/StrictJarManifest;Ljava/util/HashMap;Z)V
    flags: (0x0000) 
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // android.util.jar.StrictJarVerifier this
        start local 1 // java.lang.String name
        start local 2 // android.util.jar.StrictJarManifest manifest
        start local 3 // java.util.HashMap metaEntries
        start local 4 // boolean signatureSchemeRollbackProtectionsEnforced
         0: .line 183
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 87
            aload 0 /* this */
         2: .line 88
            new java.util.Hashtable
            dup
            iconst_5
            invokespecial java.util.Hashtable.<init>:(I)V
            putfield android.util.jar.StrictJarVerifier.signatures:Ljava/util/Hashtable;
         3: .line 90
            aload 0 /* this */
         4: .line 91
            new java.util.Hashtable
            dup
            iconst_5
            invokespecial java.util.Hashtable.<init>:(I)V
            putfield android.util.jar.StrictJarVerifier.certificates:Ljava/util/Hashtable;
         5: .line 93
            aload 0 /* this */
         6: .line 94
            new java.util.Hashtable
            dup
            invokespecial java.util.Hashtable.<init>:()V
            putfield android.util.jar.StrictJarVerifier.verifiedEntries:Ljava/util/Hashtable;
         7: .line 185
            aload 0 /* this */
            aload 1 /* name */
            putfield android.util.jar.StrictJarVerifier.jarName:Ljava/lang/String;
         8: .line 186
            aload 0 /* this */
            aload 2 /* manifest */
            putfield android.util.jar.StrictJarVerifier.manifest:Landroid/util/jar/StrictJarManifest;
         9: .line 187
            aload 0 /* this */
            aload 3 /* metaEntries */
            putfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
        10: .line 188
            aload 0 /* this */
            aload 2 /* manifest */
            invokevirtual android.util.jar.StrictJarManifest.getMainAttributesEnd:()I
            putfield android.util.jar.StrictJarVerifier.mainAttributesEnd:I
        11: .line 189
            aload 0 /* this */
        12: .line 190
            iload 4 /* signatureSchemeRollbackProtectionsEnforced */
        13: .line 189
            putfield android.util.jar.StrictJarVerifier.signatureSchemeRollbackProtectionsEnforced:Z
        14: .line 191
            return
        end local 4 // boolean signatureSchemeRollbackProtectionsEnforced
        end local 3 // java.util.HashMap metaEntries
        end local 2 // android.util.jar.StrictJarManifest manifest
        end local 1 // java.lang.String name
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot                                        Name  Signature
            0   15     0                                        this  Landroid/util/jar/StrictJarVerifier;
            0   15     1                                        name  Ljava/lang/String;
            0   15     2                                    manifest  Landroid/util/jar/StrictJarManifest;
            0   15     3                                 metaEntries  Ljava/util/HashMap<Ljava/lang/String;[B>;
            0   15     4  signatureSchemeRollbackProtectionsEnforced  Z
    Signature: (Ljava/lang/String;Landroid/util/jar/StrictJarManifest;Ljava/util/HashMap<Ljava/lang/String;[B>;Z)V
    MethodParameters:
                                            Name  Flags
      name                                        
      manifest                                    
      metaEntries                                 
      signatureSchemeRollbackProtectionsEnforced  

  android.util.jar.StrictJarVerifier$VerifierEntry initEntry(java.lang.String);
    descriptor: (Ljava/lang/String;)Landroid/util/jar/StrictJarVerifier$VerifierEntry;
    flags: (0x0000) 
    Code:
      stack=7, locals=10, args_size=2
        start local 0 // android.util.jar.StrictJarVerifier this
        start local 1 // java.lang.String name
         0: .line 209
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.manifest:Landroid/util/jar/StrictJarManifest;
            ifnull 1
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.signatures:Ljava/util/Hashtable;
            invokevirtual java.util.Hashtable.isEmpty:()Z
            ifeq 2
         1: .line 210
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         2: .line 213
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.manifest:Landroid/util/jar/StrictJarManifest;
            aload 1 /* name */
            invokevirtual android.util.jar.StrictJarManifest.getAttributes:(Ljava/lang/String;)Ljava/util/jar/Attributes;
            astore 2 /* attributes */
        start local 2 // java.util.jar.Attributes attributes
         3: .line 215
            aload 2 /* attributes */
            ifnonnull 5
         4: .line 216
            aconst_null
            areturn
         5: .line 219
      StackMap locals: java.util.jar.Attributes
      StackMap stack:
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* certChains */
        start local 3 // java.util.ArrayList certChains
         6: .line 220
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.signatures:Ljava/util/Hashtable;
            invokevirtual java.util.Hashtable.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 4 /* it */
        start local 4 // java.util.Iterator it
         7: .line 221
            goto 15
         8: .line 222
      StackMap locals: java.util.ArrayList java.util.Iterator
      StackMap stack:
            aload 4 /* it */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 5 /* entry */
        start local 5 // java.util.Map$Entry entry
         9: .line 223
            aload 5 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.HashMap
            astore 6 /* hm */
        start local 6 // java.util.HashMap hm
        10: .line 224
            aload 6 /* hm */
            aload 1 /* name */
            invokevirtual java.util.HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            ifnull 15
        11: .line 226
            aload 5 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 7 /* signatureFile */
        start local 7 // java.lang.String signatureFile
        12: .line 227
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.certificates:Ljava/util/Hashtable;
            aload 7 /* signatureFile */
            invokevirtual java.util.Hashtable.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.cert.Certificate[]
            astore 8 /* certChain */
        start local 8 // java.security.cert.Certificate[] certChain
        13: .line 228
            aload 8 /* certChain */
            ifnull 15
        14: .line 229
            aload 3 /* certChains */
            aload 8 /* certChain */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 8 // java.security.cert.Certificate[] certChain
        end local 7 // java.lang.String signatureFile
        end local 6 // java.util.HashMap hm
        end local 5 // java.util.Map$Entry entry
        15: .line 221
      StackMap locals:
      StackMap stack:
            aload 4 /* it */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        16: .line 235
            aload 3 /* certChains */
            invokevirtual java.util.ArrayList.isEmpty:()Z
            ifeq 18
        17: .line 236
            aconst_null
            areturn
        18: .line 238
      StackMap locals:
      StackMap stack:
            aload 3 /* certChains */
            aload 3 /* certChains */
            invokevirtual java.util.ArrayList.size:()I
            anewarray java.security.cert.Certificate[]
            invokevirtual java.util.ArrayList.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.security.cert.Certificate[][]
            astore 5 /* certChainsArray */
        start local 5 // java.security.cert.Certificate[][] certChainsArray
        19: .line 240
            iconst_0
            istore 6 /* i */
        start local 6 // int i
        20: goto 32
        21: .line 241
      StackMap locals: java.security.cert.Certificate[][] int
      StackMap stack:
            getstatic android.util.jar.StrictJarVerifier.DIGEST_ALGORITHMS:[Ljava/lang/String;
            iload 6 /* i */
            aaload
            astore 7 /* algorithm */
        start local 7 // java.lang.String algorithm
        22: .line 242
            aload 2 /* attributes */
            new java.lang.StringBuilder
            dup
            aload 7 /* algorithm */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "-Digest"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.util.jar.Attributes.getValue:(Ljava/lang/String;)Ljava/lang/String;
            astore 8 /* hash */
        start local 8 // java.lang.String hash
        23: .line 243
            aload 8 /* hash */
            ifnonnull 25
        24: .line 244
            goto 31
        25: .line 246
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            aload 8 /* hash */
            getstatic java.nio.charset.StandardCharsets.ISO_8859_1:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            astore 9 /* hashBytes */
        start local 9 // byte[] hashBytes
        26: .line 249
            new android.util.jar.StrictJarVerifier$VerifierEntry
            dup
            aload 1 /* name */
            aload 7 /* algorithm */
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            aload 9 /* hashBytes */
        27: .line 250
            aload 5 /* certChainsArray */
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.verifiedEntries:Ljava/util/Hashtable;
        28: .line 249
            invokespecial android.util.jar.StrictJarVerifier$VerifierEntry.<init>:(Ljava/lang/String;Ljava/security/MessageDigest;[B[[Ljava/security/cert/Certificate;Ljava/util/Hashtable;)V
        29: areturn
        30: .line 251
      StackMap locals: android.util.jar.StrictJarVerifier java.lang.String java.util.jar.Attributes java.util.ArrayList java.util.Iterator java.security.cert.Certificate[][] int java.lang.String java.lang.String byte[]
      StackMap stack: java.security.NoSuchAlgorithmException
            pop
        end local 9 // byte[] hashBytes
        end local 8 // java.lang.String hash
        end local 7 // java.lang.String algorithm
        31: .line 240
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        32: iload 6 /* i */
            getstatic android.util.jar.StrictJarVerifier.DIGEST_ALGORITHMS:[Ljava/lang/String;
            arraylength
            if_icmplt 21
        end local 6 // int i
        33: .line 254
            aconst_null
            areturn
        end local 5 // java.security.cert.Certificate[][] certChainsArray
        end local 4 // java.util.Iterator it
        end local 3 // java.util.ArrayList certChains
        end local 2 // java.util.jar.Attributes attributes
        end local 1 // java.lang.String name
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   34     0             this  Landroid/util/jar/StrictJarVerifier;
            0   34     1             name  Ljava/lang/String;
            3   34     2       attributes  Ljava/util/jar/Attributes;
            6   34     3       certChains  Ljava/util/ArrayList<[Ljava/security/cert/Certificate;>;
            7   34     4               it  Ljava/util/Iterator<Ljava/util/Map$Entry<Ljava/lang/String;Ljava/util/HashMap<Ljava/lang/String;Ljava/util/jar/Attributes;>;>;>;
            9   15     5            entry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/util/HashMap<Ljava/lang/String;Ljava/util/jar/Attributes;>;>;
           10   15     6               hm  Ljava/util/HashMap<Ljava/lang/String;Ljava/util/jar/Attributes;>;
           12   15     7    signatureFile  Ljava/lang/String;
           13   15     8        certChain  [Ljava/security/cert/Certificate;
           19   34     5  certChainsArray  [[Ljava/security/cert/Certificate;
           20   33     6                i  I
           22   31     7        algorithm  Ljava/lang/String;
           23   31     8             hash  Ljava/lang/String;
           26   31     9        hashBytes  [B
      Exception table:
        from    to  target  type
          26    29      30  Class java.security.NoSuchAlgorithmException
    MethodParameters:
      Name  Flags
      name  

  void addMetaEntry(java.lang.String, byte[]);
    descriptor: (Ljava/lang/String;[B)V
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // android.util.jar.StrictJarVerifier this
        start local 1 // java.lang.String name
        start local 2 // byte[] buf
         0: .line 271
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            aload 1 /* name */
            getstatic java.util.Locale.US:Ljava/util/Locale;
            invokevirtual java.lang.String.toUpperCase:(Ljava/util/Locale;)Ljava/lang/String;
            aload 2 /* buf */
            invokevirtual java.util.HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 272
            return
        end local 2 // byte[] buf
        end local 1 // java.lang.String name
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/util/jar/StrictJarVerifier;
            0    2     1  name  Ljava/lang/String;
            0    2     2   buf  [B
    MethodParameters:
      Name  Flags
      name  
      buf   

  synchronized boolean readCertificates();
    descriptor: ()Z
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // android.util.jar.StrictJarVerifier this
         0: .line 292
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            invokevirtual java.util.HashMap.isEmpty:()Z
            ifeq 2
         1: .line 293
            iconst_0
            ireturn
         2: .line 296
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            invokevirtual java.util.HashMap.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 1 /* it */
        start local 1 // java.util.Iterator it
         3: .line 297
            goto 8
         4: .line 298
      StackMap locals: java.util.Iterator
      StackMap stack:
            aload 1 /* it */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 2 /* key */
        start local 2 // java.lang.String key
         5: .line 299
            aload 2 /* key */
            ldc ".DSA"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifne 6
            aload 2 /* key */
            ldc ".RSA"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifne 6
            aload 2 /* key */
            ldc ".EC"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 8
         6: .line 300
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 2 /* key */
            invokevirtual android.util.jar.StrictJarVerifier.verifyCertificate:(Ljava/lang/String;)V
         7: .line 301
            aload 1 /* it */
            invokeinterface java.util.Iterator.remove:()V
        end local 2 // java.lang.String key
         8: .line 297
      StackMap locals:
      StackMap stack:
            aload 1 /* it */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 4
         9: .line 304
            iconst_1
            ireturn
        end local 1 // java.util.Iterator it
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Landroid/util/jar/StrictJarVerifier;
            3   10     1    it  Ljava/util/Iterator<Ljava/lang/String;>;
            5    8     2   key  Ljava/lang/String;

  static java.security.cert.Certificate[] verifyBytes(byte[], byte[]);
    descriptor: ([B[B)[Ljava/security/cert/Certificate;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=9, args_size=2
        start local 0 // byte[] blockBytes
        start local 1 // byte[] sfBytes
         0: .line 316
            aconst_null
            astore 2 /* obj */
        start local 2 // java.lang.Object obj
         1: .line 319
            invokestatic sun.security.jca.Providers.startJarVerification:()Ljava/lang/Object;
            astore 2 /* obj */
         2: .line 320
            new sun.security.pkcs.PKCS7
            dup
            aload 0 /* blockBytes */
            invokespecial sun.security.pkcs.PKCS7.<init>:([B)V
            astore 3 /* block */
        start local 3 // sun.security.pkcs.PKCS7 block
         3: .line 321
            aload 3 /* block */
            aload 1 /* sfBytes */
            invokevirtual sun.security.pkcs.PKCS7.verify:([B)[Lsun/security/pkcs/SignerInfo;
            astore 4 /* verifiedSignerInfos */
        start local 4 // sun.security.pkcs.SignerInfo[] verifiedSignerInfos
         4: .line 322
            aload 4 /* verifiedSignerInfos */
            ifnull 5
            aload 4 /* verifiedSignerInfos */
            arraylength
            ifne 8
         5: .line 323
      StackMap locals: java.lang.Object sun.security.pkcs.PKCS7 sun.security.pkcs.SignerInfo[]
      StackMap stack:
            new java.security.GeneralSecurityException
            dup
         6: .line 324
            ldc "Failed to verify signature: no verified SignerInfos"
         7: .line 323
            invokespecial java.security.GeneralSecurityException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 330
      StackMap locals:
      StackMap stack:
            aload 4 /* verifiedSignerInfos */
            iconst_0
            aaload
            astore 5 /* verifiedSignerInfo */
        start local 5 // sun.security.pkcs.SignerInfo verifiedSignerInfo
         9: .line 332
            aload 5 /* verifiedSignerInfo */
            aload 3 /* block */
            invokevirtual sun.security.pkcs.SignerInfo.getCertificateChain:(Lsun/security/pkcs/PKCS7;)Ljava/util/ArrayList;
        10: .line 331
            astore 6 /* verifiedSignerCertChain */
        start local 6 // java.util.List verifiedSignerCertChain
        11: .line 333
            aload 6 /* verifiedSignerCertChain */
            ifnonnull 15
        12: .line 335
            new java.security.GeneralSecurityException
            dup
        13: .line 336
            ldc "Failed to find verified SignerInfo certificate chain"
        14: .line 335
            invokespecial java.security.GeneralSecurityException.<init>:(Ljava/lang/String;)V
            athrow
        15: .line 337
      StackMap locals: sun.security.pkcs.SignerInfo java.util.List
      StackMap stack:
            aload 6 /* verifiedSignerCertChain */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 19
        16: .line 339
            new java.security.GeneralSecurityException
            dup
        17: .line 340
            ldc "Verified SignerInfo certificate chain is emtpy"
        18: .line 339
            invokespecial java.security.GeneralSecurityException.<init>:(Ljava/lang/String;)V
            athrow
        19: .line 342
      StackMap locals:
      StackMap stack:
            aload 6 /* verifiedSignerCertChain */
        20: .line 343
            aload 6 /* verifiedSignerCertChain */
            invokeinterface java.util.List.size:()I
            anewarray java.security.cert.X509Certificate
        21: .line 342
            invokeinterface java.util.List.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast java.security.cert.Certificate[]
            astore 8
        22: .line 347
            aload 2 /* obj */
            invokestatic sun.security.jca.Providers.stopJarVerification:(Ljava/lang/Object;)V
        23: .line 342
            aload 8
            areturn
        end local 6 // java.util.List verifiedSignerCertChain
        end local 5 // sun.security.pkcs.SignerInfo verifiedSignerInfo
        end local 4 // sun.security.pkcs.SignerInfo[] verifiedSignerInfos
        end local 3 // sun.security.pkcs.PKCS7 block
        24: .line 344
      StackMap locals: byte[] byte[] java.lang.Object
      StackMap stack: java.io.IOException
            astore 3 /* e */
        start local 3 // java.io.IOException e
        25: .line 345
            new java.security.GeneralSecurityException
            dup
            ldc "IO exception verifying jar cert"
            aload 3 /* e */
            invokespecial java.security.GeneralSecurityException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.io.IOException e
        26: .line 346
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 7
        27: .line 347
            aload 2 /* obj */
            invokestatic sun.security.jca.Providers.stopJarVerification:(Ljava/lang/Object;)V
        28: .line 348
            aload 7
            athrow
        end local 2 // java.lang.Object obj
        end local 1 // byte[] sfBytes
        end local 0 // byte[] blockBytes
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0   29     0               blockBytes  [B
            0   29     1                  sfBytes  [B
            1   29     2                      obj  Ljava/lang/Object;
            3   24     3                    block  Lsun/security/pkcs/PKCS7;
            4   24     4      verifiedSignerInfos  [Lsun/security/pkcs/SignerInfo;
            9   24     5       verifiedSignerInfo  Lsun/security/pkcs/SignerInfo;
           11   24     6  verifiedSignerCertChain  Ljava/util/List<Ljava/security/cert/X509Certificate;>;
           25   26     3                        e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1    22      24  Class java.io.IOException
           1    22      26  any
          24    26      26  any
    Exceptions:
      throws java.security.GeneralSecurityException
    MethodParameters:
            Name  Flags
      blockBytes  
      sfBytes     

  private void verifyCertificate(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=14, args_size=2
        start local 0 // android.util.jar.StrictJarVerifier this
        start local 1 // java.lang.String certFile
         0: .line 356
            new java.lang.StringBuilder
            dup
            aload 1 /* certFile */
            iconst_0
            aload 1 /* certFile */
            bipush 46
            invokevirtual java.lang.String.lastIndexOf:(I)I
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ".SF"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 2 /* signatureFile */
        start local 2 // java.lang.String signatureFile
         1: .line 357
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            aload 2 /* signatureFile */
            invokevirtual java.util.HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast byte[]
            astore 3 /* sfBytes */
        start local 3 // byte[] sfBytes
         2: .line 358
            aload 3 /* sfBytes */
            ifnonnull 4
         3: .line 359
            return
         4: .line 362
      StackMap locals: java.lang.String byte[]
      StackMap stack:
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            ldc "META-INF/MANIFEST.MF"
            invokevirtual java.util.HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast byte[]
            astore 4 /* manifestBytes */
        start local 4 // byte[] manifestBytes
         5: .line 364
            aload 4 /* manifestBytes */
            ifnonnull 7
         6: .line 365
            return
         7: .line 368
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            aload 1 /* certFile */
            invokevirtual java.util.HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast byte[]
            astore 5 /* sBlockBytes */
        start local 5 // byte[] sBlockBytes
         8: .line 370
            aload 5 /* sBlockBytes */
            aload 3 /* sfBytes */
            invokestatic android.util.jar.StrictJarVerifier.verifyBytes:([B[B)[Ljava/security/cert/Certificate;
            astore 6 /* signerCertChain */
        start local 6 // java.security.cert.Certificate[] signerCertChain
         9: .line 371
            aload 6 /* signerCertChain */
            ifnull 14
        10: .line 372
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.certificates:Ljava/util/Hashtable;
            aload 2 /* signatureFile */
            aload 6 /* signerCertChain */
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 6 // java.security.cert.Certificate[] signerCertChain
        11: .line 374
            goto 14
      StackMap locals: android.util.jar.StrictJarVerifier java.lang.String java.lang.String byte[] byte[] byte[]
      StackMap stack: java.security.GeneralSecurityException
        12: astore 6 /* e */
        start local 6 // java.security.GeneralSecurityException e
        13: .line 375
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.jarName:Ljava/lang/String;
            aload 2 /* signatureFile */
            aload 6 /* e */
            invokestatic android.util.jar.StrictJarVerifier.failedVerification:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)Ljava/lang/SecurityException;
            athrow
        end local 6 // java.security.GeneralSecurityException e
        14: .line 379
      StackMap locals:
      StackMap stack:
            new java.util.jar.Attributes
            dup
            invokespecial java.util.jar.Attributes.<init>:()V
            astore 6 /* attributes */
        start local 6 // java.util.jar.Attributes attributes
        15: .line 380
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 7 /* entries */
        start local 7 // java.util.HashMap entries
        16: .line 382
            new android.util.jar.StrictJarManifestReader
            dup
            aload 3 /* sfBytes */
            aload 6 /* attributes */
            invokespecial android.util.jar.StrictJarManifestReader.<init>:([BLjava/util/jar/Attributes;)V
            astore 8 /* im */
        start local 8 // android.util.jar.StrictJarManifestReader im
        17: .line 383
            aload 8 /* im */
            aload 7 /* entries */
            aconst_null
            invokevirtual android.util.jar.StrictJarManifestReader.readEntries:(Ljava/util/Map;Ljava/util/Map;)V
        end local 8 // android.util.jar.StrictJarManifestReader im
        18: .line 384
            goto 21
      StackMap locals: android.util.jar.StrictJarVerifier java.lang.String java.lang.String byte[] byte[] byte[] java.util.jar.Attributes java.util.HashMap
      StackMap stack: java.io.IOException
        19: pop
        20: .line 385
            return
        21: .line 389
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.signatureSchemeRollbackProtectionsEnforced:Z
            ifeq 53
        22: .line 391
            aload 6 /* attributes */
            ldc "X-Android-APK-Signed"
            invokevirtual java.util.jar.Attributes.getValue:(Ljava/lang/String;)Ljava/lang/String;
        23: .line 390
            astore 8 /* apkSignatureSchemeIdList */
        start local 8 // java.lang.String apkSignatureSchemeIdList
        24: .line 392
            aload 8 /* apkSignatureSchemeIdList */
            ifnull 53
        25: .line 397
            iconst_0
            istore 9 /* v2SignatureGenerated */
        start local 9 // boolean v2SignatureGenerated
        26: .line 398
            iconst_0
            istore 10 /* v3SignatureGenerated */
        start local 10 // boolean v3SignatureGenerated
        27: .line 399
            new java.util.StringTokenizer
            dup
            aload 8 /* apkSignatureSchemeIdList */
            ldc ","
            invokespecial java.util.StringTokenizer.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            astore 11 /* tokenizer */
        start local 11 // java.util.StringTokenizer tokenizer
        28: .line 400
            goto 42
        29: .line 401
      StackMap locals: android.util.jar.StrictJarVerifier java.lang.String java.lang.String byte[] byte[] byte[] java.util.jar.Attributes java.util.HashMap java.lang.String int int java.util.StringTokenizer
      StackMap stack:
            aload 11 /* tokenizer */
            invokevirtual java.util.StringTokenizer.nextToken:()Ljava/lang/String;
            invokevirtual java.lang.String.trim:()Ljava/lang/String;
            astore 12 /* idText */
        start local 12 // java.lang.String idText
        30: .line 402
            aload 12 /* idText */
            invokevirtual java.lang.String.isEmpty:()Z
            ifeq 32
        31: .line 403
            goto 42
        32: .line 407
      StackMap locals: java.lang.String
      StackMap stack:
            aload 12 /* idText */
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
            istore 13 /* id */
        start local 13 // int id
        33: .line 408
            goto 36
        end local 13 // int id
      StackMap locals:
      StackMap stack: java.lang.Exception
        34: pop
        35: .line 409
            goto 42
        start local 13 // int id
        36: .line 411
      StackMap locals: int
      StackMap stack:
            iload 13 /* id */
            iconst_2
            if_icmpne 39
        37: .line 414
            iconst_1
            istore 9 /* v2SignatureGenerated */
        38: .line 415
            goto 43
        39: .line 417
      StackMap locals:
      StackMap stack:
            iload 13 /* id */
            iconst_3
            if_icmpne 42
        40: .line 420
            iconst_1
            istore 10 /* v3SignatureGenerated */
        41: .line 421
            goto 43
        end local 13 // int id
        end local 12 // java.lang.String idText
        42: .line 400
      StackMap locals:
      StackMap stack:
            aload 11 /* tokenizer */
            invokevirtual java.util.StringTokenizer.hasMoreTokens:()Z
            ifne 29
        43: .line 425
      StackMap locals:
      StackMap stack:
            iload 9 /* v2SignatureGenerated */
            ifeq 48
        44: .line 426
            new java.lang.SecurityException
            dup
            new java.lang.StringBuilder
            dup
            aload 2 /* signatureFile */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " indicates "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.jarName:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        45: .line 427
            ldc " is signed using APK Signature Scheme v2, but no such signature was"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        46: .line 428
            ldc " found. Signature stripped?"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        47: .line 426
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
            athrow
        48: .line 430
      StackMap locals:
      StackMap stack:
            iload 10 /* v3SignatureGenerated */
            ifeq 53
        49: .line 431
            new java.lang.SecurityException
            dup
            new java.lang.StringBuilder
            dup
            aload 2 /* signatureFile */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc " indicates "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.jarName:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        50: .line 432
            ldc " is signed using APK Signature Scheme v3, but no such signature was"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        51: .line 433
            ldc " found. Signature stripped?"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        52: .line 431
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
            athrow
        end local 11 // java.util.StringTokenizer tokenizer
        end local 10 // boolean v3SignatureGenerated
        end local 9 // boolean v2SignatureGenerated
        end local 8 // java.lang.String apkSignatureSchemeIdList
        53: .line 439
      StackMap locals: android.util.jar.StrictJarVerifier java.lang.String java.lang.String byte[] byte[] byte[] java.util.jar.Attributes java.util.HashMap
      StackMap stack:
            aload 6 /* attributes */
            getstatic java.util.jar.Attributes$Name.SIGNATURE_VERSION:Ljava/util/jar/Attributes$Name;
            invokevirtual java.util.jar.Attributes.get:(Ljava/lang/Object;)Ljava/lang/Object;
            ifnonnull 55
        54: .line 440
            return
        55: .line 443
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 8 /* createdBySigntool */
        start local 8 // boolean createdBySigntool
        56: .line 444
            aload 6 /* attributes */
            ldc "Created-By"
            invokevirtual java.util.jar.Attributes.getValue:(Ljava/lang/String;)Ljava/lang/String;
            astore 9 /* createdBy */
        start local 9 // java.lang.String createdBy
        57: .line 445
            aload 9 /* createdBy */
            ifnull 61
        58: .line 446
            aload 9 /* createdBy */
            ldc "signtool"
            invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
            iconst_m1
            if_icmpeq 59
            iconst_1
            goto 60
      StackMap locals: int java.lang.String
      StackMap stack:
        59: iconst_0
      StackMap locals:
      StackMap stack: int
        60: istore 8 /* createdBySigntool */
        61: .line 453
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.mainAttributesEnd:I
            ifle 65
            iload 8 /* createdBySigntool */
            ifne 65
        62: .line 454
            ldc "-Digest-Manifest-Main-Attributes"
            astore 10 /* digestAttribute */
        start local 10 // java.lang.String digestAttribute
        63: .line 455
            aload 0 /* this */
            aload 6 /* attributes */
            aload 10 /* digestAttribute */
            aload 4 /* manifestBytes */
            iconst_0
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.mainAttributesEnd:I
            iconst_0
            iconst_1
            invokevirtual android.util.jar.StrictJarVerifier.verify:(Ljava/util/jar/Attributes;Ljava/lang/String;[BIIZZ)Z
            ifne 65
        64: .line 456
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.jarName:Ljava/lang/String;
            aload 2 /* signatureFile */
            invokestatic android.util.jar.StrictJarVerifier.failedVerification:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/SecurityException;
            athrow
        end local 10 // java.lang.String digestAttribute
        65: .line 461
      StackMap locals:
      StackMap stack:
            iload 8 /* createdBySigntool */
            ifeq 66
            ldc "-Digest"
            goto 67
      StackMap locals:
      StackMap stack:
        66: ldc "-Digest-Manifest"
      StackMap locals:
      StackMap stack: java.lang.String
        67: astore 10 /* digestAttribute */
        start local 10 // java.lang.String digestAttribute
        68: .line 462
            aload 0 /* this */
            aload 6 /* attributes */
            aload 10 /* digestAttribute */
            aload 4 /* manifestBytes */
            iconst_0
            aload 4 /* manifestBytes */
            arraylength
            iconst_0
            iconst_0
            invokevirtual android.util.jar.StrictJarVerifier.verify:(Ljava/util/jar/Attributes;Ljava/lang/String;[BIIZZ)Z
            ifne 81
        69: .line 463
            aload 7 /* entries */
            invokevirtual java.util.HashMap.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 11 /* it */
        start local 11 // java.util.Iterator it
        70: .line 464
            goto 80
        71: .line 465
      StackMap locals: java.lang.String java.util.Iterator
      StackMap stack:
            aload 11 /* it */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 12 /* entry */
        start local 12 // java.util.Map$Entry entry
        72: .line 466
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.manifest:Landroid/util/jar/StrictJarManifest;
            aload 12 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            invokevirtual android.util.jar.StrictJarManifest.getChunk:(Ljava/lang/String;)Landroid/util/jar/StrictJarManifest$Chunk;
            astore 13 /* chunk */
        start local 13 // android.util.jar.StrictJarManifest$Chunk chunk
        73: .line 467
            aload 13 /* chunk */
            ifnonnull 75
        74: .line 468
            return
        75: .line 470
      StackMap locals: java.util.Map$Entry android.util.jar.StrictJarManifest$Chunk
      StackMap stack:
            aload 0 /* this */
            aload 12 /* entry */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.jar.Attributes
            ldc "-Digest"
            aload 4 /* manifestBytes */
        76: .line 471
            aload 13 /* chunk */
            getfield android.util.jar.StrictJarManifest$Chunk.start:I
            aload 13 /* chunk */
            getfield android.util.jar.StrictJarManifest$Chunk.end:I
            iload 8 /* createdBySigntool */
            iconst_0
        77: .line 470
            invokevirtual android.util.jar.StrictJarVerifier.verify:(Ljava/util/jar/Attributes;Ljava/lang/String;[BIIZZ)Z
        78: .line 471
            ifne 80
        79: .line 472
            aload 2 /* signatureFile */
            aload 12 /* entry */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.String
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.jarName:Ljava/lang/String;
            invokestatic android.util.jar.StrictJarVerifier.invalidDigest:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/SecurityException;
            athrow
        end local 13 // android.util.jar.StrictJarManifest$Chunk chunk
        end local 12 // java.util.Map$Entry entry
        80: .line 464
      StackMap locals:
      StackMap stack:
            aload 11 /* it */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 71
        end local 11 // java.util.Iterator it
        81: .line 476
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            aload 2 /* signatureFile */
            aconst_null
            invokevirtual java.util.HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        82: .line 477
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.signatures:Ljava/util/Hashtable;
            aload 2 /* signatureFile */
            aload 7 /* entries */
            invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        83: .line 478
            return
        end local 10 // java.lang.String digestAttribute
        end local 9 // java.lang.String createdBy
        end local 8 // boolean createdBySigntool
        end local 7 // java.util.HashMap entries
        end local 6 // java.util.jar.Attributes attributes
        end local 5 // byte[] sBlockBytes
        end local 4 // byte[] manifestBytes
        end local 3 // byte[] sfBytes
        end local 2 // java.lang.String signatureFile
        end local 1 // java.lang.String certFile
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot                      Name  Signature
            0   84     0                      this  Landroid/util/jar/StrictJarVerifier;
            0   84     1                  certFile  Ljava/lang/String;
            1   84     2             signatureFile  Ljava/lang/String;
            2   84     3                   sfBytes  [B
            5   84     4             manifestBytes  [B
            8   84     5               sBlockBytes  [B
            9   11     6           signerCertChain  [Ljava/security/cert/Certificate;
           13   14     6                         e  Ljava/security/GeneralSecurityException;
           15   84     6                attributes  Ljava/util/jar/Attributes;
           16   84     7                   entries  Ljava/util/HashMap<Ljava/lang/String;Ljava/util/jar/Attributes;>;
           17   18     8                        im  Landroid/util/jar/StrictJarManifestReader;
           24   53     8  apkSignatureSchemeIdList  Ljava/lang/String;
           26   53     9      v2SignatureGenerated  Z
           27   53    10      v3SignatureGenerated  Z
           28   53    11                 tokenizer  Ljava/util/StringTokenizer;
           30   42    12                    idText  Ljava/lang/String;
           33   34    13                        id  I
           36   42    13                        id  I
           56   84     8         createdBySigntool  Z
           57   84     9                 createdBy  Ljava/lang/String;
           63   65    10           digestAttribute  Ljava/lang/String;
           68   84    10           digestAttribute  Ljava/lang/String;
           70   81    11                        it  Ljava/util/Iterator<Ljava/util/Map$Entry<Ljava/lang/String;Ljava/util/jar/Attributes;>;>;
           72   80    12                     entry  Ljava/util/Map$Entry<Ljava/lang/String;Ljava/util/jar/Attributes;>;
           73   80    13                     chunk  Landroid/util/jar/StrictJarManifest$Chunk;
      Exception table:
        from    to  target  type
           8    11      12  Class java.security.GeneralSecurityException
          16    18      19  Class java.io.IOException
          32    33      34  Class java.lang.Exception
    MethodParameters:
          Name  Flags
      certFile  

  boolean isSignedJar();
    descriptor: ()Z
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.util.jar.StrictJarVerifier this
         0: .line 488
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.certificates:Ljava/util/Hashtable;
            invokevirtual java.util.Hashtable.size:()I
            ifle 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/util/jar/StrictJarVerifier;

  private boolean verify(java.util.jar.Attributes, java.lang.String, byte[], int, int, boolean, boolean);
    descriptor: (Ljava/util/jar/Attributes;Ljava/lang/String;[BIIZZ)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=14, args_size=8
        start local 0 // android.util.jar.StrictJarVerifier this
        start local 1 // java.util.jar.Attributes attributes
        start local 2 // java.lang.String entry
        start local 3 // byte[] data
        start local 4 // int start
        start local 5 // int end
        start local 6 // boolean ignoreSecondEndline
        start local 7 // boolean ignorable
         0: .line 493
            iconst_0
            istore 8 /* i */
        start local 8 // int i
         1: goto 18
         2: .line 494
      StackMap locals: int
      StackMap stack:
            getstatic android.util.jar.StrictJarVerifier.DIGEST_ALGORITHMS:[Ljava/lang/String;
            iload 8 /* i */
            aaload
            astore 9 /* algorithm */
        start local 9 // java.lang.String algorithm
         3: .line 495
            aload 1 /* attributes */
            new java.lang.StringBuilder
            dup
            aload 9 /* algorithm */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* entry */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.util.jar.Attributes.getValue:(Ljava/lang/String;)Ljava/lang/String;
            astore 10 /* hash */
        start local 10 // java.lang.String hash
         4: .line 496
            aload 10 /* hash */
            ifnonnull 6
         5: .line 497
            goto 17
         6: .line 502
      StackMap locals: java.lang.String java.lang.String
      StackMap stack:
            aload 9 /* algorithm */
            invokestatic java.security.MessageDigest.getInstance:(Ljava/lang/String;)Ljava/security/MessageDigest;
            astore 11 /* md */
        start local 11 // java.security.MessageDigest md
         7: .line 503
            goto 10
        end local 11 // java.security.MessageDigest md
      StackMap locals:
      StackMap stack: java.security.NoSuchAlgorithmException
         8: pop
         9: .line 504
            goto 17
        start local 11 // java.security.MessageDigest md
        10: .line 506
      StackMap locals: java.security.MessageDigest
      StackMap stack:
            iload 6 /* ignoreSecondEndline */
            ifeq 13
            aload 3 /* data */
            iload 5 /* end */
            iconst_1
            isub
            baload
            bipush 10
            if_icmpne 13
            aload 3 /* data */
            iload 5 /* end */
            iconst_2
            isub
            baload
            bipush 10
            if_icmpne 13
        11: .line 507
            aload 11 /* md */
            aload 3 /* data */
            iload 4 /* start */
            iload 5 /* end */
            iconst_1
            isub
            iload 4 /* start */
            isub
            invokevirtual java.security.MessageDigest.update:([BII)V
        12: .line 508
            goto 14
        13: .line 509
      StackMap locals:
      StackMap stack:
            aload 11 /* md */
            aload 3 /* data */
            iload 4 /* start */
            iload 5 /* end */
            iload 4 /* start */
            isub
            invokevirtual java.security.MessageDigest.update:([BII)V
        14: .line 511
      StackMap locals:
      StackMap stack:
            aload 11 /* md */
            invokevirtual java.security.MessageDigest.digest:()[B
            astore 12 /* b */
        start local 12 // byte[] b
        15: .line 512
            aload 10 /* hash */
            getstatic java.nio.charset.StandardCharsets.ISO_8859_1:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            astore 13 /* encodedHashBytes */
        start local 13 // byte[] encodedHashBytes
        16: .line 513
            aload 12 /* b */
            aload 13 /* encodedHashBytes */
            invokestatic android.util.jar.StrictJarVerifier.verifyMessageDigest:([B[B)Z
            ireturn
        end local 13 // byte[] encodedHashBytes
        end local 12 // byte[] b
        end local 11 // java.security.MessageDigest md
        end local 10 // java.lang.String hash
        end local 9 // java.lang.String algorithm
        17: .line 493
      StackMap locals:
      StackMap stack:
            iinc 8 /* i */ 1
      StackMap locals:
      StackMap stack:
        18: iload 8 /* i */
            getstatic android.util.jar.StrictJarVerifier.DIGEST_ALGORITHMS:[Ljava/lang/String;
            arraylength
            if_icmplt 2
        end local 8 // int i
        19: .line 515
            iload 7 /* ignorable */
            ireturn
        end local 7 // boolean ignorable
        end local 6 // boolean ignoreSecondEndline
        end local 5 // int end
        end local 4 // int start
        end local 3 // byte[] data
        end local 2 // java.lang.String entry
        end local 1 // java.util.jar.Attributes attributes
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   20     0                 this  Landroid/util/jar/StrictJarVerifier;
            0   20     1           attributes  Ljava/util/jar/Attributes;
            0   20     2                entry  Ljava/lang/String;
            0   20     3                 data  [B
            0   20     4                start  I
            0   20     5                  end  I
            0   20     6  ignoreSecondEndline  Z
            0   20     7            ignorable  Z
            1   19     8                    i  I
            3   17     9            algorithm  Ljava/lang/String;
            4   17    10                 hash  Ljava/lang/String;
            7    8    11                   md  Ljava/security/MessageDigest;
           10   17    11                   md  Ljava/security/MessageDigest;
           15   17    12                    b  [B
           16   17    13     encodedHashBytes  [B
      Exception table:
        from    to  target  type
           6     7       8  Class java.security.NoSuchAlgorithmException
    MethodParameters:
                     Name  Flags
      attributes           
      entry                
      data                 
      start                
      end                  
      ignoreSecondEndline  
      ignorable            

  private static boolean verifyMessageDigest(byte[], byte[]);
    descriptor: ([B[B)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // byte[] expected
        start local 1 // byte[] encodedActual
         0: .line 521
            invokestatic java.util.Base64.getDecoder:()Ljava/util/Base64$Decoder;
            aload 1 /* encodedActual */
            invokevirtual java.util.Base64$Decoder.decode:([B)[B
            astore 2 /* actual */
        start local 2 // byte[] actual
         1: .line 522
            goto 4
        end local 2 // byte[] actual
      StackMap locals:
      StackMap stack: java.lang.IllegalArgumentException
         2: pop
         3: .line 523
            iconst_0
            ireturn
        start local 2 // byte[] actual
         4: .line 525
      StackMap locals: byte[]
      StackMap stack:
            aload 0 /* expected */
            aload 2 /* actual */
            invokestatic java.security.MessageDigest.isEqual:([B[B)Z
            ireturn
        end local 2 // byte[] actual
        end local 1 // byte[] encodedActual
        end local 0 // byte[] expected
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    5     0       expected  [B
            0    5     1  encodedActual  [B
            1    2     2         actual  [B
            4    5     2         actual  [B
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.IllegalArgumentException
    MethodParameters:
               Name  Flags
      expected       
      encodedActual  

  java.security.cert.Certificate[][] getCertificateChains(java.lang.String);
    descriptor: (Ljava/lang/String;)[[Ljava/security/cert/Certificate;
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.util.jar.StrictJarVerifier this
        start local 1 // java.lang.String name
         0: .line 538
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.verifiedEntries:Ljava/util/Hashtable;
            aload 1 /* name */
            invokevirtual java.util.Hashtable.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.security.cert.Certificate[][]
            areturn
        end local 1 // java.lang.String name
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/util/jar/StrictJarVerifier;
            0    1     1  name  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      name  

  void removeMetaEntries();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.util.jar.StrictJarVerifier this
         0: .line 546
            aload 0 /* this */
            getfield android.util.jar.StrictJarVerifier.metaEntries:Ljava/util/HashMap;
            invokevirtual java.util.HashMap.clear:()V
         1: .line 547
            return
        end local 0 // android.util.jar.StrictJarVerifier this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/util/jar/StrictJarVerifier;
}
SourceFile: "StrictJarVerifier.java"
NestMembers:
  android.util.jar.StrictJarVerifier$VerifierEntry
InnerClasses:
  final Chunk = android.util.jar.StrictJarManifest$Chunk of android.util.jar.StrictJarManifest
  VerifierEntry = android.util.jar.StrictJarVerifier$VerifierEntry of android.util.jar.StrictJarVerifier
  public Decoder = java.util.Base64$Decoder of java.util.Base64
  public abstract Entry = java.util.Map$Entry of java.util.Map
  public Name = java.util.jar.Attributes$Name of java.util.jar.Attributes