@Test public void testReIssuance() throws Exception { int keyLength = 2048; SecretWrapper uproveSecretWrapper = new SecretWrapper(IntegrationTestUtil.getUProveSecret()); UProveUtils uproveUtils = new UProveUtils(); // Get Injectors, Injector revocationInjector = Guice.createInjector( IntegrationModuleFactory.newModule( new Random(1231), CryptoEngine.IDEMIX, uproveUtils.getUserServicePort())); RevocationProxyAuthority revocationProxyAuthority = revocationInjector.getInstance(RevocationProxyAuthority.class); Injector governmentInjector = Guice.createInjector( BridgingModuleFactory.newModule( new Random(1231), IssuerCryptoEngine.UPROVE, uproveUtils.getIssuerServicePort(), revocationProxyAuthority)); Injector fakeInjector = Guice.createInjector( IntegrationModuleFactory.newModule( new Random(1231), CryptoEngine.IDEMIX, uproveUtils.getUserServicePort())); Injector userInjector = Guice.createInjector( BridgingModuleFactory.newModule( new Random(1231), uproveUtils.getUserServicePort(), revocationProxyAuthority)); Injector verifierInjector = Guice.createInjector( BridgingModuleFactory.newModule( new Random(1231), uproveUtils.getVerifierServicePort(), revocationProxyAuthority)); IssuerAbcEngine governmentEngine = governmentInjector.getInstance(IssuerAbcEngine.class); SystemParameters systemParameters = governmentEngine.setupSystemParameters(keyLength, CryptoUriUtil.getUproveMechanism()); IssuerAbcEngine fakeEngine = fakeInjector.getInstance(IssuerAbcEngine.class); SystemParameters ideMixSystemParameters = fakeEngine.setupSystemParameters(keyLength, CryptoUriUtil.getIdemixMechanism()); systemParameters.getAny().addAll(ideMixSystemParameters.getAny()); // Load secret and store it. CredentialManager userCredentialManager = userInjector.getInstance(CredentialManager.class); IssuanceHelper issuanceHelper = new IssuanceHelper(); // Setup key managers. KeyManager issuerKeyManager = governmentInjector.getInstance(KeyManager.class); KeyManager userKeyManager = userInjector.getInstance(KeyManager.class); KeyManager verifierKeyManager = verifierInjector.getInstance(KeyManager.class); KeyManager revocationKeyManager = revocationInjector.getInstance(KeyManager.class); issuerKeyManager.storeSystemParameters(systemParameters); userKeyManager.storeSystemParameters(systemParameters); verifierKeyManager.storeSystemParameters(systemParameters); revocationKeyManager.storeSystemParameters(systemParameters); // Setup issuance policies. IssuancePolicy issuancePolicyIdCard = getObjectFromXML(IntegrationTestUtil.ISSUANCE_POLICY_ID_CARD, true); URI idCardIssuancePolicyUid = issuancePolicyIdCard.getCredentialTemplate().getIssuerParametersUID(); // Load credential specifications. CredentialSpecification credSpecIdCard = getObjectFromXML(IntegrationTestUtil.CREDENTIAL_SPECIFICATION_ID_CARD, true); // Store credential specifications. URI credSpecIdCardUID = credSpecIdCard.getSpecificationUID(); issuerKeyManager.storeCredentialSpecification(credSpecIdCardUID, credSpecIdCard); verifierKeyManager.storeCredentialSpecification(credSpecIdCardUID, credSpecIdCard); // Generate revocation parameters. RevocationAbcEngine revocationEngine = revocationInjector.getInstance(RevocationAbcEngine.class); URI revParamsUid = IntegrationTestUtil.REVOCATION_PARAMETERS_UID; Reference revocationInfoReference = new Reference(); revocationInfoReference.setReferenceType(URI.create("https")); revocationInfoReference.getReferences().add(URI.create("example.org")); Reference nonRevocationEvidenceReference = new Reference(); nonRevocationEvidenceReference.setReferenceType(URI.create("https")); nonRevocationEvidenceReference.getReferences().add(URI.create("example.org")); Reference nonRrevocationUpdateReference = new Reference(); nonRrevocationUpdateReference.setReferenceType(URI.create("https")); nonRrevocationUpdateReference.getReferences().add(URI.create("example.org")); RevocationAuthorityParameters revocationAuthorityParameters = revocationEngine.setupRevocationAuthorityParameters( keyLength, CryptoUriUtil.getIdemixMechanism(), revParamsUid, revocationInfoReference, nonRevocationEvidenceReference, nonRrevocationUpdateReference); // Generate issuer parameters. URI hash = new URI("urn:abc4trust:1.0:hashalgorithm:sha-256"); IssuerParameters issuerParametersGovernment = governmentEngine.setupIssuerParameters( credSpecIdCard, systemParameters, idCardIssuancePolicyUid, hash, CryptoUriUtil.getUproveMechanism(), revParamsUid, null); issuerKeyManager.storeRevocationAuthorityParameters( revParamsUid, revocationAuthorityParameters); userKeyManager.storeRevocationAuthorityParameters(revParamsUid, revocationAuthorityParameters); verifierKeyManager.storeRevocationAuthorityParameters( revParamsUid, revocationAuthorityParameters); issuerKeyManager.storeIssuerParameters(idCardIssuancePolicyUid, issuerParametersGovernment); userKeyManager.storeIssuerParameters(idCardIssuancePolicyUid, issuerParametersGovernment); verifierKeyManager.storeIssuerParameters(idCardIssuancePolicyUid, issuerParametersGovernment); if (uproveSecretWrapper.isSecretOnSmartcard()) { // add smartcard to manager CardStorage cardStorage = userInjector.getInstance(CardStorage.class); cardStorage.addSmartcard( uproveSecretWrapper.getSoftwareSmartcard(), uproveSecretWrapper.getPin()); // sign issuer attributes and add to smartcard uproveSecretWrapper.addIssuerParameters(issuerParametersGovernment); } else { userCredentialManager.storeSecret(uproveSecretWrapper.getSecret()); // URI secretUid = secret.getSecretDescription().getSecretUID(); } // Get identity card. String birthday = "1995-05-05Z"; CredentialDescription cd3 = IntegrationTestUtil.issueAndStoreIdCard( governmentInjector, userInjector, issuanceHelper, birthday); Credential c = userCredentialManager.getCredential(cd3.getCredentialUID()); System.out.println("Printing credential: " + c); System.out.println( "Cred Desc: " + XmlUtils.toXml(of.createCredentialDescription(c.getCredentialDescription()))); System.out.println("CryptoParams size: " + c.getCryptoParams().getAny().size()); System.out.println( "Arraylist size: " + ((ArrayList<?>) c.getCryptoParams().getAny().get(0)).size()); // The verifier needs to retrive the latest revocation information // in order to put in the UID in the presentation policy. RevocationInformation revocationInformation = revocationEngine.updateRevocationInformation(revParamsUid); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); useOneToken( userInjector, verifierInjector, issuanceHelper, revocationInformation, cd3.getCredentialUID()); }