@@ -131,6 +131,7 @@ public class AuthorizationList {
131
131
private static final int KM_TAG_ATTESTATION_ID_MODEL = KM_BYTES | 717 ;
132
132
private static final int KM_TAG_VENDOR_PATCHLEVEL = KM_UINT | 718 ;
133
133
private static final int KM_TAG_BOOT_PATCHLEVEL = KM_UINT | 719 ;
134
+ private static final int KM_TAG_DEVICE_UNIQUE_ATTESTATION = KM_BOOL | 720 ;
134
135
135
136
// Map for converting padding values to strings
136
137
private static final ImmutableMap <Integer , String > paddingMap = ImmutableMap
@@ -198,6 +199,7 @@ public class AuthorizationList {
198
199
private String model ;
199
200
private boolean userPresenceRequired ;
200
201
private boolean confirmationRequired ;
202
+ private boolean individualAttestation ;
201
203
202
204
@ RequiresApi (api = VERSION_CODES .N )
203
205
public AuthorizationList (ASN1Encodable sequence ) throws CertificateParsingException {
@@ -323,6 +325,9 @@ public AuthorizationList(ASN1Encodable sequence) throws CertificateParsingExcept
323
325
case KM_TAG_TRUSTED_CONFIRMATION_REQUIRED & KEYMASTER_TAG_TYPE_MASK :
324
326
confirmationRequired = true ;
325
327
break ;
328
+ case KM_TAG_DEVICE_UNIQUE_ATTESTATION & KEYMASTER_TAG_TYPE_MASK :
329
+ individualAttestation = true ;
330
+ break ;
326
331
}
327
332
}
328
333
@@ -600,6 +605,10 @@ public boolean isConfirmationRequired() {
600
605
return confirmationRequired ;
601
606
}
602
607
608
+ public boolean isIndividualAttestation () {
609
+ return individualAttestation ;
610
+ }
611
+
603
612
private String getStringFromAsn1Value (ASN1Primitive value ) throws CertificateParsingException {
604
613
try {
605
614
return Asn1Utils .getStringFromAsn1OctetStreamAssumingUTF8 (value );
@@ -709,6 +718,10 @@ public String toString() {
709
718
s .append ("\n Confirmation required" );
710
719
}
711
720
721
+ if (individualAttestation ) {
722
+ s .append ("\n Individual attestation" );
723
+ }
724
+
712
725
if (brand != null ) {
713
726
s .append ("\n Brand: " ).append (brand );
714
727
}
0 commit comments