Sleds/libeye/java/com/sequencelogic/TestEye.java

547 lines
32 KiB
Java
Raw Normal View History

2025-03-13 21:28:38 +00:00
// 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\":\"/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCABgAGADASIAAhEBAxEB/8QAGwAAAwEBAQEBAAAAAAAAAAAABgcIBQQJAgP/xAA7EAABAwIEAggDBgQHAAAAAAABAgMEBREABhIhBzETFCJBUWFxgQiRoRUjMkKxwSRScoIWMzRikqLR/8QAGgEAAwEBAQEAAAAAAAAAAAAAAwQFAgEGAP/EACgRAAICAgIBAgUFAAAAAAAAAAECABEDIQQSQRMxBTJhcfAiI1HB0f/aAAwDAQACEQMRAD8AnaLUWJVilQx3T2wYgV5YAssSXFOpBUeeGJJRqp1/LEV0CZKlxW747g65U0xmVAHAlVKot9wgG+NGqEjWAfHA2s3cN8UEQDcnZHJ1PxeWVG5xlz6m1T0FwoKyPDYD1OOyqyersJS1p6V1WhOo2A8SfTGFVYLU9xIDxahMJ1OvEbqtzV6nkB54ODUAVucic9yy5oYhJWB62xs0/NrEtsl4NIcBt0fSWJ899sCL066FR2o62IpNktoNlKt3qPfhkU7g3W65lFmVT8rluqyChxlvrCSXWDftaSrUlewPKxB23x2wJ90JE+I09iXs2SFDcoVsRjsjvOMrCkHlgSjRK9SJyqZU2lMuxlAONyGih5jzsbEpPLv87YKISxI0qQoEHY28cdYavxPgaNRn5RfclRx0hvgjMYeGMLJLGhgXGC4tDE19MZRQ2sSOV1WfT64aBGqm+2FTlpdpCcNVhWqnH+nAuTrKIXjbwwCqye2sW78DrjBuVYJ6oi7yx54Hqu4IVPkywN2m1KA8wMPodSe43A+oOtVauMUxlVwwohyx79tv2+eOmW/GdmGGixQzcqAPfbb/ANxz0iC9S4j1dnJIUoKQ013qNhc+pJOMvLceTNnOOLJBddCFK7gSbn6XwwNKPrAlbb7Rm8IeDr+f6s03cNMocSXHAm5AubAeZIV/x8xi38pcEsv0mn9FEjBb6EgrkOHWvWOSrnvvgd+H/hg7l3J8JxZZZkVAdakLcNi1qFkggc7JA7xuThjz3puSqklhqSKrT5P+Y9HID7JuLKLe4Wjf8tlDwOJ+Zi7Hr7SzxsYxoOw2ZOnxPcKXKhQzmulkfaFCu+SRu41cBxJPeLEn2xLeXZyW8wuQ7kMye2gK
// 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<len; i++){
// bytes[i] = (byte) ba.getitem(i);
//}
return bytes;
}*/
/*public static ByteArr BytesToByteArr (byte[] bytes)
{
ByteArr ba = new ByteArr(bytes.length);
ba.setbytes (bytes);
//for (int i=0; i<bytes.length; i++){
// ba.setitem (i, bytes[i]);
//}
return ba;
}*/
public static String ByteToHex(byte b) {
// Returns hex String representation of byte b
char hexDigit[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};
char[] array = { hexDigit[(b >> 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");
}
}