Skip to content

Commit acb0784

Browse files
Merge pull request #10 from diggsweden/feat/move-hardcoded-values
feat: move hardcoded values to properties file
2 parents 34a7553 + f865bb7 commit acb0784

File tree

6 files changed

+105
-46
lines changed

6 files changed

+105
-46
lines changed

src/main/java/se/digg/wallet/provider/application/config/WuaKeystoreProperties.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,15 @@
1313
import org.springframework.core.io.Resource;
1414

1515
@ConfigurationProperties(prefix = "wua.keystore")
16-
public record WuaKeystoreProperties(Resource location, String password, String alias, String type) {
16+
public record WuaKeystoreProperties(
17+
Resource location,
18+
String password,
19+
String alias,
20+
String type,
21+
String eudiWalletInfo,
22+
String status,
23+
String issuer,
24+
int validityHours) {
1725

1826
public ECPrivateKey getSigningKey() {
1927
try {

src/main/java/se/digg/wallet/provider/application/service/WalletUnitAttestationService.java

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
package se.digg.wallet.provider.application.service;
66

7+
import com.fasterxml.jackson.core.JsonProcessingException;
8+
import com.fasterxml.jackson.core.type.TypeReference;
9+
import com.fasterxml.jackson.databind.ObjectMapper;
710
import com.nimbusds.jose.JOSEException;
811
import com.nimbusds.jose.JOSEObjectType;
912
import com.nimbusds.jose.JWSAlgorithm;
@@ -27,42 +30,41 @@
2730
public class WalletUnitAttestationService {
2831

2932
private final WuaKeystoreProperties keystoreProperties;
33+
private final ObjectMapper objectMapper;
3034

31-
public WalletUnitAttestationService(WuaKeystoreProperties keystoreProperties) {
35+
public WalletUnitAttestationService(
36+
WuaKeystoreProperties keystoreProperties,
37+
ObjectMapper objectMapper) {
3238
this.keystoreProperties = keystoreProperties;
39+
this.objectMapper = objectMapper;
3340
}
3441

3542
public SignedJWT createWalletUnitAttestation(String walletPublicKeyJwk) throws Exception {
3643
ECKey attestedKey = ECKey.parse(walletPublicKeyJwk);
37-
38-
Map<String, Object> eudiWalletInfo =
39-
Map.of(
40-
"general_info",
41-
Map.of(
42-
"wallet_provider_name", "Digg",
43-
"wallet_solution_id", "Diggidigg-id",
44-
"wallet_solution_version", "0.0.1",
45-
"wallet_solution_certification_information", "UNCERTIFIED"),
46-
"wscd_info", Map.of("wscd_certification_information", "UNCERTIFIED"));
47-
48-
Map<String, Object> status =
49-
Map.of("status_list", Map.of("idx", 412, "uri", "https://revocation_url/statuslists/1"));
50-
5144
List<Map<String, Object>> attestedKeys = List.of(attestedKey.toJSONObject());
5245

5346
Map<String, Object> claims = new HashMap<>();
54-
claims.put("eudi_wallet_info", eudiWalletInfo);
55-
claims.put("status", status);
47+
claims.put("eudi_wallet_info", getEudiWalletInfo());
48+
claims.put("status", getStatus());
5649
claims.put("attested_keys", attestedKeys);
5750

5851
return createSignedJwt(
5952
keystoreProperties.getSigningKey(),
6053
keystoreProperties.alias(),
61-
"Digg",
62-
Duration.ofHours(24),
54+
keystoreProperties.issuer(),
55+
Duration.ofHours(keystoreProperties.validityHours()),
6356
claims);
6457
}
6558

59+
private Map<String, Object> getStatus() throws JsonProcessingException {
60+
return objectMapper.readValue(keystoreProperties.status(), new TypeReference<>() {});
61+
}
62+
63+
private Map<String, Object> getEudiWalletInfo() throws JsonProcessingException {
64+
return objectMapper.readValue(
65+
keystoreProperties.eudiWalletInfo(), new TypeReference<>() {});
66+
}
67+
6668
private SignedJWT createSignedJwt(
6769
ECPrivateKey signingKey,
6870
String keyId,
@@ -84,10 +86,11 @@ private SignedJWT createSignedJwt(
8486

8587
JWTClaimsSet claimsSet = claimsBuilder.build();
8688

87-
JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.ES256)
88-
.keyID(keyId)
89-
.type(new JOSEObjectType("keyattestation+jwt"))
90-
.build();
89+
JWSHeader header =
90+
new JWSHeader.Builder(JWSAlgorithm.ES256)
91+
.keyID(keyId)
92+
.type(new JOSEObjectType("keyattestation+jwt"))
93+
.build();
9194

9295
SignedJWT signedJwt = new SignedJWT(header, claimsSet);
9396

src/main/resources/application.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,24 @@ wua:
4141
password: ${WUA_KEYSTORE_PASSWORD}
4242
alias: ${WUA_KEYSTORE_ALIAS}
4343
type: PKCS12
44+
issuer: "Digg"
45+
validity-hours: 24
46+
eudi-wallet-info: >
47+
{
48+
"general_info": {
49+
"wallet_provider_name": "Digg",
50+
"wallet_solution_id": "Diggidigg-id",
51+
"wallet_solution_version": "0.0.1",
52+
"wallet_solution_certification_information": "UNCERTIFIED"
53+
},
54+
"wscd_info": {
55+
"wscd_certification_information": "UNCERTIFIED"
56+
}
57+
}
58+
status: >
59+
{
60+
"status_list": {
61+
"idx": 412,
62+
"uri": "https://revocation_url/statuslists/1"
63+
}
64+
}

src/test/java/se/digg/wallet/provider/application/controller/WalletUnitAttestationControllerTest.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,15 @@ void assertThatPostWalletUnitAttestation_givenWalletIdAndValidPublicKey_shouldRe
4040
when(service.createWalletUnitAttestation(anyString())).thenReturn(SignedJWT.parse(expectedJwt));
4141

4242
String jwk =
43-
"{\"kty\":\"EC\",\"use\":\"sig\",\"crv\":\"P-256\","
44-
+ "\"x\":\"18wHLeIgW9wVN6VD1Txgpqy2LszYkMf6J8njVAibvhM\","
45-
+ "\"y\":\"-V4dS4UaLMgP_4fY4j8ir7cl1TXlFdAgcx55o7TkcSA\"}";
43+
"""
44+
{
45+
"kty": "EC",
46+
"use": "sig",
47+
"crv": "P-256",
48+
"x": "18wHLeIgW9wVN6VD1Txgpqy2LszYkMf6J8njVAibvhM",
49+
"y": "-V4dS4UaLMgP_4fY4j8ir7cl1TXlFdAgcx55o7TkcSA"
50+
}
51+
""";
4652
WalletUnitAttestationDto input = new WalletUnitAttestationDto(UUID.randomUUID(), jwk);
4753

4854
mockMvc

src/test/java/se/digg/wallet/provider/application/service/WalletUnitAttestationServiceTest.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,6 @@ class WalletUnitAttestationServiceTest {
3232
@Autowired
3333
private WuaKeystoreProperties keystoreProperties;
3434

35-
@SuppressWarnings("unchecked")
36-
@Test
37-
void assertThatCreateWalletUnitAttestation_givenValidJwk_shouldSucceed() throws Exception {
38-
KeyPairGenerator gen = KeyPairGenerator.getInstance("EC");
39-
gen.initialize(Curve.P_256.toECParameterSpec());
40-
KeyPair keyPair = gen.generateKeyPair();
41-
ECKey jwk = new ECKey.Builder(Curve.P_256, (ECPublicKey) keyPair.getPublic()).build();
42-
43-
SignedJWT jwt = service.createWalletUnitAttestation(jwk.toString());
44-
45-
assertNotNull(jwt);
46-
assertEquals("Digg", jwt.getJWTClaimsSet().getIssuer());
47-
48-
verifyAttestedKeysClaim(jwt, jwk);
49-
verifyEudiWalletInfoClaim(jwt);
50-
verifyStatusClaim(jwt);
51-
verifyJwtSignature(jwt, keystoreProperties.getPublicKey());
52-
}
53-
5435
@SuppressWarnings("unchecked")
5536
private static void verifyStatusClaim(SignedJWT jwt) throws ParseException {
5637
Map<String, Object> status = jwt.getJWTClaimsSet().getJSONObjectClaim("status");
@@ -85,6 +66,25 @@ private static void verifyAttestedKeysClaim(SignedJWT jwt, ECKey jwk) throws Par
8566
assertEquals(jwk.getCurve().toString(), attestedKey.get("crv"));
8667
}
8768

69+
@SuppressWarnings("unchecked")
70+
@Test
71+
void assertThatCreateWalletUnitAttestation_givenValidJwk_shouldSucceed() throws Exception {
72+
KeyPairGenerator gen = KeyPairGenerator.getInstance("EC");
73+
gen.initialize(Curve.P_256.toECParameterSpec());
74+
KeyPair keyPair = gen.generateKeyPair();
75+
ECKey jwk = new ECKey.Builder(Curve.P_256, (ECPublicKey) keyPair.getPublic()).build();
76+
77+
SignedJWT jwt = service.createWalletUnitAttestation(jwk.toString());
78+
79+
assertNotNull(jwt);
80+
assertEquals("Digg", jwt.getJWTClaimsSet().getIssuer());
81+
82+
verifyAttestedKeysClaim(jwt, jwk);
83+
verifyEudiWalletInfoClaim(jwt);
84+
verifyStatusClaim(jwt);
85+
verifyJwtSignature(jwt, keystoreProperties.getPublicKey());
86+
}
87+
8888
private void verifyJwtSignature(SignedJWT jwt, ECPublicKey publicKey) throws JOSEException {
8989
assertTrue(jwt.verify(new ECDSAVerifier(publicKey)));
9090
}

src/test/resources/application.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,24 @@ wua:
1212
password: Test1234
1313
alias: wua-signing
1414
type: PKCS12
15+
issuer: "Digg"
16+
validity-hours: 24
17+
eudi-wallet-info: >
18+
{
19+
"general_info": {
20+
"wallet_provider_name": "Digg",
21+
"wallet_solution_id": "Diggidigg-id",
22+
"wallet_solution_version": "0.0.1",
23+
"wallet_solution_certification_information": "UNCERTIFIED"
24+
},
25+
"wscd_info": {
26+
"wscd_certification_information": "UNCERTIFIED"
27+
}
28+
}
29+
status: >
30+
{
31+
"status_list": {
32+
"idx": 412,
33+
"uri": "https://revocation_url/statuslists/1"
34+
}
35+
}

0 commit comments

Comments
 (0)