Skip to content

Commit 39d6842

Browse files
committedDec 30, 2021
Updated CSV format for the Trust Registry
1 parent 9fabcf3 commit 39d6842

File tree

1 file changed

+15
-41
lines changed

1 file changed

+15
-41
lines changed
 

‎app/src/main/java/org/who/ddccverifier/services/trust/TrustRegistry.kt

Lines changed: 15 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@ import java.net.URL
55
import java.security.PublicKey
66
import java.text.DateFormat
77
import java.text.SimpleDateFormat
8-
import com.fasterxml.jackson.annotation.JsonValue
98
import com.fasterxml.jackson.core.JsonParser
109
import com.fasterxml.jackson.databind.DeserializationContext
1110
import com.fasterxml.jackson.databind.JsonDeserializer
1211
import com.fasterxml.jackson.databind.JsonNode
13-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
1412
import com.nimbusds.jose.crypto.bc.BouncyCastleProviderSingleton
1513
import org.bouncycastle.jce.provider.BouncyCastleProvider
1614
import org.who.ddccverifier.BuildConfig
@@ -26,21 +24,11 @@ object TrustRegistry {
2624
// Using old java.time to keep compatibility down to Android SDK 22.
2725
private var df: DateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
2826

29-
enum class Status(@JsonValue val status: String) {
30-
CURRENT("current"), EXPIRED("expired"), TERMINATED("terminated"), REVOKED("revoked")
27+
enum class Status {
28+
CURRENT, EXPIRED, TERMINATED, REVOKED
3129
}
32-
enum class Type(@JsonValue val type: String) {
33-
ISSUER("issuer"), VERIFIER("verifier"), TRUST_REGISTRY("trust_registry")
34-
}
35-
enum class Framework(@JsonValue val framework: String) {
36-
CRED("CRED"),
37-
DCC("EUDCC"),
38-
ICAO("ICAO"),
39-
SHC("SmartHealthCards"),
40-
DIVOC("DIVOC");
41-
companion object {
42-
fun from(type: String?): Framework = values().find { it.framework == type } ?: DIVOC
43-
}
30+
enum class Framework {
31+
CRED, DCC, ICAO, SHC, DIVOC
4432
}
4533

4634
object DidDocumentDeserializer : JsonDeserializer<PublicKey>() {
@@ -62,25 +50,20 @@ object TrustRegistry {
6250
data class TrustedEntity(
6351
val displayName: Map<String, String>,
6452
val displayLogo: String?,
65-
val entityType: Type,
6653
val status: Status,
67-
val statusDetail: String?,
6854
val validFromDT: Date?,
6955
val validUntilDT: Date?,
70-
@JsonDeserialize(using = DidDocumentDeserializer::class)
71-
val didDocument: PublicKey,
72-
val credentialType: List<String>,
56+
val didDocument: PublicKey
7357
)
7458

7559
private const val COL_FRAMEWORK = 0
7660
private const val COL_KID = 1
77-
private const val COL_TYPE = 2
78-
private const val COL_STATUS = 3
79-
private const val COL_DISPLAY_NAME = 4
80-
private const val COL_DISPLAY_LOGO = 5
81-
private const val COL_VALID_FROM = 6
82-
private const val COL_VALID_UNTIL = 7
83-
private const val COL_PUBLIC_KEY = 8
61+
private const val COL_STATUS = 2
62+
private const val COL_DISPLAY_NAME = 3
63+
private const val COL_DISPLAY_LOGO = 4
64+
private const val COL_VALID_FROM = 5
65+
private const val COL_VALID_UNTIL = 6
66+
private const val COL_PUBLIC_KEY = 7
8467

8568
private val registry: MutableMap<Framework, MutableMap<String, TrustedEntity>> by lazy(LazyThreadSafetyMode.PUBLICATION) {
8669
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME)
@@ -100,19 +83,16 @@ object TrustRegistry {
10083
val reader = BufferedReader(InputStreamReader(resultCSVStream.openStream()))
10184
reader.forEachLine {
10285
val row = it.split(",")
103-
val framework = Framework.from(row[COL_FRAMEWORK])
86+
val framework = Framework.valueOf(row[COL_FRAMEWORK].uppercase())
10487
try {
10588
reg[framework]?.put(row[COL_KID],
10689
TrustedEntity(
10790
mapOf("en" to Base64.decode(row[COL_DISPLAY_NAME], Base64.DEFAULT).toString(Charsets.UTF_8)),
10891
Base64.decode(row[COL_DISPLAY_LOGO], Base64.DEFAULT).toString(Charsets.UTF_8),
109-
Type.valueOf(row[COL_TYPE].uppercase()),
11092
Status.valueOf(row[COL_STATUS].uppercase()),
111-
"",
11293
if (row[COL_VALID_FROM].isNotEmpty()) df.parse(row[COL_VALID_FROM]) else null,
11394
if (row[COL_VALID_UNTIL].isNotEmpty()) df.parse(row[COL_VALID_UNTIL]) else null,
114-
KeyUtils.publicKeyFromPEM("-----BEGIN PUBLIC KEY-----\n"+row[COL_PUBLIC_KEY]+"\n-----END PUBLIC KEY-----"),
115-
listOf("")
95+
KeyUtils.publicKeyFromPEM("-----BEGIN PUBLIC KEY-----\n"+row[COL_PUBLIC_KEY]+"\n-----END PUBLIC KEY-----")
11696
)
11797
)
11898
} catch(t: Throwable) {
@@ -130,9 +110,7 @@ object TrustRegistry {
130110
"MTE=", TrustedEntity(
131111
mapOf("en" to "Test Keys for the WHO\'s DDCC"),
132112
null,
133-
Type.ISSUER,
134113
Status.CURRENT,
135-
"WHO Test Keys",
136114
df.parse("2021-01-01T08:00:00.000Z"),
137115
df.parse("2021-12-01T08:00:00.000Z"),
138116
KeyUtils.ecPublicKeyFromCoordinate(
@@ -142,24 +120,20 @@ object TrustRegistry {
142120
"60f7f1a780d8a783bfb7a2dd6b2796e8128dbbcef9d3d168db9529971a36e7b9".chunked(2)
143121
.map { it.toInt(16).toByte() }
144122
.toByteArray()
145-
),
146-
listOf("VS")
123+
)
147124
)
148125
)
149126

150127
registry[Framework.SHC]?.put(
151128
"https://spec.smarthealth.cards/examples/issuer#3Kfdg-XwP-7gXyywtUfUADwBumDOPKMQx-iELL11W9s", TrustedEntity(
152129
mapOf("en" to "Test Keys for SHCs"),
153130
null,
154-
Type.ISSUER,
155131
Status.CURRENT,
156-
"SHC Test Keys",
157132
df.parse("2021-01-01T08:00:00.000Z"),
158133
df.parse("2021-12-01T08:00:00.000Z"),
159134
KeyUtils.ecPublicKeyFromCoordinate(
160135
"11XvRWy1I2S0EyJlyf_bWfw_TQ5CJJNLw78bHXNxcgw",
161-
"eZXwxvO1hvCY0KucrPfKo7yAyMT6Ajc3N7OkAB6VYy8"),
162-
listOf("VS")
136+
"eZXwxvO1hvCY0KucrPfKo7yAyMT6Ajc3N7OkAB6VYy8")
163137
)
164138
)
165139
}

0 commit comments

Comments
 (0)