/* * A CCNx library test. * * Copyright (C) 2008-2012 Palo Alto Research Center, Inc. * * This work is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. * This work is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ package org.ccnx.ccn.test.profiles.security; import org.ccnx.ccn.CCNHandle; import org.ccnx.ccn.KeyManager; import org.ccnx.ccn.config.UserConfiguration; import org.ccnx.ccn.impl.support.Log; import org.ccnx.ccn.io.content.PublicKeyObject; import org.ccnx.ccn.protocol.ContentName; import org.ccnx.ccn.protocol.PublisherPublicKeyDigest; import org.ccnx.ccn.utils.CreateUserData; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; public class TestUserDataTestRepo { static ContentName testPrefix = null; static ContentName userNamespace = null; static ContentName userKeyStorePrefix = null; static int userCount = 3; @BeforeClass public static void setUpBeforeClass() throws Exception { testPrefix = UserConfiguration.defaultNamespace(); userKeyStorePrefix = new ContentName(UserConfiguration.defaultNamespace(), "home"); userNamespace = new ContentName(testPrefix, "Users"); System.out.println("testPrefix = " + testPrefix); System.out.println("userKeyStorePrefix =" + userKeyStorePrefix); System.out.println("userNamespace = " + userNamespace); } @Test public void testUserCreation() throws Exception { Log.info(Log.FAC_TEST, "Starting testUserCreation"); CCNHandle thandle = CCNHandle.open(); CreateUserData td = new CreateUserData(userKeyStorePrefix, userCount, true, "password".toCharArray()); StringBuffer sb = new StringBuffer("Users: "); for (String s : td.friendlyNames()) { sb.append(" " + s); } System.out.println(sb.toString()); td.publishUserKeysToRepository(userNamespace); // OK, now let's make a handle using one of these users and make sure the publisher ID // and such defaults correctly. // Should we pick randomly? String testUser = td.friendlyNames().iterator().next(); CCNHandle userHandle = td.getHandleForUser(testUser); KeyManager userKeyManager = userHandle.keyManager(); Assert.assertNotNull(userKeyManager.getDefaultKeyID()); System.out.println("Attempting to recover stored users."); CreateUserData td2 = new CreateUserData(userKeyStorePrefix, userCount, true, "password".toCharArray()); Assert.assertEquals(td.friendlyNames(), td2.friendlyNames()); CCNHandle userHandle2 = td2.getHandleForUser(testUser); KeyManager userKeyManager2 = userHandle2.keyManager(); Assert.assertNotNull(userKeyManager.getDefaultKeyID()); Assert.assertNotNull(userKeyManager2.getDefaultKeyID()); CCNHandle standardHandle = CCNHandle.open(); KeyManager standardKeyManager = standardHandle.keyManager(); System.out.println("Default key locator: " + standardKeyManager.getDefaultKeyLocator()); System.out.println("Default key ID: " + standardKeyManager.getDefaultKeyID()); System.out.println("Test user key locator: " + userKeyManager.getDefaultKeyLocator()); System.out.println("Test user key ID: " + userKeyManager.getDefaultKeyID()); System.out.println("Test user key locator2: " + userKeyManager2.getDefaultKeyLocator()); System.out.println("Test user key ID2: " + userKeyManager2.getDefaultKeyID()); Assert.assertFalse(standardKeyManager.getDefaultKeyLocator().equals(userKeyManager.getDefaultKeyLocator())); Assert.assertFalse(standardKeyManager.getDefaultKeyID().equals(userKeyManager.getDefaultKeyID())); Assert.assertTrue(userKeyManager2.getDefaultKeyLocator().equals(userKeyManager.getDefaultKeyLocator())); Assert.assertTrue(userKeyManager2.getDefaultKeyID().equals(userKeyManager.getDefaultKeyID())); for (String friendlyName: td.friendlyNames()){ CCNHandle uHandle = td.getHandleForUser(friendlyName); KeyManager uKeyManager = uHandle.keyManager(); ContentName keyName = new ContentName(userNamespace, friendlyName); //PublicKeyObject pko = new PublicKeyObject(keyName, uKeyManager.getDefaultPublicKey(), uHandle); PublicKeyObject pko = new PublicKeyObject(keyName, uHandle); //pko.saveToRepository(); System.out.println("Object key locator: " + pko.getPublisherKeyLocator()); System.out.println("Object key ID: " + pko.getContentPublisher()); // Canaries -- things getting altered somehow. Assert.assertTrue("Checkpoint 2", userKeyManager2.getDefaultKeyID().equals(userKeyManager.getDefaultKeyID())); PublicKeyObject pkr = new PublicKeyObject(pko.getVersionedName(), standardHandle); if (!pkr.available()) { Log.info("Can't read back object " + pko.getVersionedName()); } else { System.out.println("Retrieved object key locator: " + pkr.getPublisherKeyLocator()); System.out.println("Retrieved object key ID: " + pkr.getContentPublisher()); Assert.assertEquals(pkr.getContentPublisher(), uKeyManager.getDefaultKeyID()); Assert.assertEquals(pkr.getPublisherKeyLocator(), uKeyManager.getDefaultKeyLocator()); } } // Canaries -- things getting altered somehow. Assert.assertTrue("Checkpoint 3", userKeyManager2.getDefaultKeyID().equals(userKeyManager.getDefaultKeyID())); for (String name : td.friendlyNames()) { KeyManager km = td.getUser(name); System.out.println("User: " + name + " key fingerprint: " + km.getDefaultKeyID() + " recalculated key fingerprint: " + new PublisherPublicKeyDigest(km.getDefaultPublicKey())); } System.out.println("Success."); thandle.close(); Log.info(Log.FAC_TEST, "Completed testUserCreation"); } }