//* Licensed Materials - Property of * //* IBM * //* * //* eu.abc4trust.pabce.1.34 * //* * //* (C) Copyright IBM Corp. 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.cryptoEngine.issuer; import java.net.URI; import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.inject.Inject; import eu.abc4trust.cryptoEngine.CryptoEngineException; import eu.abc4trust.returnTypes.IssuerParametersAndSecretKey; import eu.abc4trust.xml.Attribute; import eu.abc4trust.xml.CredentialDescription; import eu.abc4trust.xml.CredentialSpecification; import eu.abc4trust.xml.CryptoParams; import eu.abc4trust.xml.FriendlyDescription; import eu.abc4trust.xml.IssuanceLogEntry; import eu.abc4trust.xml.IssuanceMessage; import eu.abc4trust.xml.IssuanceMessageAndBoolean; import eu.abc4trust.xml.IssuancePolicy; import eu.abc4trust.xml.IssuanceToken; import eu.abc4trust.xml.IssuanceTokenAndIssuancePolicy; import eu.abc4trust.xml.IssuanceTokenDescription; import eu.abc4trust.xml.IssuerParameters; import eu.abc4trust.xml.ObjectFactory; import eu.abc4trust.xml.SecretKey; import eu.abc4trust.xml.SystemParameters; import eu.abc4trust.xml.TestCryptoParams; import eu.abc4trust.xml.util.XmlUtils; public class MockCryptoEngineIssuer implements CryptoEngineIssuer { public static final String ABC4TRUST_EU_MOCKISSUER_PUBLICKEY = "abc4trust.eu/mockissuer/publickey"; private final Map<URI, List<Attribute>> attributeCache; private final Map<URI, IssuancePolicy> issuancePolicyCache; @Inject public MockCryptoEngineIssuer() { this.attributeCache = new HashMap<URI, List<Attribute>>(); this.issuancePolicyCache = new HashMap<URI, IssuancePolicy>(); System.out.println("Hello from CryptoEngineIssuerImpl()"); } @Override public IssuanceMessageAndBoolean initIssuanceProtocol(IssuancePolicy ip, List<Attribute> atts, URI ctxt) { attributeCache.put(ctxt, atts); issuancePolicyCache.put(ctxt, ip); ObjectFactory of = new ObjectFactory(); IssuanceMessage ret = of.createIssuanceMessage(); ret.getContent().add(of.createIssuancePolicy(ip)); ret.setContext(ctxt); IssuanceMessageAndBoolean imab = new IssuanceMessageAndBoolean(); imab.setLastMessage(false); imab.setIssuanceMessage(ret); return imab; } @Override public IssuanceMessageAndBoolean issuanceProtocolStep(IssuanceMessage m) { ObjectFactory of = new ObjectFactory(); IssuanceMessage ret = of.createIssuanceMessage(); //IssuanceProtocolMetadata counter = of.createIssuanceProtocolMetadata(); //counter.setCounter(BigInteger.valueOf(2)); //ret.getAny().add(of.createIssuanceProtocolMetadata(counter)); CredentialDescription cd = of.createCredentialDescription(); cd.setCredentialSpecificationUID(URI.create("no-spec-yet")); cd.setCredentialUID(URI.create("no-uid-yet")); cd.setIssuerParametersUID(URI.create(ABC4TRUST_EU_MOCKISSUER_PUBLICKEY)); for (Attribute a: attributeCache.get(m.getContext())) { cd.getAttribute().add(a); } ret.getContent().add(of.createCredentialDescription(cd)); ret.setContext(m.getContext()); IssuanceMessageAndBoolean imab = new IssuanceMessageAndBoolean(); imab.setLastMessage(true); imab.setIssuanceMessage(ret); return imab; } @Override public IssuerParametersAndSecretKey setupIssuerParameters(SystemParameters syspars, int numberOfAttributes, URI technology, URI uid, URI revParsUid, List<FriendlyDescription> friendlyDescriptions) { ObjectFactory of = new ObjectFactory(); IssuerParameters ip = of.createIssuerParameters(); ip.setAlgorithmID(URI.create("Idemix/RSA")); ip.setMaximalNumberOfAttributes(numberOfAttributes); ip.setCryptoParams(getBogusCryptoEvidence()); ip.setHashAlgorithm(URI.create("SHA-256")); ip.setParametersUID(uid); ip.setRevocationParametersUID(revParsUid); ip.setSystemParametersUID(syspars.getSystemParametersUID()); ip.setVersion("1.0"); IssuerParametersAndSecretKey ret = new IssuerParametersAndSecretKey(); ret.issuerSecretKey = new SecretKey(); ret.issuerParameters = ip; return ret; } @Override public SystemParameters setupSystemParameters(int keyLength) { ObjectFactory of = new ObjectFactory(); SystemParameters ret = of.createSystemParameters(); ret.setCryptoParams(of.createCryptoParams()); ret.setVersion("1.0"); return ret; } private CryptoParams getBogusCryptoEvidence() { ObjectFactory of = new ObjectFactory(); CryptoParams cryptoEvidence = of.createCryptoParams(); TestCryptoParams cryptoParams = of.createTestCryptoParams(); cryptoParams.getData().add("I am MockCryptoEngineUser, and I approve of this message."); cryptoEvidence.getContent().add(of.createTestCryptoParams(cryptoParams)); return cryptoEvidence; } @Override public IssuanceLogEntry getIssuanceLogEntry(URI issuanceEntryUid) throws CryptoEngineException { // TODO Auto-generated method stub return null; } @Override public IssuanceTokenDescription extractIssuanceTokenDescription(IssuanceMessage issuanceMessage) { IssuanceToken it = (IssuanceToken) XmlUtils.unwrap(issuanceMessage.getContent().get(0), IssuanceToken.class); if(it == null) { return null; } else { return it.getIssuanceTokenDescription(); } } @Override public IssuanceTokenAndIssuancePolicy extractIssuanceTokenAndPolicy( IssuanceMessage issuanceMessage) throws CryptoEngineException { IssuanceToken it = (IssuanceToken) XmlUtils.unwrap(issuanceMessage.getContent().get(0), IssuanceToken.class); if(it == null) { return null; } IssuanceTokenAndIssuancePolicy ret = new ObjectFactory().createIssuanceTokenAndIssuancePolicy(); ret.setIssuanceToken(it); IssuancePolicy ip = issuancePolicyCache.get(issuanceMessage.getContext()); ret.setIssuancePolicy(ip); return ret; } }