public abstract class android.security.keystore.AttestationUtils
minor version: 0
major version: 59
flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
this_class: android.security.keystore.AttestationUtils
super_class: java.lang.Object
{
public static final int ID_TYPE_SERIAL;
descriptor: I
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: 1
public static final int ID_TYPE_IMEI;
descriptor: I
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: 2
public static final int ID_TYPE_MEID;
descriptor: I
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: 3
private void <init>();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Landroid/security/keystore/AttestationUtils;
public static java.security.cert.X509Certificate[] parseCertificateChain(android.security.keymaster.KeymasterCertificateChain);
descriptor: (Landroid/security/keymaster/KeymasterCertificateChain;)[Ljava/security/cert/X509Certificate;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=5, locals=5, args_size=1
start local 0 0: aload 0
invokevirtual android.security.keymaster.KeymasterCertificateChain.getCertificates:()Ljava/util/List;
astore 1
start local 1 1: aload 1
invokeinterface java.util.Collection.size:()I
iconst_2
if_icmpge 5
2: new android.security.keystore.KeyAttestationException
dup
new java.lang.StringBuilder
dup
ldc "Attestation certificate chain contained "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
3: aload 1
invokeinterface java.util.Collection.size:()I
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
ldc " entries. At least two are required."
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
4: invokespecial android.security.keystore.KeyAttestationException.<init>:(Ljava/lang/String;)V
athrow
5: StackMap locals: java.util.Collection
StackMap stack:
new java.io.ByteArrayOutputStream
dup
invokespecial java.io.ByteArrayOutputStream.<init>:()V
astore 2
start local 2 6: aload 1
invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
astore 4
goto 9
StackMap locals: android.security.keymaster.KeymasterCertificateChain java.util.Collection java.io.ByteArrayOutputStream top java.util.Iterator
StackMap stack:
7: aload 4
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast byte[]
astore 3
start local 3 8: aload 2
aload 3
invokevirtual java.io.ByteArrayOutputStream.write:([B)V
end local 3 9: StackMap locals:
StackMap stack:
aload 4
invokeinterface java.util.Iterator.hasNext:()Z
ifne 7
10: ldc "X.509"
invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
11: new java.io.ByteArrayInputStream
dup
aload 2
invokevirtual java.io.ByteArrayOutputStream.toByteArray:()[B
invokespecial java.io.ByteArrayInputStream.<init>:([B)V
12: invokevirtual java.security.cert.CertificateFactory.generateCertificates:(Ljava/io/InputStream;)Ljava/util/Collection;
13: iconst_0
anewarray java.security.cert.X509Certificate
invokeinterface java.util.Collection.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
checkcast java.security.cert.X509Certificate[]
14: areturn
15: StackMap locals: android.security.keymaster.KeymasterCertificateChain java.util.Collection java.io.ByteArrayOutputStream
StackMap stack: java.lang.Exception
astore 3
start local 3 16: new android.security.keystore.KeyAttestationException
dup
ldc "Unable to construct certificate chain"
aload 3
invokespecial android.security.keystore.KeyAttestationException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 17 0 kmChain Landroid/security/keymaster/KeymasterCertificateChain;
1 17 1 rawChain Ljava/util/Collection<[B>;
6 17 2 concatenatedRawChain Ljava/io/ByteArrayOutputStream;
8 9 3 cert [B
16 17 3 e Ljava/lang/Exception;
Exception table:
from to target type
6 14 15 Class java.lang.Exception
Exceptions:
throws android.security.keystore.KeyAttestationException
MethodParameters:
Name Flags
kmChain final
private static android.security.keymaster.KeymasterArguments prepareAttestationArgumentsForDeviceId(android.content.Context, int[], byte[]);
descriptor: (Landroid/content/Context;[I[B)Landroid/security/keymaster/KeymasterArguments;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 1
ifnonnull 2
1: new java.lang.NullPointerException
dup
ldc "Missing id types"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
aload 1
aload 2
invokestatic android.security.keystore.AttestationUtils.prepareAttestationArguments:(Landroid/content/Context;[I[B)Landroid/security/keymaster/KeymasterArguments;
areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 context Landroid/content/Context;
0 3 1 idTypes [I
0 3 2 attestationChallenge [B
Exceptions:
throws android.security.keystore.DeviceIdAttestationException
MethodParameters:
Name Flags
context
idTypes
attestationChallenge
public static android.security.keymaster.KeymasterArguments prepareAttestationArguments(android.content.Context, int[], byte[]);
descriptor: (Landroid/content/Context;[I[B)Landroid/security/keymaster/KeymasterArguments;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=4, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
aload 1
aload 2
getstatic android.os.Build.BRAND:Ljava/lang/String;
invokestatic android.security.keystore.AttestationUtils.prepareAttestationArguments:(Landroid/content/Context;[I[BLjava/lang/String;)Landroid/security/keymaster/KeymasterArguments;
areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 context Landroid/content/Context;
0 1 1 idTypes [I
0 1 2 attestationChallenge [B
Exceptions:
throws android.security.keystore.DeviceIdAttestationException
MethodParameters:
Name Flags
context
idTypes
attestationChallenge
public static android.security.keymaster.KeymasterArguments prepareAttestationArgumentsIfMisprovisioned(android.content.Context, int[], byte[]);
descriptor: (Landroid/content/Context;[I[B)Landroid/security/keymaster/KeymasterArguments;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=3, args_size=3
0: new java.lang.Error
dup
ldc "Unresolved compilation problem: \n\tcom.android.internal.R.string cannot be resolved to a variable\n"
invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
athrow
LocalVariableTable:
Start End Slot Name Signature
Exceptions:
throws android.security.keystore.DeviceIdAttestationException
MethodParameters:
Name Flags
context
idTypes
attestationChallenge
private static boolean isPotentiallyMisprovisionedDevice(android.content.Context);
descriptor: (Landroid/content/Context;)Z
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=1, args_size=1
0: new java.lang.Error
dup
ldc "Unresolved compilation problems: \n\tcom.android.internal.R.string cannot be resolved to a variable\n\tcom.android.internal.R.string cannot be resolved to a variable\n"
invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
athrow
LocalVariableTable:
Start End Slot Name Signature
MethodParameters:
Name Flags
context
private static android.security.keymaster.KeymasterArguments prepareAttestationArguments(android.content.Context, int[], byte[], java.lang.String);
descriptor: (Landroid/content/Context;[I[BLjava/lang/String;)Landroid/security/keymaster/KeymasterArguments;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=5, locals=10, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 2
ifnonnull 2
1: new java.lang.NullPointerException
dup
ldc "Missing attestation challenge"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
new android.security.keymaster.KeymasterArguments
dup
invokespecial android.security.keymaster.KeymasterArguments.<init>:()V
astore 4
start local 4 3: aload 4
ldc -1879047484
aload 2
invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
4: aload 1
ifnonnull 6
5: aload 4
areturn
6: StackMap locals: android.security.keymaster.KeymasterArguments
StackMap stack:
new android.util.ArraySet
dup
aload 1
arraylength
invokespecial android.util.ArraySet.<init>:(I)V
astore 5
start local 5 7: aload 1
dup
astore 9
arraylength
istore 8
iconst_0
istore 7
goto 11
StackMap locals: android.content.Context int[] byte[] java.lang.String android.security.keymaster.KeymasterArguments java.util.Set top int int int[]
StackMap stack:
8: aload 9
iload 7
iaload
istore 6
start local 6 9: aload 5
iload 6
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
end local 6 10: iinc 7 1
StackMap locals:
StackMap stack:
11: iload 7
iload 8
if_icmplt 8
12: aconst_null
astore 6
start local 6 13: aload 5
iconst_2
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
ifne 14
aload 5
iconst_3
invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
ifeq 19
14: StackMap locals: android.content.Context int[] byte[] java.lang.String android.security.keymaster.KeymasterArguments java.util.Set android.telephony.TelephonyManager
StackMap stack:
aload 0
15: ldc "phone"
16: invokevirtual android.content.Context.getSystemService:(Ljava/lang/String;)Ljava/lang/Object;
checkcast android.telephony.TelephonyManager
astore 6
17: aload 6
ifnonnull 19
18: new android.security.keystore.DeviceIdAttestationException
dup
ldc "Unable to access telephony service"
invokespecial android.security.keystore.DeviceIdAttestationException.<init>:(Ljava/lang/String;)V
athrow
19: StackMap locals:
StackMap stack:
aload 5
invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
astore 8
goto 41
StackMap locals: android.content.Context int[] byte[] java.lang.String android.security.keymaster.KeymasterArguments java.util.Set android.telephony.TelephonyManager top java.util.Iterator
StackMap stack:
20: aload 8
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast java.lang.Integer
astore 7
start local 7 21: aload 7
invokevirtual java.lang.Integer.intValue:()I
tableswitch { // 1 - 3
1: 22
2: 26
3: 33
default: 40
}
22: StackMap locals: android.content.Context int[] byte[] java.lang.String android.security.keymaster.KeymasterArguments java.util.Set android.telephony.TelephonyManager java.lang.Integer java.util.Iterator
StackMap stack:
aload 4
ldc -1879047479
23: invokestatic android.os.Build.getSerial:()Ljava/lang/String;
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
24: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
25: goto 41
26: StackMap locals:
StackMap stack:
aload 6
iconst_0
invokevirtual android.telephony.TelephonyManager.getImei:(I)Ljava/lang/String;
astore 9
start local 9 27: aload 9
ifnonnull 29
28: new android.security.keystore.DeviceIdAttestationException
dup
ldc "Unable to retrieve IMEI"
invokespecial android.security.keystore.DeviceIdAttestationException.<init>:(Ljava/lang/String;)V
athrow
29: StackMap locals: java.lang.String
StackMap stack:
aload 4
ldc -1879047478
30: aload 9
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
31: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
32: goto 41
end local 9 33: StackMap locals:
StackMap stack:
aload 6
iconst_0
invokevirtual android.telephony.TelephonyManager.getMeid:(I)Ljava/lang/String;
astore 9
start local 9 34: aload 9
ifnonnull 36
35: new android.security.keystore.DeviceIdAttestationException
dup
ldc "Unable to retrieve MEID"
invokespecial android.security.keystore.DeviceIdAttestationException.<init>:(Ljava/lang/String;)V
athrow
36: StackMap locals: java.lang.String
StackMap stack:
aload 4
ldc -1879047477
37: aload 9
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
38: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
39: goto 41
end local 9 40: StackMap locals:
StackMap stack:
new java.lang.IllegalArgumentException
dup
new java.lang.StringBuilder
dup
ldc "Unknown device ID type "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 7
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
end local 7 41: StackMap locals: android.content.Context int[] byte[] java.lang.String android.security.keymaster.KeymasterArguments java.util.Set android.telephony.TelephonyManager top java.util.Iterator
StackMap stack:
aload 8
invokeinterface java.util.Iterator.hasNext:()Z
ifne 20
42: aload 4
ldc -1879047482
43: aload 3
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
44: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
45: aload 4
ldc -1879047481
46: getstatic android.os.Build.DEVICE:Ljava/lang/String;
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
47: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
48: aload 4
ldc -1879047480
49: getstatic android.os.Build.PRODUCT:Ljava/lang/String;
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
50: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
51: aload 4
ldc -1879047476
52: getstatic android.os.Build.MANUFACTURER:Ljava/lang/String;
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
53: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
54: aload 4
ldc -1879047475
55: getstatic android.os.Build.MODEL:Ljava/lang/String;
getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
56: invokevirtual android.security.keymaster.KeymasterArguments.addBytes:(I[B)V
57: aload 4
areturn
end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 58 0 context Landroid/content/Context;
0 58 1 idTypes [I
0 58 2 attestationChallenge [B
0 58 3 brand Ljava/lang/String;
3 58 4 attestArgs Landroid/security/keymaster/KeymasterArguments;
7 58 5 idTypesSet Ljava/util/Set<Ljava/lang/Integer;>;
9 10 6 idType I
13 58 6 telephonyService Landroid/telephony/TelephonyManager;
21 41 7 idType Ljava/lang/Integer;
27 33 9 imei Ljava/lang/String;
34 40 9 meid Ljava/lang/String;
Exceptions:
throws android.security.keystore.DeviceIdAttestationException
MethodParameters:
Name Flags
context
idTypes
attestationChallenge
brand
public static java.security.cert.X509Certificate[] attestDeviceIds(android.content.Context, int[], byte[]);
descriptor: (Landroid/content/Context;[I[B)[Ljava/security/cert/X509Certificate;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=3, args_size=3
0: new java.lang.Error
dup
ldc "Unresolved compilation problem: \n\tManifest cannot be resolved to a variable\n"
invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
athrow
LocalVariableTable:
Start End Slot Name Signature
Exceptions:
throws android.security.keystore.DeviceIdAttestationException
MethodParameters:
Name Flags
context
idTypes
attestationChallenge
public static boolean isChainValid(android.security.keymaster.KeymasterCertificateChain);
descriptor: (Landroid/security/keymaster/KeymasterCertificateChain;)Z
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
ifnull 1
aload 0
invokevirtual android.security.keymaster.KeymasterCertificateChain.getCertificates:()Ljava/util/List;
invokeinterface java.util.List.size:()I
iconst_2
if_icmplt 1
iconst_1
ireturn
StackMap locals:
StackMap stack:
1: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 chain Landroid/security/keymaster/KeymasterCertificateChain;
MethodParameters:
Name Flags
chain
}
SourceFile: "AttestationUtils.java"
RuntimeVisibleAnnotations:
android.annotation.SystemApi()