add URDNA2015
This commit is contained in:
parent
cb7a98f378
commit
5d5f3f7588
@ -36,5 +36,33 @@
|
|||||||
<artifactId>spring-core</artifactId>
|
<artifactId>spring-core</artifactId>
|
||||||
<version>5.0.12.RELEASE</version>
|
<version>5.0.12.RELEASE</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/com.apicatalog/titanium-json-ld -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.apicatalog</groupId>
|
||||||
|
<artifactId>titanium-json-ld</artifactId>
|
||||||
|
<version>1.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/io.setl/rdf-urdna -->
|
||||||
|
<!-- https://github.com/setl/rdf-urdna -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.setl</groupId>
|
||||||
|
<artifactId>rdf-urdna</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>com.apicatalog</groupId>
|
||||||
|
<artifactId>titanium-json-ld</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.glassfish</groupId>
|
||||||
|
<artifactId>jakarta.json</artifactId>
|
||||||
|
<version>2.0.1</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
@ -1,5 +1,9 @@
|
|||||||
package org.oneedtech.inspect.vc.probe;
|
package org.oneedtech.inspect.vc.probe;
|
||||||
|
|
||||||
|
import static org.oneedtech.inspect.core.probe.RunContext.Key.JACKSON_OBJECTMAPPER;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.StringReader;
|
||||||
import java.security.KeyFactory;
|
import java.security.KeyFactory;
|
||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
import java.security.Signature;
|
import java.security.Signature;
|
||||||
@ -15,6 +19,18 @@ import org.oneedtech.inspect.core.probe.RunContext;
|
|||||||
import org.oneedtech.inspect.core.report.ReportItems;
|
import org.oneedtech.inspect.core.report.ReportItems;
|
||||||
import org.oneedtech.inspect.vc.Credential;
|
import org.oneedtech.inspect.vc.Credential;
|
||||||
|
|
||||||
|
import com.apicatalog.jsonld.JsonLd;
|
||||||
|
import com.apicatalog.jsonld.StringUtils;
|
||||||
|
import com.apicatalog.jsonld.document.JsonDocument;
|
||||||
|
import com.apicatalog.jsonld.http.media.MediaType;
|
||||||
|
import com.apicatalog.rdf.Rdf;
|
||||||
|
import com.apicatalog.rdf.RdfDataset;
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
import io.setl.rdf.normalization.RdfNormalize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Probe that verifies credential proofs
|
* A Probe that verifies credential proofs
|
||||||
* @author mlyon
|
* @author mlyon
|
||||||
@ -28,12 +44,44 @@ public class ProofVerifierProbe extends Probe<Credential> {
|
|||||||
@Override
|
@Override
|
||||||
public ReportItems run(Credential crd, RunContext ctx) throws Exception {
|
public ReportItems run(Credential crd, RunContext ctx) throws Exception {
|
||||||
|
|
||||||
//TODO @Miles -- if proofs fail, report OutCome.Fatal
|
try {
|
||||||
|
String canonical = canonicalize(crd, C14n.URDNA2015, MediaType.N_QUADS, ctx);
|
||||||
|
//System.out.println(canonical);
|
||||||
|
|
||||||
|
//TODO if proofs fail, report OutCome.Fatal
|
||||||
|
//return fatal("msg", ctx);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
return exception(e.getMessage(), crd.getResource());
|
||||||
|
}
|
||||||
return success(ctx);
|
return success(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean validate(String pubkey, String signature, String timestamp, String message) throws Exception {
|
private String canonicalize(Credential crd, C14n algo, MediaType mediaType, RunContext ctx) throws Exception {
|
||||||
|
|
||||||
|
//clone the incoming credential object so we can modify it freely
|
||||||
|
ObjectMapper mapper = (ObjectMapper)ctx.get(JACKSON_OBJECTMAPPER);
|
||||||
|
JsonNode copy = mapper.readTree(crd.asJson().toString());
|
||||||
|
|
||||||
|
//remove proof
|
||||||
|
((ObjectNode)copy).remove("proof");
|
||||||
|
|
||||||
|
//create JSON-P Json-LD instance
|
||||||
|
JsonDocument jsonLdDoc = JsonDocument.of(new StringReader(copy.toString()));
|
||||||
|
|
||||||
|
//create rdf and normalize
|
||||||
|
RdfDataset dataSet = JsonLd.toRdf(jsonLdDoc).ordered(true).get();
|
||||||
|
RdfDataset normalized = RdfNormalize.normalize(dataSet);
|
||||||
|
|
||||||
|
//serialize to string
|
||||||
|
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||||
|
Rdf.createWriter(mediaType, os).write(normalized);
|
||||||
|
String result = StringUtils.stripTrailing(os.toString());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean validate(String pubkey, String signature, String timestamp, String message) throws Exception {
|
||||||
//TODO: continue this implementation.
|
//TODO: continue this implementation.
|
||||||
//Pulled in bouncy castle library and made sure this sample compiled only.
|
//Pulled in bouncy castle library and made sure this sample compiled only.
|
||||||
final var provider = new BouncyCastleProvider();
|
final var provider = new BouncyCastleProvider();
|
||||||
@ -50,5 +98,9 @@ public class ProofVerifierProbe extends Probe<Credential> {
|
|||||||
return signedData.verify(Hex.decode(signature));
|
return signedData.verify(Hex.decode(signature));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private enum C14n {
|
||||||
|
URDNA2015
|
||||||
|
}
|
||||||
|
|
||||||
public static final String ID = ProofVerifierProbe.class.getSimpleName();
|
public static final String ID = ProofVerifierProbe.class.getSimpleName();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user