use of de.uni_koblenz.aggrimm.icp.crypto.sign.graph.GraphCollection in project webofneeds by researchstudio-sat.
the class ModelConverter method modelToGraphCollection.
private static GraphCollection modelToGraphCollection(String name, Model model) {
// Convert each subj pred obj in Jena Statement into String and add to
// SigningFramework's NamedGraph.
// The simpler approach with just using Jena's writer and Signingframework's
// reader to transform data between data structures won't work since
// Signingframework has problems with recognizing the [] structure
GraphCollection graphc = new GraphCollection();
NamedGraph namedGraph = fromModel(name, model);
graphc.addGraph(namedGraph);
// graphc.applyPrefixes();
return graphc;
}
use of de.uni_koblenz.aggrimm.icp.crypto.sign.graph.GraphCollection in project webofneeds by researchstudio-sat.
the class ModelConverter method modelToGraphCollection.
private static GraphCollection modelToGraphCollection(String name, Model model, Map<String, String> pm) {
// Convert each subj pred obj in Jena Statement into String and add to
// SigningFramework's NamedGraph.
// The simpler approach with just using Jena's writer and Signingframework's
// reader to transform data between data structures won't work since
// Signingframework has problems with recognizing the [] structure
GraphCollection graphc = new GraphCollection();
NamedGraph namedGraph = new NamedGraph(enclose(name, "<", ">"), 0, null);
StmtIterator iterator = model.listStatements();
while (iterator.hasNext()) {
Statement stmt = iterator.nextStatement();
String subjString = rdfNodeAsString(stmt.getSubject());
String objString = rdfNodeAsString(stmt.getObject());
String predString = enclose(stmt.getPredicate().asResource().getURI(), "<", ">");
Triple gcTriple = new Triple(subjString, predString, objString);
namedGraph.addTriple(gcTriple);
}
graphc.addGraph(namedGraph);
for (String prefix : pm.keySet()) {
graphc.addPrefix(new Prefix(prefix + ":", "<" + pm.get(prefix) + ">"));
}
return graphc;
}
use of de.uni_koblenz.aggrimm.icp.crypto.sign.graph.GraphCollection in project webofneeds by researchstudio-sat.
the class WonSigner method sign.
/**
* Signs the graphs of the dataset with the provided private key and referencing
* the provided certificate/public key uri in signature, this uri will be used
* to extract key by the verification party.
*
* @param privateKey the private key
* @param cert the certificate reference (where the public key can be found for verification)
* @param graphsToSign the names of the graphs that have to be signed. If not provided -
* all the graphs that don't have signatures will be signed.
* @throws Exception
*/
// TODO chng exceptions to won exceptions?
public List<WonSignatureData> sign(PrivateKey privateKey, String cert, PublicKey publicKey, String... graphsToSign) throws Exception {
List<WonSignatureData> sigRefs = new ArrayList<>(graphsToSign.length);
MessageDigest md = MessageDigest.getInstance(ENV_HASH_ALGORITHM, SIGNING_ALGORITHM_PROVIDER);
String fingerprint = Base64.getEncoder().encodeToString(md.digest(publicKey.getEncoded()));
for (String signedGraphUri : graphsToSign) {
// TODO should be generated in a more proper way and not here - check of the name already exists etc.
if (logger.isDebugEnabled()) {
StringWriter sw = new StringWriter();
RDFDataMgr.write(sw, dataset.getNamedModel(signedGraphUri), Lang.TRIG);
logger.debug("signing graph {} with content: {}", graphsToSign, sw.toString());
}
String signatureUri = signedGraphUri + "-sig";
// create GraphCollection with one NamedGraph that corresponds to this Model
GraphCollection inputGraph = ModelConverter.modelToGraphCollection(signedGraphUri, dataset);
// sign the NamedGraph inside that GraphCollection
SignatureData sigValue = signNamedGraph(inputGraph, privateKey, cert);
String hash = new String(Base64.getEncoder().encodeToString(sigValue.getHash().toByteArray()));
WonSignatureData sigRef = new WonSignatureData(signedGraphUri, signatureUri, sigValue.getSignature(), hash, fingerprint, cert);
sigRefs.add(sigRef);
}
return sigRefs;
}
use of de.uni_koblenz.aggrimm.icp.crypto.sign.graph.GraphCollection in project webofneeds by researchstudio-sat.
the class ModelConverterTest method modelToGraphCollectionTest.
@Test
@Ignore
public /**
* Reads from TRIG with Jena API into Dataset 1, transforms one named graph from
* that Dataset into Signingframework's API GraphCollection and writes it with
* Signingframework's API, reads the result with Jena API into Dataset 2, and
* checks if the specified named graph model from Dataset 1 is isomorphic with
* the same named graph model from Dataset 2.
*/
void modelToGraphCollectionTest() throws Exception {
for (String resourceFile : RESOURCE_FILES) {
// prepare the input Dataset containg the Model to be converted
InputStream is = this.getClass().getResourceAsStream(resourceFile);
File outFile = testFolder.newFile();
// use this when debugging:
// File outFile = File.createTempFile("won", ".trig");
// System.out.println(outFile);
Dataset dataset = DatasetFactory.createGeneral();
RDFDataMgr.read(dataset, is, RDFFormat.TRIG.getLang());
is.close();
// test the convertion from the Model to the NamedGraph
String modelName = dataset.listNames().next();
Model model = dataset.getNamedModel(modelName);
// the method to be tested
GraphCollection gc = ModelConverter.modelToGraphCollection(modelName, dataset);
TriGPlusWriter.writeFile(gc, outFile.getAbsolutePath(), false);
// check that the resulting graph collection is a representation
// of the converted model. For this, read the resulting graph collection
// as a Model with Jena API
InputStream is2 = new FileInputStream(outFile);
Dataset dataset2 = DatasetFactory.createGeneral();
RDFDataMgr.read(dataset2, is2, RDFFormat.TRIG.getLang());
is2.close();
Model model2 = dataset2.getNamedModel(modelName);
File outFile2 = testFolder.newFile();
// use this when debugging:
// File outFile2 = File.createTempFile("won", ".trig");
// System.out.println(outFile2);
OutputStream os = new FileOutputStream(outFile2);
RDFDataMgr.write(os, dataset2, RDFFormat.TRIG.getLang());
os.close();
// check that the model obtained from resulting graph collection is
// a representation of the original converted model.
Assert.assertTrue(model.listStatements().hasNext() && model2.listStatements().hasNext());
Assert.assertTrue(model.isIsomorphicWith(model2));
}
}
use of de.uni_koblenz.aggrimm.icp.crypto.sign.graph.GraphCollection in project webofneeds by researchstudio-sat.
the class ModelConverterTest method namedGraphToModelTest.
@Test
@Ignore
public /*
* Reads from TRIG with Jena API into Dataset 1, transforms one named Model from
* that Dataset into Signingframework's API GraphCollection with one NamedGraph,
* transforms (converts) that NamedGraph into Jena's Model, and checks if the
* resulting Model is the same as original Model.
*/
void namedGraphToModelTest() throws Exception {
for (String resourceFile : RESOURCE_FILES) {
// prepare GraphCollection with NamedGraph to be converted:
InputStream is = this.getClass().getResourceAsStream(resourceFile);
Dataset dataset = DatasetFactory.createGeneral();
RDFDataMgr.read(dataset, is, RDFFormat.TRIG.getLang());
is.close();
String modelName = dataset.listNames().next();
Model model1 = dataset.getNamedModel(modelName);
// this method is not tested here and used just for input
// generation and to make it easier Namedgraph<->Model comparison
// (but it's tested in other method, see modelToGraphCollectionTest())
GraphCollection gc = ModelConverter.modelToGraphCollection(modelName, dataset);
LinkedList<NamedGraph> graphs = gc.getGraphs();
String graphName = null;
for (NamedGraph g : graphs) {
if (!g.getName().isEmpty() && g.getName().contains(modelName)) {
graphName = g.getName();
break;
}
}
// use this when debugging:
// File outFile0 = File.createTempFile("won", ".trig");
// System.out.println(outFile0);
// OutputStream os0 = new FileOutputStream(outFile0);
// TriGPlusWriter.writeFile(gc, outFile0.getAbsolutePath(), false);
// os0.close();
// test convert from NamedGraph of GraphCollection into Model
Model model2 = ModelConverter.namedGraphToModel(graphName, gc);
Dataset dataset2 = DatasetFactory.createGeneral();
dataset2.addNamedModel(modelName, model2);
// TODO maybe chng the API so that the prefix map is taken care of in the
// converter:
// if it makes sense from the the usage of this in Assembler point of view
dataset2.getDefaultModel().setNsPrefixes(dataset2.getNamedModel(modelName).getNsPrefixMap());
File outFile = testFolder.newFile();
// use this when debugging:
// File outFile = File.createTempFile("won", ".trig");
// System.out.println(outFile);
OutputStream os = new FileOutputStream(outFile);
RDFDataMgr.write(os, dataset2, RDFFormat.TRIG.getLang());
os.close();
// make sure that the original Model that was used to generate test input
// GraphCollection with NamedGraph is isomorphic with the Model after
// conversion is applied:
Assert.assertTrue(model1.listStatements().hasNext() && model2.listStatements().hasNext());
Assert.assertTrue(model1.isIsomorphicWith(model2));
}
}
Aggregations