//* Licensed Materials - Property of * //* IBM * //* Miracle A/S * //* Alexandra Instituttet A/S * //* * //* eu.abc4trust.pabce.1.34 * //* * //* (C) Copyright IBM Corp. 2014. All Rights Reserved. * //* (C) Copyright Miracle A/S, Denmark. 2014. All Rights Reserved. * //* (C) Copyright Alexandra Instituttet A/S, Denmark. 2014. All * //* Rights Reserved. * //* US Government Users Restricted Rights - Use, duplication or * //* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. * //* * //* This file is licensed under the Apache License, Version 2.0 (the * //* "License"); you may not use this file except in compliance with * //* the License. You may obtain a copy of the License at: * //* http://www.apache.org/licenses/LICENSE-2.0 * //* Unless required by applicable law or agreed to in writing, * //* software distributed under the License is distributed on an * //* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * //* KIND, either express or implied. See the License for the * //* specific language governing permissions and limitations * //* under the License. * //*/**/**************************************************************** package eu.abc4trust.services.issuer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.List; import java.util.Random; import org.junit.Test; import com.google.inject.Guice; import com.google.inject.Injector; import com.ibm.zurich.idmx.interfaces.util.Pair; import eu.abc4trust.abce.testharness.IntegrationModuleFactory; import eu.abc4trust.returnTypes.IssuMsgOrCredDesc; import eu.abc4trust.ri.servicehelper.FileSystem; import eu.abc4trust.services.Constants; import eu.abc4trust.services.ITAbstract; import eu.abc4trust.util.attributeEncoding.MyAttributeEncodingFactory; import eu.abc4trust.util.attributeTypes.MyAttributeValue; import eu.abc4trust.xml.Attribute; import eu.abc4trust.xml.AttributeInLogEntry; import eu.abc4trust.xml.CredentialSpecification; import eu.abc4trust.xml.IssuanceLogEntry; import eu.abc4trust.xml.IssuancePolicyAndAttributes; import eu.abc4trust.xml.IssuerParameters; import eu.abc4trust.xml.ObjectFactory; import eu.abc4trust.xml.SystemParameters; import eu.abc4trust.xml.util.XmlUtils; public class ITIssuanceLogEntry extends ITAbstract { static ObjectFactory of = new ObjectFactory(); final String baseUrl = "http://localhost:9200/abce-services/issuer"; @Test public void issuanceLogEntryIdemix() throws Exception { String engineSuffix = "idemix"; this.issuanceLogEntry(engineSuffix); } @Test public void issuanceProtocolUProve() throws Exception { String engineSuffix = "uprove"; this.issuanceLogEntry(engineSuffix); } private void issuanceLogEntry(String engineSuffix) throws Exception { String credentialSpecificationFilename = "credentialSpecificationSimpleIdentitycard.xml"; CredentialSpecification credentialSpecification = (CredentialSpecification) XmlUtils .getObjectFromXML( FileSystem.getInputStream("src/test/resources/" + credentialSpecificationFilename), true); this.copyCredentialSpecification(credentialSpecificationFilename); this.deleteStorageDirectory(); this.deleteResourcesDirectory(); IssuerServiceFactory issuerServiceFactory = new IssuerServiceFactory(); SystemParameters systemParameters = issuerServiceFactory .getSystemParameters(1024); String issuerParametersUid = "http://my.country/identitycard/issuancekey_v1.0:" + engineSuffix; IssuerParameters issuerParameters = issuerServiceFactory .getIssuerParameters(issuerParametersUid); Injector userInjector = Guice.createInjector(IntegrationModuleFactory .newModule(new Random(1987))); Pair<IssuMsgOrCredDesc, URI> p = issuerServiceFactory.issueCredential( credentialSpecification, issuerServiceFactory, systemParameters, issuerParametersUid, issuerParameters, userInjector); IssuMsgOrCredDesc userIm = p.first; assertNull(userIm.im); assertNotNull(userIm.cd); IssuanceLogEntry issuerLogEntry = issuerServiceFactory .getIssuanceLogEntry(p.second); assertNotNull(issuerLogEntry); assertEquals(issuerParametersUid, issuerLogEntry .getIssuerParametersUID().toString()); List<Attribute> attributes = this.getIssuerAttributes(); for (int inx = 0; inx < issuerLogEntry.getIssuerAttributes().size(); inx++) { AttributeInLogEntry a = issuerLogEntry.getIssuerAttributes().get( inx); Attribute attribute = attributes.get(inx); MyAttributeValue encodedValue = MyAttributeEncodingFactory.parseValueFromEncoding(attribute.getAttributeDescription().getEncoding(), attribute.getAttributeValue(), null); assertEquals(attribute.getAttributeDescription().getType(), a.getAttributeType()); assertEquals(encodedValue.getIntegerValueOrNull(), a.getAttributeValue()); } } private List<Attribute> getIssuerAttributes() throws Exception { String issuancePolicyAndAttributesFile = "/issuancePolicyAndAttributes.xml"; InputStream is = FileSystem .getInputStream(issuancePolicyAndAttributesFile); IssuancePolicyAndAttributes issuancePolicyAndAttributes = (IssuancePolicyAndAttributes) XmlUtils .getObjectFromXML(is, false); return issuancePolicyAndAttributes.getAttribute(); } private void deleteStorageDirectory() { File directory1 = new File("target" + File.separatorChar + "issuer_storage"); File directory2 = new File("issuer_storage"); this.delete(directory1); this.delete(directory2); directory1.mkdir(); directory2.mkdir(); } private void deleteResourcesDirectory() { File directory1 = new File("target" + File.separatorChar + "issuer_resources"); File directory2 = new File("issuer_resources"); this.delete(directory1); this.delete(directory2); directory1.mkdir(); directory2.mkdir(); } private void delete(File directory) { if (directory.exists()) { this.deleteBody(directory); } } private void deleteBody(File file) { if (file.isDirectory()) { // directory is empty, then delete it if (file.list().length == 0) { file.delete(); System.out.println("Directory is deleted : " + file.getAbsolutePath()); } else { // list all the directory contents String files[] = file.list(); for (String temp : files) { // construct the file structure File fileDelete = new File(file, temp); // recursive delete this.deleteBody(fileDelete); } // check the directory again, if empty then delete it if (file.list().length == 0) { file.delete(); System.out.println("Directory is deleted : " + file.getAbsolutePath()); } } } else { // if file, then delete it file.delete(); System.out.println("File is deleted : " + file.getAbsolutePath()); } } private void copyCredentialSpecification(String filename) throws IOException { File file = null; file = new File("src" + File.separatorChar + "test" + File.separatorChar + "resources" + File.separatorChar + filename); if (!file.exists()) { throw new FileNotFoundException("File does not exist on path: \"" + filename + "\""); } new File(Constants.CREDENTIAL_SPECIFICATION_FOLDER).mkdirs(); FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(new File( Constants.CREDENTIAL_SPECIFICATION_FOLDER + File.separatorChar + filename)); byte[] bytes = new byte[1]; while (fis.read(bytes) != -1) { fos.write(bytes); } fis.close(); fos.close(); } }