Skip to content

Commit 659e56c

Browse files
committed
feat: Support for DataIntegrityProof
1 parent cc9581c commit 659e56c

13 files changed

+64
-46
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@
187187
<dependency>
188188
<groupId>com.danubetech</groupId>
189189
<artifactId>key-formats-java</artifactId>
190-
<version>1.20.0</version>
190+
<version>1.21-SNAPSHOT</version>
191191
</dependency>
192192
<dependency>
193193
<groupId>io.setl</groupId>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public BbsBlsSignature2020LdSigner() {
2727
this((ByteSigner) null);
2828
}
2929

30-
public Canonicalizer getCanonicalizer() {
30+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3131
return URDNA2015Canonicalizer.getInstance();
3232
}
3333

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

Lines changed: 21 additions & 7 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,17 +25,35 @@ 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

36+
// determine algorithm and cryptosuite
37+
38+
String algorithm;
39+
String cryptosuite;
40+
41+
algorithm = signer.getAlgorithm();
42+
cryptosuite = ldProofBuilder.build().getCryptosuite();
43+
if (cryptosuite != null) {
44+
if (! DataIntegrityProofDataIntegritySuite.findCryptosuitesByJwsAlgorithm(algorithm).contains(cryptosuite)) {
45+
throw new GeneralSecurityException("Algorithm " + algorithm + " is not supported by cryptosuite " + cryptosuite);
46+
}
47+
} else {
48+
cryptosuite = DataIntegrityProofDataIntegritySuite.findDefaultCryptosuiteByJwsAlgorithm(algorithm);
49+
ldProofBuilder.cryptosuite(cryptosuite);
50+
}
51+
3852
// sign
3953

4054
String proofValue;
4155

42-
byte[] bytes = signer.sign(signingInput, signer.getAlgorithm());
56+
byte[] bytes = signer.sign(signingInput, algorithm);
4357
proofValue = Multibase.encode(Multibase.Base.Base58BTC, bytes);
4458

4559
// done

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public EcdsaKoblitzSignature2016LdSigner() {
3333
this((ByteSigner) null);
3434
}
3535

36-
public Canonicalizer getCanonicalizer() {
36+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3737
return URDNA2015Canonicalizer.getInstance();
3838
}
3939

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public EcdsaSecp256k1Signature2019LdSigner() {
3333
this((ByteSigner) null);
3434
}
3535

36-
public Canonicalizer getCanonicalizer() {
36+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3737
return URDNA2015Canonicalizer.getInstance();
3838
}
3939

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Ed25519Signature2018LdSigner() {
3232
this((ByteSigner) null);
3333
}
3434

35-
public Canonicalizer getCanonicalizer() {
35+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3636
return URDNA2015Canonicalizer.getInstance();
3737
}
3838

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public Ed25519Signature2020LdSigner() {
2626
this((ByteSigner) null);
2727
}
2828

29-
public Canonicalizer getCanonicalizer() {
29+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3030
return URDNA2015Canonicalizer.getInstance();
3131
}
3232

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public JcsEcdsaSecp256k1Signature2019LdSigner() {
2929
this((ByteSigner) null);
3030
}
3131

32-
public Canonicalizer getCanonicalizer() {
32+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3333
return JCSCanonicalizer.getInstance();
3434
}
3535

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public JcsEd25519Signature2020LdSigner() {
2727
this((ByteSigner) null);
2828
}
2929

30-
public Canonicalizer getCanonicalizer() {
30+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3131
return JCSCanonicalizer.getInstance();
3232
}
3333

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package com.danubetech.dataintegrity.signer;
22

33
import com.danubetech.dataintegrity.DataIntegrityProof;
4+
import com.danubetech.dataintegrity.adapter.JWSSignerAdapter;
45
import com.danubetech.dataintegrity.canonicalizer.Canonicalizer;
5-
import com.danubetech.dataintegrity.canonicalizer.JCSCanonicalizer;
6+
import com.danubetech.dataintegrity.canonicalizer.URDNA2015Canonicalizer;
7+
import com.danubetech.dataintegrity.suites.DataIntegritySuites;
8+
import com.danubetech.dataintegrity.suites.JsonWebSignature2020DataIntegritySuite;
9+
import com.danubetech.dataintegrity.util.JWSUtil;
610
import com.danubetech.keyformats.crypto.ByteSigner;
711
import com.nimbusds.jose.JOSEException;
812
import com.nimbusds.jose.JWSAlgorithm;
913
import com.nimbusds.jose.JWSHeader;
1014
import com.nimbusds.jose.JWSSigner;
1115
import com.nimbusds.jose.util.Base64URL;
12-
import com.danubetech.dataintegrity.adapter.JWSSignerAdapter;
13-
import com.danubetech.dataintegrity.canonicalizer.URDNA2015Canonicalizer;
14-
import com.danubetech.dataintegrity.suites.JsonWebSignature2020DataIntegritySuite;
15-
import com.danubetech.dataintegrity.suites.DataIntegritySuites;
16-
import com.danubetech.dataintegrity.util.JWSUtil;
1716

1817
import java.security.GeneralSecurityException;
1918
import java.util.Collections;
@@ -28,22 +27,26 @@ public JsonWebSignature2020LdSigner() {
2827
this(null);
2928
}
3029

31-
public Canonicalizer getCanonicalizer() {
30+
public Canonicalizer getCanonicalizer(DataIntegrityProof dataIntegrityProof) {
3231
return URDNA2015Canonicalizer.getInstance();
3332
}
3433

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

36+
// determine algorithm
37+
38+
String algorithm = signer.getAlgorithm();
39+
3740
// build the JWS and sign
3841

3942
String jws;
4043

4144
try {
4245

43-
JWSHeader jwsHeader = new JWSHeader.Builder(JWSAlgorithm.parse(signer.getAlgorithm())).base64URLEncodePayload(false).criticalParams(Collections.singleton("b64")).build();
46+
JWSHeader jwsHeader = new JWSHeader.Builder(JWSAlgorithm.parse(algorithm)).base64URLEncodePayload(false).criticalParams(Collections.singleton("b64")).build();
4447
byte[] jwsSigningInput = JWSUtil.getJwsSigningInput(jwsHeader, signingInput);
4548

46-
JWSSigner jwsSigner = new JWSSignerAdapter(signer, JWSAlgorithm.parse(signer.getAlgorithm()));
49+
JWSSigner jwsSigner = new JWSSignerAdapter(signer, JWSAlgorithm.parse(algorithm));
4750
Base64URL signature = jwsSigner.sign(jwsHeader, jwsSigningInput);
4851
jws = JWSUtil.serializeDetachedJws(jwsHeader, signature);
4952
} catch (JOSEException ex) {

0 commit comments

Comments
 (0)