// TestEye.java package com.sequencelogic; import java.util.Arrays; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; //import static com.sequencelogic.Permissions.PERMISSION_STREAM; //import org.json.JSONException; //import org.json.JSONObject; import com.sequencelogic.ByteArr; import com.sequencelogic.Digester; import com.sequencelogic.EYE_FILE_LOCK_STATUS; import com.sequencelogic.EYE_FILE_LOCK_TYPE; import com.sequencelogic.EYE_LOG_LEVEL; import com.sequencelogic.EYE_LOG_SINK; import com.sequencelogic.EyeWrapper; import com.sequencelogic.Key; import com.sequencelogic.Keyring; import com.sequencelogic.eyeinterface; public class TestEye { static { try { System.out.println("[JAVA] " + " Loading libeye... " + System.getProperty("java.library.path")); System.loadLibrary ("eye"); } catch (UnsatisfiedLinkError e) { System.err.println ("Native library failed to load:\n" + e); System.exit (1); } } protected static final int UTF_BUF_SZ = 64; protected static String msgtest = "Hi is anybody home"; protected static String utftest = "SMILING FACE WITH OPEN MOUTH AND SMILING EYES \uD83D\uDE04"; //protected static String utftest = "\uD83D\uDE04"; protected static String jionu = "test/jtest.ionu"; protected static String testfile = "test/tartest.txt"; protected static String attachfile = "test/attachment.docx"; protected static String thumbfile = "test/thumb.png"; protected static ByteArr TGIkey = new ByteArr(32); protected static ByteArr badkey = new ByteArr(32); protected static ByteArr goodkey = new ByteArr(32); protected static ByteArr cgkey = new ByteArr(64); protected static ByteArr testkey = new ByteArr(2048); protected static String URN = "urn:sl:000000:00000000:0000:000000000000"; protected static String PERMS= "{\"doorway\":[],\"writeAssign\":[],\"admin\":[\"owner\"],\"owner\":\"00000002\",\"write\":[],\"read\":[\"owner\"],\"readAssign\":[\"owner\"],\"adminAssign\":[],\"doorwayAssign\":[]}"; protected static String policyTest = "{ \"_id\" : \"urn:sl:000000:::\", \"name\" : \"TEST VAN\", \"statusPassphrase\" : \"madman\", \"tokenPassphrase\" : \"madman\", \"policies\": [ {\"policyName\": \"allowUserPasswordChange\", \"policyType\": \"BOOLEAN\", \"mayDelegateToAdminUsers\": true, \"mayDelegateToNormalUsers\": false, \"mayAdministerViaRemoteApp\": true, \"policyValue\": true}, {\"policyName\": \"allowUserPasswordReset\", \"policyType\": \"BOOLEAN\", \"mayDelegateToAdminUsers\": true, \"mayDelegateToNormalUsers\": false, \"mayAdministerViaRemoteApp\": true, \"policyValue\": false}, {\"policyName\": \"duration\", \"policyType\": \"BOOLEAN\", \"mayDelegateToAdminUsers\": true, \"mayDelegateToNormalUsers\": false, \"mayAdministerViaRemoteApp\": true, \"policyValue\": 22}, {\"policyName\": \"percentage\", \"policyType\": \"BOOLEAN\", \"mayDelegateToAdminUsers\": true, \"mayDelegateToNormalUsers\": false, \"mayAdministerViaRemoteApp\": true, \"policyValue\": 99.9}]}"; protected static String RSA_private = "-----BEGIN RSA PRIVATE KEY-----" + "MIIEpAIBAAKCAQEAzBTVhKef/68WvTns382xPw9i4RvZX3y8DH70YEvP3WgqC39p" + "D3PLhe7RiRvEGHWm0cdVpvUg1rdUE1pVPNSZjan/I8YUuX9eqLDZf6iqCYm5KwLj" + "reaz2T0QBaKCs98I2W5qULbzKhqtw3Yp9gOyZTlEbgkg0ZVunzLr42se0LsvmbWl" + "Er3UksyzAJfsE6q0eKjyvpaoAFT1nTEr84IrZqUdn2YKV80WX9zj7maQqWviDKow" + "xK8NKO50oCouTXNDpxwYKqoT9/8rcpOUSXawBDbcNZWHKvG8e8icxLQqpDT3Egdn" + "z+VtQXRwk1Yuyt8eE9jgh5dmBoo7PspQt6EVvwIDAQABAoIBAHkr5Zrd7CHj05yG" + "yB4aAyNt/0epQWdwqDbDKlYCrWjIcC5jd/20wyLCqaa+1a+wK1xi/ngjE1xpfYIA" + "IJv9ny59wP98nNGGzq1aU8l4W31OSKNBE+4tDJvvpZOy6efihV6UMIu8FKTrMkDb" + "6A4qI8H2PqsWwGWwU/4yPdzJvYIwkjUDayCfOYjLjYJgiDK4ZrSkH6nwlTQ0ajaP" + "gyLZrJu8o7KOa6bmyjT4iXUsvXsh5Q37rzLQd7sUOXCRvLp6QdPWvAy9zGDDew3q" + "3ecA+87h1WDWVhnEUZl+pNKtBHRo9THUTIh3lG0eZNVPj+RLXLN8nARDauZb6cSy" + "h35jQAECgYEA8exV7ssnhVlN8VZF/NN0FI+RX7fSTXcvVjtzQXsq8dm4vNj6VYde" + "5gsgYSar3L0hdROFBP6E6OmzrLnXHfuVp0h4Y1CcYjbaj6uqUfm4e3k8xUKqwez/" + "8cs7D+xhlpncf5z0ZaMJFS8bgRRUOReB2+qAcJowxJ/J+bwxHAC9y2sCgYEA1/TP" + "gCXVt2Hh+mpwLkg1nYJItDJzGJwH8uN3pD53i03qRsfGdHaf+JHFXQF6XpupyvlZ" + "0jR7i7/+OY1oqRTfUcApfyUKlOv8bOz6O+DNjh9p2eDx/Oztt4vQgjRqbRVqTFVu" + "zwni5ApvIhpz0f22GBBWOt51DpmnTsTwSJplZ/0CgYADW/K9hBiiY2EPrtD997mu" + "52dvWtASv0rq+ZxaFmm8Pfewt5qSQXTx4MmsT6snP4ENbR31ucsCqOwTw+jWw72K" + "Oxlg16e0PWq/f/S3eq4zGLXdT1Wrp6zOILJLQE8CllRXeUhzeNYRczwAiNW6jTcC" + "ZLkv1xRCRq25SAGuj9wSzQKBgQCIjWQnw8S/kEUz8tm8aix8zETsrHnatc7Q5sRg" + "Np+glkPtPaVfPyMoKgSCKs0VxZg3oDQLluQIGf7GpYPoZipPpxKWMvXd9NpIhhA0" + "jJFtrK9h9bsOE0K9LMtLiZlCIKh2XA8VG0s8ptxe1BsoTSU3Uh00XDXoZYBFboIB" + "Zp94gQKBgQCR5mcD8JIWOts0ZxrTwho2kg898WRINusaIIhrCFPoWymvLpoeRzkG" + "KvOt9T3KXVzT6lqmBRfZO50Dd9N7+oxYEA7OJb1JJ4WUmOn5llJOgsVmaT4iVdj6" + "FqFAwmMOl6/hbaIXBUZ4q/QbzZLxmezOu0XwUzQ4ptvdgaab2qSkmQ==" + "-----END RSA PRIVATE KEY-----"; protected static String PEM = "---BEGIN ABCDEF END---"; protected static String BIGCollabs = "{\"collab\":[{\"publicKey\":\"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxRZ/gVxF/PtL3h5\\/RMhVl\nuoQvmbqoMSdyXANXxt0lOYvxYfZx2s8HRRt69HMPUtUcZ30D87tG/F2490RhKN1D\nocdJjfrpDOPqeRdWl3Fnfdrp3RJEMz9OiJi+wcA2LRz9lqo9vc9ZTp7DQS4EWYOH\nNligpXAesKPU5jkg0lB8XCXQ4VFENi+31CcLcHa2Ufz6nqgqiHkUQ/ANQodzCcfN\nMNP04YHWluhsL+3oAg6HTICPQvaY6jip1TOM1CFGaQaKXqRhMcj0ksGo1rI7DzUo\njPA15+4fIsuDtwVhDzm7W72VN1s99K6iysw/oq/sfclmLWDDy0wG1wlEFBEbfr1F\nLwIDAQAB\n-----END PUBLIC KEY-----\n\",\"enabled\":true,\"cghk\":\"/ymTxXmW/gQ0YRBd5uy8WEKID4jxvN3nqFLKViDFJdg=\",\"phone\":{\"primary\":\"\"},\"van\":\"000000\",\"status\":\"active\",\"saved\":1389055389313,\"_cached\":true,\"meta\":{\"v\":\"Sunshine (RC3) : 2798:7453 : \",\"pmo\":{\"min\":11,\"n\":6,\"max\":27,\"avg\":15,\"key\":\"pmo\"},\"all\":{\"min\":5,\"n\":82,\"max\":135,\"avg\":21,\"key\":\"all\"},\"tDur\":14,\"ip\":\"192.168.1.225\"},\"k2\":\"offline\",\"version\":1,\"urn\":\"urn:sl:000000:E5E3D3AB::\",\"cr\":[\"favbook::\",\"flame::\",\"kiss::\",\"password::6EVdXfSkSX+I15ZXGCRRH4TnpBnt17ivih5Nd7DxkPQ=\"],\"_tcache\":1389056158237,\"prefs\":{\"msgTBR\":false,\"shareFullname\":true,\"searchEmail\":true,\"receiveOptInNews\":true,\"shareAvatar\":true,\"searchPhone\":true,\"msgTTL\":0,\"userType\":\"SNT_UNKNOWN\",\"searchUsername\":true,\"shareEmail\":true,\"shareUsername\":true,\"msgRR\":false,\"EST\":false,\"sharePhone\":true,\"msgDR\":true},\"messageIdentifier\":\"\",\"_id\":\"urn:sl:000000:E5E3D3AB::\",\"updated\":1389055389420,\"email\":{\"primary\":\"dan3@sequencelogic.net\"},\"created\":1389055389254,\"user\":\"dan3\",\"fullname\":\"d3\"},{\"publicKey\":\"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw7EbH3K/OsSSPVGTA9SF\n+t3f47GRHM/yCUCP5ibvsGlWO8J5w383kfRCd3qcV6TqlQRZrv7mrAwlWmBng0YX\nvHro21Br5nTbJANA5TywgxEjkZD9Pw64oD2k1lXb+H+HftBWV1p8gZG+zDvkqNnZ\nmRFQgAXd0JqXd061LTfZIcF9DkVzCkrj03r8BB9wbJuS6mRSycmnGDZS85yx3zaG\ntNfKzyNMQWDiAJgo2bkS2VkeTWtoBRb2vDK7gXsw6JbJKEBrYlZwf9llc43LxKu2\naFUc8gw7KqSXtBP289EPa4gN98fVB8vmTodLgSCWxUtqvcHn6TmMrw4LoPiUTeO4\nxwIDAQAB\n-----END PUBLIC KEY-----\n\",\"enabled\":true,\"phone\":{\"primary\":\"9254742300\"},\"van\":\"000000\",\"status\":\"active\",\"saved\":1389055609503,\"_cached\":true,\"meta\":{\"v\":\"Sunshine (RC3) : 2798:7453 : \",\"pmo\":{\"min\":11,\"n\":4,\"max\":27,\"avg\":16,\"key\":\"pmo\"},\"all\":{\"min\":5,\"n\":57,\"max\":135,\"avg\":23,\"key\":\"all\"},\"tDur\":11,\"ip\":\"192.168.1.225\"},\"k2\":\"online\",\"version\":33,\"urn\":\"urn:sl:000000:00000003::\",\"_tcache\":1389055610117,\"prefs\":{\"msgTBR\":false,\"shareFullname\":true,\"searchEmail\":true,\"receiveOptInNews\":false,\"shareAvatar\":true,\"searchPhone\":true,\"avatar\":\"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\",\"msgTTL\":0,\"userType\":\"SNT_ROBOT\",\"searchUsername\":true,\"shareEmail\":true,\"shareUsername\":true,\"msgRR\":false,\"EST\":true,\"sharePhone\":true,\"msgDR\":false},\"messageIdentifier\":\"\",\"_id\":\"urn:sl:000000:00000003::\",\"updated\":1389055837363,\"email\":{\"primary\":\"nikki@sequencelogic.net\"},\"created\":1388782726494,\"user\":\"nikki\",\"fullname\":\"nikki bot\"}]}"; // C style char* (ascii with null termination byte) to String public static String ByteArrToString (ByteArr bytes) { StringBuilder s = new StringBuilder (); for (int i = 0; ; ++i) { char c = (char)bytes.getitem(i); if (c == 0) { return s.toString(); } else { s.append (c); } } } // C unsigned char*, UTF-8 encoded to String /*public static String ByteArrToString (ByteArr ba, int len) { byte[] bytes = ba.getbytes (len); String s = ""; try { s = new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { System.err.println (e); } return s; }*/ /*public static byte[] ByteArrToBytes (ByteArr ba, int len) { byte[] bytes = ba.getbytes (len); //byte[] bytes = new byte[len]; //for (int i=0; i> 4) & 0x0f], hexDigit[b & 0x0f] }; return new String(array); } public static void PrintBytes(byte[] array, String name) { for (int i = 0; i < array.length; ++i) { System.out.println(name + "[" + i + "] = " + "0x" + ByteToHex(array[i])); } } public static void main (String argv[]) { System.out.println ("testing JNI interface"); // System.out.println ("PERMISSION_STREAM: "); // System.out.println ("PERMISSION_STREAM: " + Permissions.PERMISSION_STREAM); // System.out.println ("PERMISSION_STREAM: " + PERMISSION_STREAM); boolean isValid; Digester digest = new Digester(); File file = new File (testfile); String goodDigest = "bad digest"; try { goodDigest = digest.digest (file); } catch (IOException e) { System.err.println (e); } // Policy checking isValid = eyeinterface.ionu_policy_install (policyTest); String policy = eyeinterface.ionu_policy_check ("allowUserPasswordChange"); System.out.println (policy); eyeinterface.ionu_policy_uninstall (); // Checks for valid Eye Container /* isValid = eyeinterface.ionu_eyefile_is_valid ("bogus"); isValid = eyeinterface.ionu_eyefile_is_valid ("test/tartest.txt"); isValid = eyeinterface.ionu_eyefile_is_valid ("test/ctest.ionu"); */ // Create a TGI key for test, and a bad key too short val = 0; for (int ctr = 0; ctr < 32; ctr++) { TGIkey.setitem (ctr, val++); badkey.setitem (ctr, val++); } /*byte[] bs = ByteArrToBytes (TGIkey, 32); ByteArr ba = BytesToByteArr (bs); for (int i=0; i<32; ++i) { if (TGIkey.getitem (i) != ba.getitem(i)) System.out.println ("array mistmatch"); }*/ val = 1; badkey.setitem (0, val); // 1 bit difference from good TGI key isValid = eyeinterface.ionu_derive_key ("hi", goodkey.cast()); String msg, meta; //byte[] tgi = new byte[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; // Basic create and get message test /* isValid = eyeinterface.ionu_eyefile_create_with_message (jionu, TGIkey.cast(), "Thread", msgtest, msgtest.length(), URN, PERMS); msg = eyeinterface.ionu_eyefile_get_message (jionu, ba.cast(), "Thread"); if (msg.equals (msgtest)) { System.out.println ("PASSED: Message test - " + msg); } else { System.out.println ("FAILED: Message test"); } try { byte[] utf8Bytes = utftest.getBytes("UTF-8"); ba = BytesToByteArr (utf8Bytes); isValid = eyeinterface.ionu_eyefile_create_with_utfmsg (jionu, TGIkey.cast(), "Smiley", ba.cast(), utf8Bytes.length, "text/plain;charset=UTF-8", URN, PERMS); isValid = eyeinterface.ionu_eyefile_add_utfmsg (jionu, TGIkey.cast(), "Smiley2", ba.cast(), utf8Bytes.length, "text/plain"); ByteArr utf = new ByteArr(UTF_BUF_SZ); long utb = eyeinterface.ionu_eyefile_get_utfmsg (jionu, TGIkey.cast(), "Smiley", utf.cast(), UTF_BUF_SZ); if (utb == 0 || utb > UTF_BUF_SZ) { System.err.println ("Invalid number of UTF bytes: " + utb); } else { // Check that byte[] arrays match byte[] cutf = ByteArrToBytes (utf, (int)utb); if (Arrays.equals (cutf, utf8Bytes)) { System.out.println ("UTF-8 byte[] round trip with SMILEY FACES passed"); // Check that Strings match String utfstring = ByteArrToString (utf, (int)utb); if (utfstring.equals (utftest)) System.out.println ("UTF-8 String round trip with SMILEY FACES passed"); } else { System.err.println ("UTF round trip failed " + utf8Bytes.length + " " + cutf.length); PrintBytes (utf8Bytes, "utf"); PrintBytes (cutf, "cutf"); } } utb = eyeinterface.ionu_eyefile_get_utfmsg (jionu, TGIkey.cast(), "Smiley2", utf.cast(), UTF_BUF_SZ); if (utb == 0 || utb > UTF_BUF_SZ) { System.err.println ("Invalid number of UTF bytes: " + utb); } else { String utfstring = ByteArrToString (utf, (int)utb); if (utfstring.equals (utftest)) System.out.println ("UTF-8 String Smiley2 passed"); } } catch (UnsupportedEncodingException e) { System.err.println (e); } try { byte[] utf8Bytes = BIGCollabs.getBytes("UTF-8"); ba = BytesToByteArr (utf8Bytes); eyeinterface.ionu_eyefile_create_with_utfmsg (jionu, TGIkey.cast(), "Collabs", ba.cast(), utf8Bytes.length, "ionu/Collabs", URN, PERMS); ByteArr utf = new ByteArr(1024); long utb = eyeinterface.ionu_eyefile_get_utfmsg (jionu, TGIkey.cast(), "Collabs", utf.cast(), 1024); System.out.println ("Big collabs " + utb); utf = new ByteArr((int)utb); utb = eyeinterface.ionu_eyefile_get_utfmsg (jionu, TGIkey.cast(), "Collabs", utf.cast(), utb); String utfstring = ByteArrToString (utf, (int)utb); if (utb > 0 && utfstring.equals (BIGCollabs)) System.out.println ("BIG Collabs passed utf test"); } catch (UnsupportedEncodingException e) { System.err.println (e); } meta = eyeinterface.ionu_eyefile_get_filenames (jionu); System.out.println (meta); meta = eyeinterface.ionu_eyefile_get_meta_data (jionu); System.out.println (meta); //msg = eyeinterface.ionu_eyefile_get_message (jionu, TGIkey.cast(), "Smiley"); //byte[] newBytes = msg.getBytes(); //PrintBytes (newBytes, "new"); //if (msg.equals (utftest)) { // System.out.println ("PASSED: UTF message test - " + msg); //} else { // System.out.println ("FAILED: UTF message test - " + msg); //} */ // Basics of logging eyeinterface.ionu_configlog ("testapp", "iPad", EYE_LOG_LEVEL.IONU_DEBUG, EYE_LOG_SINK.IONU_CONSOLE); eyeinterface.ionu_log (EYE_LOG_LEVEL.IONU_DEBUG, "Debug message"); eyeinterface.ionu_log (EYE_LOG_LEVEL.IONU_INFO, "Informational message"); eyeinterface.ionu_log (EYE_LOG_LEVEL.IONU_WARN, "Warning message"); eyeinterface.ionu_log (EYE_LOG_LEVEL.IONU_ERROR, "Error message"); eyeinterface.ionu_configfilelog ("testapp", "iPad", EYE_LOG_LEVEL.IONU_DEBUG, "test/jtest.log"); eyeinterface.ionu_log (EYE_LOG_LEVEL.IONU_INFO, "Informational message"); eyeinterface.ionu_log (EYE_LOG_LEVEL.IONU_WARN, "Warning message"); eyeinterface.ionu_closelog(); try { File logfile = new File ("test/jtest.log"); if (logfile.length() > 100 && logfile.delete()) System.out.println ("PASSED: Logging tests"); else System.out.println ("FAILED: Logging tests"); } catch (Exception e) { e.printStackTrace(); } EYE_FILE_LOCK_STATUS st; st = eyeinterface.ionu_eyefile_lock (jionu, "me", EYE_FILE_LOCK_TYPE.EYE_FILE_LOCK_READ); if (st != EYE_FILE_LOCK_STATUS.EYE_FILE_LOCK_OK) System.out.println ("FAILED: LockFile() read lock - me"); st = eyeinterface.ionu_eyefile_lock (jionu, "you", EYE_FILE_LOCK_TYPE.EYE_FILE_LOCK_WRITE); if (st == EYE_FILE_LOCK_STATUS.EYE_FILE_LOCK_OK) System.out.println ("FAILED: LockFile() read lock - you"); else System.out.println ("PASSED: LockFile() read lock"); st = eyeinterface.ionu_eyefile_lock (jionu, "me", EYE_FILE_LOCK_TYPE.EYE_FILE_LOCK_CLEAR); if (st != EYE_FILE_LOCK_STATUS.EYE_FILE_LOCK_OK) System.out.println ("FAILED: LockFile() clear lock - me"); else System.out.println ("PASSED: LockFile() clear lock"); st = eyeinterface.ionu_eyefile_lock (jionu, "you", EYE_FILE_LOCK_TYPE.EYE_FILE_LOCK_WRITE); if (st != EYE_FILE_LOCK_STATUS.EYE_FILE_LOCK_OK) System.out.println ("FAILED: LockFile() write lock - you"); /* // Create with file isValid = eyeinterface.ionu_eyefile_create_with_file (jionu, TGIkey.cast(), testfile, "test/plain", URN, PERMS); meta = eyeinterface.ionu_eyefile_get_meta_data (jionu); // JSONObject json; // try { // json = new JSONObject (meta); // } // catch (JSONException e) { // System.err.println (e); // } System.out.println (meta); meta = eyeinterface.ionu_eyefile_get_perms (jionu); System.out.println (meta); long fsize = eyeinterface.ionu_eyefile_get_file_size (jionu, TGIkey.cast(), testfile); meta = eyeinterface.ionu_eyefile_get_filenames (jionu); System.out.println (meta + " " + fsize); meta = eyeinterface.ionu_eyefile_get_file_objects (jionu); System.out.println (meta); // Extract with bad TGI key, compare results to validate isValid = eyeinterface.ionu_eyefile_extract_file (jionu, badkey.cast(), testfile); if (isValid == false) { // Validation not performed, success indicates file was extracted System.out.println ("FAILED: Bad TGI test"); } String hexDigest = ""; try { hexDigest = digest.digest (file); } catch (IOException e) { System.err.println (e); } if (hexDigest.equals (goodDigest)) { System.out.println ("FAILED: Bad TGI test"); } else { System.out.println ("PASSED: Bad TGI test"); } // Extract with good TGI key, compare results to validate isValid = eyeinterface.ionu_eyefile_extract_file (jionu, TGIkey.cast(), testfile); if (isValid == false) { System.out.println ("FAILED: Good TGI test"); } try { hexDigest = digest.digest (file); } catch (IOException e) { System.err.println (e); } if (hexDigest.equals (goodDigest)) { System.out.println ("PASSED: Good TGI test"); } else { System.out.println ("FAILED: Good TGI test <" + hexDigest + "> <" + goodDigest + ">"); } // Add some attachments isValid = eyeinterface.ionu_eyefile_add_file (jionu, TGIkey.cast(), attachfile, "application/vnd.ms-word"); isValid = eyeinterface.ionu_eyefile_add_thumbnail (jionu, TGIkey.cast(), thumbfile, "image/png"); isValid = eyeinterface.ionu_eyefile_add_message (jionu, TGIkey.cast(), "Word", "see attachment", 14); meta = eyeinterface.ionu_eyefile_get_meta_data (jionu); System.out.println (meta); msg = eyeinterface.ionu_eyefile_get_message (jionu, TGIkey.cast(), "Word"); if (msg.equals ("see attachment")) { System.out.println ("PASSED: Message test"); } else { System.out.println ("FAILED: Message test"); } isValid =eyeinterface.ionu_eyefile_get_content_and_write_to_file (jionu, TGIkey.cast(), "Word", "test/word"); */ eyeinterface.ionu_eyering_create ("test/jtest.iks", "KeyRIng", "Local key ring", goodkey.cast()); eyeinterface.ionu_eyering_add_rsakey ("test/jtest.iks", "Sample", "do not duplicate", "0123456789abcdef", goodkey.cast()); //eyeinterface.ionu_eyering_add_tgikey ("test/jtest.iks", "b84ed891655a", "Cached TGI key", TGIkey.cast(), goodkey.cast()); eyeinterface.ionu_eyering_add_rsakey ("test/jtest.iks", "private", "Alan's private key", PEM, goodkey.cast()); eyeinterface.ionu_eyering_add_strkey ("test/jtest.iks", "perms", "Just JSON", PERMS, goodkey.cast()); eyeinterface.ionu_eyering_gen_rsa ("test/jtest.iks", "RSA", "RSA pair", goodkey.cast()); eyeinterface.ionu_eyering_get_key ("test/jtest.iks", "private", testkey.cast(), goodkey.cast()); String key = ByteArrToString(testkey); if (key.equals (PEM)) { System.out.println ("PASSED: PEM test"); } else { System.out.println ("FAILED: PEM test <" + key + "><" + PEM + ">"); } eyeinterface.ionu_eyering_get_key ("test/jtest.iks", "perms", testkey.cast(), goodkey.cast()); key = ByteArrToString(testkey); if (key.equals (PERMS)) { System.out.println ("PASSED: JSON test"); } else { System.out.println ("FAILED: JSON test" + key); } String strkey = eyeinterface.ionu_eyering_get_strkey ("test/jtest.iks", "Sample", goodkey.cast()); if (strkey.equals ("0123456789abcdef")) { System.out.println ("PASSED: string key"); } else { System.out.println ("FAILED: string key" + strkey); } strkey = eyeinterface.ionu_eyering_get_strkey ("test/jtest.iks", "RSA", goodkey.cast()); System.out.println (strkey); // TEB 7/5/2013 // blows up eyeinterface.ionu_eyering_remove_key("test/jtest.iks", "private", goodkey.cast()); eyeinterface.ionu_eyering_get_key ("test/jtest.iks", "perms", testkey.cast(), goodkey.cast()); key = ByteArrToString(testkey); if (key.equals (PERMS)) System.out.println ("PASSED: remove JSON test"); else { System.out.println ("FAILED: remove JSON test" + key); } /* isValid = eyeinterface.ionu_eyefile_shred (jionu); if (isValid) { System.out.println ("PASSED: Shred"); } else { System.out.println ("FAILED: Shred"); } */ isValid = eyeinterface.ionu_derive_key ("clearPassword", testkey.cast()); if (isValid) { System.out.println("PASSED: Derive"); } else { System.out.println("FAILED: Derive"); } eyeinterface.ionu_eyering_gen_rsa("test/jtest.iks", "private", "RSA", goodkey.cast()); String publicKey; publicKey = eyeinterface.ionu_eyering_get_pubkey("test/jtest.iks", "private", goodkey.cast()); String privateKey; privateKey = eyeinterface.ionu_eyering_get_strkey("test/jtest.iks", "private", goodkey.cast()); System.out.println (publicKey); // Can't use this interface //String privKey = new String("private"); //String pubKey = new String("public"); //isValid = eyeinterface.ionu_eyering_gen_rsa_pair(privKey, pubKey); //if (isValid && !privKey.equals("private")) { // System.out.println("PASSED: gen_rsa_pair: " + privKey); // } else { // System.out.println("FAILED: gen_rsa_pair"); //} double strength; strength = eyeinterface.ionu_password_strength ("Hi"); System.out.println ("Hi " + strength); strength = eyeinterface.ionu_password_strength ("ijfijfijf"); System.out.println ("ijfijfijf " + strength); strength = eyeinterface.ionu_password_strength ("H3k2*l$qZ0a<7"); System.out.println ("H3k2*l$qZ0a<7 " + strength); /* long num = eyeinterface.ionu_eyefile_list_directory_length ("test", "*.ionu"); String[] list = eyeinterface.ionu_eyefile_list_directory_sorted ("test", 0, num/2, "*.ionu", true); for (int i = 0; i < num/2; ++i) { System.out.println (list[i]); } */ String dirname = "test"; String dirglob = "*.ionu"; eyeinterface.ionu_eyedb_put ("dbfile_java.db", TGIkey.cast(), "collection", "key", "value"); String dbval = eyeinterface.ionu_eyedb_get ("dbfile_java.db", TGIkey.cast(), "collection", "key"); if (dbval.equals ("value")) System.out.println ("ionu_eyedb_get (collection:key) success"); eyeinterface.ionu_eyedb_remove ("dbfile_java.db", TGIkey.cast(), "collection", "key"); dbval = eyeinterface.ionu_eyedb_get ("dbfile_java.db", TGIkey.cast(), "collection", "key"); if (dbval == null) System.out.println ("ionu_eyedb_remove (collection:key) success"); Keyring ring = new Keyring ("test", "ring"); ring.GenerateECKey("me", "mine"); ring.GenerateECKey("peer", "theirs"); Key me = ring.GetKey ("me"); Key peer = ring.GetKey ("peer"); long secret_len = 0; //String secret = me.GenerateECDHSecret (peer, secret_len); //System.out.println (secret); String slow = eyeinterface.ionu_slow_hash ("madman12", null); System.out.println (slow); slow = eyeinterface.ionu_slow_hash ("madman12", slow); System.out.println (slow); slow = eyeinterface.ionu_slow_hash ("madman12", "6EVdXfSkSX+I15ZXGCRRH4TnpBnt17ivih5Nd7DxkPQ="); System.out.println (slow); slow = eyeinterface.ionu_slow_hash ("madman12", "5EVdXfSkSX+I15ZXGCRRH4TnpBnt17ivih5Nd7DxkPQ="); if (slow == null) System.out.println ("Invalid password hash passed"); byte[] md = new byte[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; String hello = "Hello"; /*ByteArr mdb = BytesToByteArr (hello.getBytes()); slow = eyeinterface.ionu_digest_msg ("md5", mdb.cast(), 5); System.out.println (slow); slow = eyeinterface.ionu_digest_msg ("sha1", mdb.cast(), 5); System.out.println (slow); slow = eyeinterface.ionu_digest_msg ("sha256", mdb.cast(), 5); System.out.println (slow);*/ //slow = eyeinterface.ionu_digest_file ("sha256", testfile); //System.out.println (slow); EyeWrapper eye = new EyeWrapper(); slow = eye.md5 (hello); System.out.println (slow); slow = eye.sha1 (hello); System.out.println (slow); byte[] enc = eye.asymmetricEncryptBuf (publicKey, md); byte[] dec = eye.asymmetricDecryptBuf (privateKey, enc); if (Arrays.equals (md, dec)) System.out.println ("Public/Private passed"); else { System.out.println ("bytes " + enc.length + " dec " + dec.length); } enc = eye.asymmetricSignBuf (privateKey, md); dec = eye.asymmetricVerifyBuf (publicKey, enc); if (Arrays.equals (md, dec)) System.out.println ("Sign/Verify passed"); else { System.out.println ("bytes " + enc.length + " dec " + dec.length); } String phrase = "Hello Cloud Guard!"; enc = eye.symmetricEncryptBuf (phrase, md); dec = eye.symmetricDecryptBuf (phrase, enc); if (Arrays.equals (md, dec)) System.out.println ("Symmetric passed"); } }