Skip to content

Commit d48b774

Browse files
committed
chore: Additional test related to patches and capabilities
1 parent 5077fbf commit d48b774

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.danubetech.dataintegrity;
2+
3+
import com.danubetech.dataintegrity.jsonld.DataIntegrityContexts;
4+
import com.danubetech.dataintegrity.verifier.DataIntegrityProofLdVerifier;
5+
import com.danubetech.keyformats.PublicKeyBytes;
6+
import com.danubetech.keyformats.crypto.PublicKeyVerifier;
7+
import com.danubetech.keyformats.crypto.PublicKeyVerifierFactory;
8+
import com.danubetech.keyformats.jose.JWSAlgorithm;
9+
import com.danubetech.keyformats.jose.KeyTypeName;
10+
import foundation.identity.jsonld.JsonLDException;
11+
import foundation.identity.jsonld.JsonLDObject;
12+
import io.ipfs.multibase.Multibase;
13+
import org.bitcoinj.crypto.ECKey;
14+
import org.junit.jupiter.api.Test;
15+
16+
import java.io.IOException;
17+
import java.io.InputStreamReader;
18+
import java.security.GeneralSecurityException;
19+
import java.util.Arrays;
20+
import java.util.Objects;
21+
22+
import static org.junit.jupiter.api.Assertions.assertTrue;
23+
24+
public class DidBtc1PatchTest {
25+
26+
@Test
27+
public void testPatch() throws JsonLDException, GeneralSecurityException, IOException {
28+
29+
JsonLDObject jsonLdObject = JsonLDObject.fromJson(new InputStreamReader(Objects.requireNonNull(DidBtc1PatchTest.class.getResourceAsStream("did-btc1-patch.jsonld"))));
30+
jsonLdObject.setDocumentLoader(DataIntegrityContexts.DOCUMENT_LOADER);
31+
32+
JsonLDObject verificationMethod = JsonLDObject.fromJson(new InputStreamReader(Objects.requireNonNull(DidBtc1PatchTest.class.getResourceAsStream("did-btc1-patch.verification-method.jsonld"))));
33+
String publicKeyMultibase = (String) verificationMethod.getJsonObject().get("publicKeyMultibase");
34+
byte[] publicKeyBytes = Arrays.copyOfRange(Multibase.decode(publicKeyMultibase), 2, 35);
35+
ECKey publicKey = PublicKeyBytes.bytes_to_secp256k1PublicKey(publicKeyBytes);
36+
37+
PublicKeyVerifier<?> publicKeyVerifier = PublicKeyVerifierFactory.publicKeyVerifierForKey(KeyTypeName.secp256k1, JWSAlgorithm.ES256KS, publicKey);
38+
DataIntegrityProofLdVerifier verifier = new DataIntegrityProofLdVerifier(publicKeyVerifier);
39+
boolean verify = verifier.verify(jsonLdObject);
40+
41+
assertTrue(verify);
42+
}
43+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"@context": [
3+
"https://w3id.org/security/v2",
4+
"https://w3id.org/zcap/v1",
5+
"https://w3id.org/json-ld-patch/v1"
6+
],
7+
"patch": [
8+
{
9+
"op": "add",
10+
"path": "/service/3",
11+
"value": {
12+
"id": "did:btc1:k1qgpmay0qswqklpth58vdhattea5dnu9jej25t3kl2gnjykznnylquxc2gnd4c#service-0",
13+
"type": "SingletonBeacon",
14+
"serviceEndpoint": "bitcoin:bcrt1pgc9gygrwkp2mme7szzsemx2nhkdpaw5u6cc4t9w5pg8dpje8jxsqxf05rv"
15+
}
16+
}
17+
],
18+
"sourceHash": "5g8hNQyS5nGRD1xfoqT7EqN23C675xDuTFAP4sCpXTAk",
19+
"targetHash": "4K5VkdE5tmt9KNoahrmVw9zX3vf7MsKCZ4urvKUWRXBw",
20+
"targetVersionId": 2,
21+
"proof": {
22+
"type": "DataIntegrityProof",
23+
"cryptosuite": "bip340-jcs-2025",
24+
"verificationMethod": "did:btc1:k1qgpmay0qswqklpth58vdhattea5dnu9jej25t3kl2gnjykznnylquxc2gnd4c##initialKey",
25+
"proofPurpose": "capabilityInvocation",
26+
"capability": "urn:zcap:root:did%3Abtc1%3Ak1qgpmay0qswqklpth58vdhattea5dnu9jej25t3kl2gnjykznnylquxc2gnd4c",
27+
"capabilityAction": "Write",
28+
"@context": [
29+
"https://w3id.org/security/v2",
30+
"https://w3id.org/zcap/v1",
31+
"https://w3id.org/json-ld-patch/v1"
32+
],
33+
"proofValue": "z2CMaqir8yCBToudmMWozWKPxUtgjYRXju7VmhSsZTBV8BoPhwiZpkbx4m4vXEewbs5nZnoc2gvgE5B5iNkeUsLse"
34+
}
35+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"id": "did:btc1:k1qgpmay0qswqklpth58vdhattea5dnu9jej25t3kl2gnjykznnylquxc2gnd4c##initialKey",
3+
"type": "Multikey",
4+
"controller": "did:btc1:k1qgpmay0qswqklpth58vdhattea5dnu9jej25t3kl2gnjykznnylquxc2gnd4c",
5+
"publicKeyMultibase": "zQ3shsU1bzwDEU6nBAVRLfyo5ZvDrzHKs4ZXYxP13dksA7NRx"
6+
}

0 commit comments

Comments
 (0)