Skip to content

Commit fbe6510

Browse files
authored
Merge pull request #52 from filip26/feat/codecs
Extract multiformat decoders
2 parents e7193c3 + dd51dd8 commit fbe6510

File tree

5 files changed

+24
-13
lines changed

5 files changed

+24
-13
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ An implementation of the [Decentralized Identifiers (DIDs) v1.0](https://www.w3.
99

1010
## Features
1111

12-
* [did:key method v0.7](https://w3c-ccg.github.io/did-method-key/)
12+
* DID, DID URL, DID Document
13+
* Methods
14+
* [did:key method v0.7](https://w3c-ccg.github.io/did-method-key/)
1315

1416
## Installation
1517

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>com.apicatalog</groupId>
88
<artifactId>carbon-did</artifactId>
99

10-
<version>0.1.1</version>
10+
<version>0.2.0</version>
1111
<packaging>jar</packaging>
1212

1313
<url>https://github.com/filip26/carbon-decentralized-identifiers</url>

src/main/java/com/apicatalog/did/key/DidKey.java

+5-9
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.apicatalog.multibase.Multibase;
77
import com.apicatalog.multibase.MultibaseDecoder;
88
import com.apicatalog.multicodec.Multicodec;
9-
import com.apicatalog.multicodec.Multicodec.Tag;
109
import com.apicatalog.multicodec.MulticodecDecoder;
1110

1211
/**
@@ -27,9 +26,6 @@ public class DidKey extends Did {
2726

2827
public static final String METHOD_KEY = "key";
2928

30-
protected static final MulticodecDecoder MULTICODEC = MulticodecDecoder.getInstance(Tag.Key);
31-
protected static final MultibaseDecoder MULTIBASE = MultibaseDecoder.getInstance();
32-
3329
private final Multicodec codec;
3430

3531
private final byte[] rawKey;
@@ -51,28 +47,28 @@ protected DidKey(Did did, Multicodec codec, byte[] rawValue) {
5147
* @throws IllegalArgumentException If the given {@code uri} is not valid DID
5248
* key
5349
*/
54-
public static final DidKey from(final URI uri) {
50+
public static final DidKey from(final URI uri, final MultibaseDecoder bases, final MulticodecDecoder codecs) {
5551

5652
final Did did = Did.from(uri);
5753

5854
if (!METHOD_KEY.equalsIgnoreCase(did.getMethod())) {
5955
throw new IllegalArgumentException("The given URI [" + uri + "] is not valid DID key, does not start with 'did:key'.");
6056
}
6157

62-
return from(did);
58+
return from(did, bases, codecs);
6359
}
6460

65-
public static final DidKey from(final Did did) {
61+
public static final DidKey from(final Did did, final MultibaseDecoder bases, final MulticodecDecoder codecs) {
6662

6763
if (!METHOD_KEY.equalsIgnoreCase(did.getMethod())) {
6864
throw new IllegalArgumentException("The given DID method [" + did.getMethod() + "] is not 'key'. DID [" + did.toString() + "].");
6965
}
7066

71-
final Multibase base = MULTIBASE.getBase(did.getMethodSpecificId()).orElseThrow(() -> new IllegalArgumentException("Cannot detect did:key base encoding."));
67+
final Multibase base = bases.getBase(did.getMethodSpecificId()).orElseThrow(() -> new IllegalArgumentException("Unsupported did:key base encoding. DID [" + did.toString() + "]."));
7268

7369
final byte[] decoded = base.decode(did.getMethodSpecificId());
7470

75-
final Multicodec codec = MULTICODEC.getCodec(decoded).orElseThrow(() -> new IllegalArgumentException("Cannot detect did:key codec."));
71+
final Multicodec codec = codecs.getCodec(decoded).orElseThrow(() -> new IllegalArgumentException("Unsupported did:key codec. DID [" + did.toString() + "]."));
7672

7773
final byte[] rawKey = codec.decode(decoded);
7874

src/main/java/com/apicatalog/did/key/DidKeyResolver.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,27 @@
55
import com.apicatalog.did.DidUrl;
66
import com.apicatalog.did.document.DidDocument;
77
import com.apicatalog.did.document.DidVerificationMethod;
8+
import com.apicatalog.multibase.MultibaseDecoder;
9+
import com.apicatalog.multicodec.MulticodecDecoder;
810

911
public class DidKeyResolver implements DidResolver {
1012

13+
protected final MultibaseDecoder bases;
14+
protected final MulticodecDecoder codecs;
15+
16+
public DidKeyResolver(final MultibaseDecoder bases, final MulticodecDecoder codecs) {
17+
this.bases = bases;
18+
this.codecs = codecs;
19+
}
20+
1121
@Override
1222
public DidDocument resolve(final Did did) {
1323

1424
if (!DidKey.isDidKey(did)) {
1525
throw new IllegalArgumentException();
1626
}
1727

18-
final DidKey didKey = DidKey.from(did);
28+
final DidKey didKey = DidKey.from(did, bases, codecs);
1929

2030
final DidDocumentBuilder builder = DidDocumentBuilder.create();
2131

src/test/java/com/apicatalog/did/DidKeyTest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import org.junit.jupiter.params.provider.MethodSource;
1515

1616
import com.apicatalog.did.key.DidKey;
17+
import com.apicatalog.multibase.MultibaseDecoder;
18+
import com.apicatalog.multicodec.Multicodec.Tag;
19+
import com.apicatalog.multicodec.MulticodecDecoder;
1720
import com.apicatalog.multicodec.codec.KeyCodec;
1821

1922
@DisplayName("DID Key")
@@ -26,7 +29,7 @@ class DidKeyTest {
2629
void fromString(DidKeyTestCase testCase) {
2730
try {
2831

29-
final DidKey didKey = DidKey.from(testCase.uri);
32+
final DidKey didKey = DidKey.from(testCase.uri, MultibaseDecoder.getInstance(), MulticodecDecoder.getInstance(Tag.Key));
3033

3134
if (testCase.negative) {
3235
fail("Expected failure but got " + didKey);

0 commit comments

Comments
 (0)