Skip to content

Commit f234493

Browse files
committed
wip
1 parent cc9581c commit f234493

File tree

3 files changed

+33
-27
lines changed

3 files changed

+33
-27
lines changed

src/main/java/com/danubetech/dataintegrity/signer/DataIntegrityProofLdSigner.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
import com.danubetech.dataintegrity.DataIntegrityProof;
44
import com.danubetech.dataintegrity.canonicalizer.Canonicalizer;
5-
import com.danubetech.dataintegrity.canonicalizer.JCSCanonicalizer;
65
import com.danubetech.dataintegrity.canonicalizer.RDFC10Canonicalizer;
7-
import com.danubetech.dataintegrity.canonicalizer.URDNA2015Canonicalizer;
86
import com.danubetech.dataintegrity.suites.DataIntegrityProofDataIntegritySuite;
97
import com.danubetech.dataintegrity.suites.DataIntegritySuites;
10-
import com.danubetech.dataintegrity.suites.Ed25519Signature2020DataIntegritySuite;
118
import com.danubetech.keyformats.crypto.ByteSigner;
129
import com.danubetech.keyformats.crypto.impl.Ed25519_EdDSA_PrivateKeySigner;
13-
import com.danubetech.keyformats.jose.JWSAlgorithm;
1410
import io.ipfs.multibase.Multibase;
1511

1612
import java.security.GeneralSecurityException;
@@ -29,22 +25,32 @@ public DataIntegrityProofLdSigner() {
2925
this((ByteSigner) null);
3026
}
3127

32-
public Canonicalizer getCanonicalizer() {
33-
return RDFC10Canonicalizer.getInstance();
28+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
29+
String cryptosuite = dataIntegrityProof.getCryptosuite();
30+
if (cryptosuite == null) return RDFC10Canonicalizer.getInstance();
31+
return DataIntegrityProofDataIntegritySuite.findCanonicalizerByCryptosuite(cryptosuite);
3432
}
3533

3634
public static void sign(DataIntegrityProof.Builder<? extends DataIntegrityProof.Builder<?>> ldProofBuilder, byte[] signingInput, ByteSigner signer) throws GeneralSecurityException {
3735

3836
// sign
3937

4038
String proofValue;
39+
String cryptosuite;
40+
41+
cryptosuite = ldProofBuilder.build().getCryptosuite();
42+
if (cryptosuite != null) {
43+
} else {
44+
cryptosuite = DataIntegrityProofDataIntegritySuite.findDefaultCryptosuiteByJwsAlgorithm(signer.getAlgorithm());
45+
}
4146

4247
byte[] bytes = signer.sign(signingInput, signer.getAlgorithm());
4348
proofValue = Multibase.encode(Multibase.Base.Base58BTC, bytes);
4449

4550
// done
4651

4752
ldProofBuilder.proofValue(proofValue);
53+
ldProofBuilder.cryptosuite(cryptosuite);
4854
}
4955

5056
@Override

src/main/java/com/danubetech/dataintegrity/signer/LdSigner.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public DataIntegrityProof sign(JsonLDObject jsonLdObject, boolean addToJsonLdObj
8989

9090
// obtain the canonicalized document
9191

92-
byte[] canonicalizationResult = this.getCanonicalizer().canonicalize(dataIntegrityProof, jsonLdObject);
92+
byte[] canonicalizationResult = this.getCanonicalizer(dataIntegrityProof).canonicalize(dataIntegrityProof, jsonLdObject);
9393

9494
// sign
9595

@@ -127,7 +127,7 @@ public DataIntegritySuite getDataIntegritySuite() {
127127
return this.dataIntegritySuite;
128128
}
129129

130-
public abstract Canonicalizer getCanonicalizer();
130+
public abstract Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof);
131131

132132
/*
133133
* Getters and setters

src/main/java/com/danubetech/dataintegrity/suites/DataIntegrityProofDataIntegritySuite.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,12 @@ public class DataIntegrityProofDataIntegritySuite extends DataIntegritySuite {
2020
"eddsa-jcs-2022", JCSCanonicalizer.getInstance()
2121
);
2222

23-
private static final Map<String, Map<KeyTypeName, String>> JWS_ALGORITHM_BY_CRYPTOSUITE_AND_KEY_TYPE_NAME = Map.of(
24-
"ecdsa-rdfc-2019", Map.of(
25-
KeyTypeName.secp256k1, JWSAlgorithm.ES256K,
26-
KeyTypeName.P_256, JWSAlgorithm.ES256,
27-
KeyTypeName.P_384, JWSAlgorithm.ES384,
28-
KeyTypeName.P_521, JWSAlgorithm.ES512
29-
),
30-
"ecdsa-jcs-2019", Map.of(
31-
KeyTypeName.Ed25519, JWSAlgorithm.EdDSA
32-
),
33-
"eddsa-rdfc-2022", Map.of(
34-
KeyTypeName.secp256k1, JWSAlgorithm.ES256K,
35-
KeyTypeName.P_256, JWSAlgorithm.ES256,
36-
KeyTypeName.P_384, JWSAlgorithm.ES384,
37-
KeyTypeName.P_521, JWSAlgorithm.ES512
38-
),
39-
"eddsa-jcs-2022", Map.of(
40-
KeyTypeName.Ed25519, JWSAlgorithm.EdDSA
41-
)
23+
private static final Map<String, List<String>> CRYPTOSUITES_BY_JWS_ALGORITHM = Map.of(
24+
JWSAlgorithm.EdDSA, List.of("eddsa-rdfc-2022", "eddsa-jcs-2022"),
25+
JWSAlgorithm.ES256K, List.of("ecdsa-rdfc-2019", "ecdsa-jcs-2019"),
26+
JWSAlgorithm.ES256, List.of("ecdsa-rdfc-2019", "ecdsa-jcs-2019"),
27+
JWSAlgorithm.ES384, List.of("ecdsa-rdfc-2019", "ecdsa-jcs-2019"),
28+
JWSAlgorithm.ES512, List.of("ecdsa-rdfc-2019", "ecdsa-jcs-2019")
4229
);
4330

4431
DataIntegrityProofDataIntegritySuite() {
@@ -52,4 +39,17 @@ public class DataIntegrityProofDataIntegritySuite extends DataIntegritySuite {
5239
KeyTypeName.P_521, List.of(JWSAlgorithm.ES512)),
5340
List.of(LDSecurityContexts.JSONLD_CONTEXT_W3ID_DATAINTEGRITY_V2));
5441
}
42+
43+
public static Canonicalizer findCanonicalizerByCryptosuite(String cryptosuite) {
44+
return CANONICALIZERS_BY_CRYPTOSUITE.get(cryptosuite);
45+
}
46+
47+
public static List<String> findCryptosuitesByJwsAlgorithm(String jwsAlgorithm) {
48+
return CRYPTOSUITES_BY_JWS_ALGORITHM.get(jwsAlgorithm);
49+
}
50+
51+
public static String findDefaultCryptosuiteByJwsAlgorithm(String jwsAlgorithm) {
52+
List<String> foundCryptosuiteByJwsAlgorithm = findCryptosuitesByJwsAlgorithm(jwsAlgorithm);
53+
return foundCryptosuiteByJwsAlgorithm == null ? null : foundCryptosuiteByJwsAlgorithm.get(0);
54+
}
5555
}

0 commit comments

Comments
 (0)