@@ -5,12 +5,10 @@ import java.net.URL
5
5
import java.security.PublicKey
6
6
import java.text.DateFormat
7
7
import java.text.SimpleDateFormat
8
- import com.fasterxml.jackson.annotation.JsonValue
9
8
import com.fasterxml.jackson.core.JsonParser
10
9
import com.fasterxml.jackson.databind.DeserializationContext
11
10
import com.fasterxml.jackson.databind.JsonDeserializer
12
11
import com.fasterxml.jackson.databind.JsonNode
13
- import com.fasterxml.jackson.databind.annotation.JsonDeserialize
14
12
import com.nimbusds.jose.crypto.bc.BouncyCastleProviderSingleton
15
13
import org.bouncycastle.jce.provider.BouncyCastleProvider
16
14
import org.who.ddccverifier.BuildConfig
@@ -26,21 +24,11 @@ object TrustRegistry {
26
24
// Using old java.time to keep compatibility down to Android SDK 22.
27
25
private var df: DateFormat = SimpleDateFormat (" yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" )
28
26
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
31
29
}
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
44
32
}
45
33
46
34
object DidDocumentDeserializer : JsonDeserializer<PublicKey>() {
@@ -62,25 +50,20 @@ object TrustRegistry {
62
50
data class TrustedEntity (
63
51
val displayName : Map <String , String >,
64
52
val displayLogo : String? ,
65
- val entityType : Type ,
66
53
val status : Status ,
67
- val statusDetail : String? ,
68
54
val validFromDT : Date ? ,
69
55
val validUntilDT : Date ? ,
70
- @JsonDeserialize(using = DidDocumentDeserializer ::class )
71
- val didDocument : PublicKey ,
72
- val credentialType : List <String >,
56
+ val didDocument : PublicKey
73
57
)
74
58
75
59
private const val COL_FRAMEWORK = 0
76
60
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
84
67
85
68
private val registry: MutableMap <Framework , MutableMap <String , TrustedEntity >> by lazy(LazyThreadSafetyMode .PUBLICATION ) {
86
69
Security .removeProvider(BouncyCastleProvider .PROVIDER_NAME )
@@ -100,19 +83,16 @@ object TrustRegistry {
100
83
val reader = BufferedReader (InputStreamReader (resultCSVStream.openStream()))
101
84
reader.forEachLine {
102
85
val row = it.split(" ," )
103
- val framework = Framework .from (row[COL_FRAMEWORK ])
86
+ val framework = Framework .valueOf (row[COL_FRAMEWORK ].uppercase() )
104
87
try {
105
88
reg[framework]?.put(row[COL_KID ],
106
89
TrustedEntity (
107
90
mapOf (" en" to Base64 .decode(row[COL_DISPLAY_NAME ], Base64 .DEFAULT ).toString(Charsets .UTF_8 )),
108
91
Base64 .decode(row[COL_DISPLAY_LOGO ], Base64 .DEFAULT ).toString(Charsets .UTF_8 ),
109
- Type .valueOf(row[COL_TYPE ].uppercase()),
110
92
Status .valueOf(row[COL_STATUS ].uppercase()),
111
- " " ,
112
93
if (row[COL_VALID_FROM ].isNotEmpty()) df.parse(row[COL_VALID_FROM ]) else null ,
113
94
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-----" )
116
96
)
117
97
)
118
98
} catch (t: Throwable ) {
@@ -130,9 +110,7 @@ object TrustRegistry {
130
110
" MTE=" , TrustedEntity (
131
111
mapOf (" en" to " Test Keys for the WHO\' s DDCC" ),
132
112
null ,
133
- Type .ISSUER ,
134
113
Status .CURRENT ,
135
- " WHO Test Keys" ,
136
114
df.parse(" 2021-01-01T08:00:00.000Z" ),
137
115
df.parse(" 2021-12-01T08:00:00.000Z" ),
138
116
KeyUtils .ecPublicKeyFromCoordinate(
@@ -142,24 +120,20 @@ object TrustRegistry {
142
120
" 60f7f1a780d8a783bfb7a2dd6b2796e8128dbbcef9d3d168db9529971a36e7b9" .chunked(2 )
143
121
.map { it.toInt(16 ).toByte() }
144
122
.toByteArray()
145
- ),
146
- listOf (" VS" )
123
+ )
147
124
)
148
125
)
149
126
150
127
registry[Framework .SHC ]?.put(
151
128
" https://spec.smarthealth.cards/examples/issuer#3Kfdg-XwP-7gXyywtUfUADwBumDOPKMQx-iELL11W9s" , TrustedEntity (
152
129
mapOf (" en" to " Test Keys for SHCs" ),
153
130
null ,
154
- Type .ISSUER ,
155
131
Status .CURRENT ,
156
- " SHC Test Keys" ,
157
132
df.parse(" 2021-01-01T08:00:00.000Z" ),
158
133
df.parse(" 2021-12-01T08:00:00.000Z" ),
159
134
KeyUtils .ecPublicKeyFromCoordinate(
160
135
" 11XvRWy1I2S0EyJlyf_bWfw_TQ5CJJNLw78bHXNxcgw" ,
161
- " eZXwxvO1hvCY0KucrPfKo7yAyMT6Ajc3N7OkAB6VYy8" ),
162
- listOf (" VS" )
136
+ " eZXwxvO1hvCY0KucrPfKo7yAyMT6Ajc3N7OkAB6VYy8" )
163
137
)
164
138
)
165
139
}
0 commit comments