1 | package com.yubico.fido.metadata; | |
2 | ||
3 | import com.fasterxml.jackson.annotation.JsonCreator; | |
4 | import com.fasterxml.jackson.annotation.JsonValue; | |
5 | import java.util.regex.Pattern; | |
6 | import lombok.Value; | |
7 | ||
8 | /** | |
9 | * Each UAF authenticator MUST have an AAID to identify UAF enabled authenticator models globally. | |
10 | * The AAID MUST uniquely identify a specific authenticator model within the range of all | |
11 | * UAF-enabled authenticator models made by all authenticator vendors, where authenticators of a | |
12 | * specific model must share identical security characteristics within the model (see Security | |
13 | * Considerations). | |
14 | * | |
15 | * <p>The AAID is a string with format <code>"V#M"</code>, where | |
16 | * | |
17 | * <ul> | |
18 | * <li><code>#</code> is a separator | |
19 | * <li><code>V</code> indicates the authenticator Vendor Code. This code consists of 4 hexadecimal | |
20 | * digits. | |
21 | * <li><code>M</code> indicates the authenticator Model Code. This code consists of 4 hexadecimal | |
22 | * digits. | |
23 | * </ul> | |
24 | * | |
25 | * @see <a | |
26 | * href="https://fidoalliance.org/specs/fido-uaf-v1.2-ps-20201020/fido-uaf-protocol-v1.2-ps-20201020.html#authenticator-attestation-id-aaid-typedef">FIDO | |
27 | * UAF Protocol Specification §3.1.4 Authenticator Attestation ID (AAID) typedef</a> | |
28 | */ | |
29 | @Value | |
30 | public class AAID { | |
31 | ||
32 | private static final Pattern AAID_PATTERN = Pattern.compile("^[0-9a-fA-F]{4}#[0-9a-fA-F]{4}$"); | |
33 | ||
34 | /** | |
35 | * The underlying string value of this AAID. | |
36 | * | |
37 | * <p>The AAID is a string with format <code>"V#M"</code>, where | |
38 | * | |
39 | * <ul> | |
40 | * <li><code>#</code> is a separator | |
41 | * <li><code>V</code> indicates the authenticator Vendor Code. This code consists of 4 | |
42 | * hexadecimal digits. | |
43 | * <li><code>M</code> indicates the authenticator Model Code. This code consists of 4 | |
44 | * hexadecimal digits. | |
45 | * </ul> | |
46 | * | |
47 | * @see <a | |
48 | * href="https://fidoalliance.org/specs/fido-uaf-v1.2-ps-20201020/fido-uaf-protocol-v1.2-ps-20201020.html#authenticator-attestation-id-aaid-typedef">Authenticator | |
49 | * Attestation ID (AAID) typedef</a> | |
50 | */ | |
51 | @JsonValue String value; | |
52 | ||
53 | /** | |
54 | * Construct an {@link AAID} from its String representation. | |
55 | * | |
56 | * <p>This is the inverse of {@link #getValue()}. | |
57 | * | |
58 | * @param value a {@link String} conforming to the rules specified in the {@link AAID} type. | |
59 | */ | |
60 | @JsonCreator | |
61 | public AAID(String value) { | |
62 | this.value = validate(value); | |
63 | } | |
64 | ||
65 | private String validate(String value) { | |
66 |
1
1. validate : negated conditional → KILLED |
if (AAID_PATTERN.matcher(value).matches()) { |
67 |
1
1. validate : replaced return value with "" for com/yubico/fido/metadata/AAID::validate → KILLED |
return value; |
68 | } else { | |
69 | throw new IllegalArgumentException( | |
70 | String.format("Value does not satisfy AAID format: %s", value)); | |
71 | } | |
72 | } | |
73 | } | |
Mutations | ||
66 |
1.1 |
|
67 |
1.1 |