/**************************************************************/ /* DEMO.JAVA */ /* Matrix example application for JAVA */ /* */ /* Author: vfr */ /* */ /* Copyright (C) TDi GmbH */ /**************************************************************/ import java.io.IOException; public class Demo { private int[] DataIn = new int[256]; /* Buffer to read the Dongle data */ private int[] DataOut = new int[256]; /* Buffer for data to be stored in Dongle*/ private int[] DataBlock = new int[2]; /* Buffer for Encrypt/Decrypt */ private int[] KeyData = new int[4]; /* Buffer for KeyData */ private short[][] DNG_Info = new short[3][3]; private short RetCode; /* Return value */ private int API_Version; /* Version number of the Matrix-API */ private int DNG_Version; /* Dongle version number */ private int DNG_Serial; /* Dongle serial nummer */ private short DNG_LPTADR; /* Adress of LPT-Port */ private short DNG_Count; /* Number of connected Dongles */ private short DNG_Mem; /* Memory size of Dongle */ private short DNG_MaxVar; /* Maximum number of data fields */ private short AppSlot; /* Application-Slot for Network access */ private short DNG_Port; private int UserCode; private short i; public Demo() { Matrix_Test(); System.out.println("\nPressto continue"); getchar(); Matrix_NET_Test(); } public static void main(String args[]) { new Demo(); } /***************************************************************/ /* Demo for the Matrix-API functions */ /***************************************************************/ public void Matrix_Test() { /*=====================================================*/ /* In this example we use the demo UserCode 1234. */ /* Enter here your personal UserCode. */ /*=====================================================*/ UserCode = 1234; /*=====================================================*/ /* For USB-Dongles, set DNG_Port = 'U' */ /* For LPT-Dongles, set DNG_Port = 1, 2 oder 3 */ /*=====================================================*/ // DNG_Port = 1; // 1-3 = LPT1-LPT3 DNG_Port = 'U'; // 'U' (ASCII 85) = USB System.out.print("\n\n"); /*----------------------------------------------------*/ /* Init Matrix-API */ /*----------------------------------------------------*/ RetCode = Matrix.Init_MatrixAPI(); if(RetCode < 0) { System.out.println("Init_MatrixAPI RetCode: " + RetCode + " \n"); } /*----------------------------------------------------*/ /* Read the version of the Matrix-API */ /*----------------------------------------------------*/ API_Version = Matrix.GetVersionAPI(); if(API_Version == 0) { System.out.println("Error while reading API version!"); } else { System.out.println("Matrix-API Version: " + HIWORD(API_Version) + "." + LOWORD(API_Version)); } /*----------------------------------------------------*/ /* Dongle_FindEx - only LPT support */ /*----------------------------------------------------*/ if(DNG_Port >= 1 && DNG_Port <= 3) /* only for LPT */ { System.out.println("\nDongle_FindEx:"); RetCode = Matrix.Dongle_FindEx(DNG_Info[0]); for(i=0; i 0) { System.out.println("Found: "+ DNG_Count + " Dongles at Port " + DNG_Port); System.out.println("--------------------------------------------------"); } else { System.out.println("There is no Dongle present at Port " + DNG_Port + " !"); Matrix.Release_MatrixAPI(); return; } /*----------------------------------------------------*/ /* Read memory size of last Dongle at DNG_Port and */ /* calculate the maximum number of data fields */ /*----------------------------------------------------*/ DNG_Mem = Matrix.Dongle_MemSize(DNG_Count, DNG_Port); if(DNG_Mem > 0) { DNG_MaxVar = (short)(DNG_Mem / 4); /* Anzahl der Datenfelder */ System.out.println(" Memory size: " + DNG_Mem + " Bytes" + " (" + DNG_MaxVar + " Data fields)"); } else { System.out.println(" Error while determining Dongle memory! Error-Code: " + DNG_Mem); Matrix.Release_MatrixAPI(); return; } /*----------------------------------------------------*/ /* Read Dongle version from last Dongle at 'DNG_Port' */ /*----------------------------------------------------*/ DNG_Version = Matrix.Dongle_Version(DNG_Count, DNG_Port); if(DNG_Version > 0) { System.out.println(" VersionNo. : " + HIWORD(DNG_Version) + "." + LOWORD(DNG_Version)); } else { System.out.println(" Error while reading Dongle version! Error-Code: " + DNG_Version); Matrix.Release_MatrixAPI(); return; } /*----------------------------------------------------*/ /* Read the SerialNo. of last Dongle at 'DNG_Port' */ /*----------------------------------------------------*/ DNG_Serial = Matrix.Dongle_ReadSerNr(UserCode, DNG_Count, DNG_Port); if(DNG_Serial > 0) { System.out.println(" SerialNo. : " + DNG_Serial); } else { System.out.println(" Error while reading Dongle SerialNo.! Error-Code: " + DNG_Serial); Matrix.Release_MatrixAPI(); return; } /*----------------------------------------------------*/ /* Read 3 data fields from last Dongle at 'DNG_Port' */ /* via UserCode and display. */ /*----------------------------------------------------*/ System.out.println("\nRead / Write of Dongle-Data "); System.out.println("--------------------------------------------------"); System.out.print("\n Dongle_ReadData ->"); RetCode = 0; try { RetCode = Matrix.Dongle_ReadData(UserCode, DataIn, (short)3, DNG_Count, DNG_Port); } catch(Throwable e) { e.printStackTrace(); } if(RetCode < 0) { System.out.println(" Error while reading Dongle data! Error-Code: " + RetCode); Matrix.Release_MatrixAPI(); return; } System.out.println(" Var1 = " + DataIn[0] + ", Var2 = " + DataIn[1] + ", Var3 = " + DataIn[2]); /*----------------------------------------------------*/ /* Save 3 data fields in last Dongle at 'DNG_Port' */ /* via UserCode. */ /* The values 101,102,103 are saved as example. */ /*----------------------------------------------------*/ System.out.print("\n Dongle_WriteData ->"); for(i = 0; i < 3; i++) { DataOut[i] = 101 + i; } RetCode = 0; try { RetCode = Matrix.Dongle_WriteDataEx(UserCode, DataOut, (short)1, (short) 3, DNG_Count, DNG_Port); } catch(Throwable e) { e.printStackTrace(); } if(RetCode < 0) { System.out.println(" Error while writing Dongle data! Error-Code: " + RetCode); Matrix.Release_MatrixAPI(); return; } System.out.println(" Dongle data " + DataOut[0] + ", " + DataOut[1] + ", " + DataOut[2] + " written successfully"); System.out.println("\n\nPress to continue: "); getchar(); /*----------------------------------------------------*/ /* Encrypt/Decrypt a DataBlock over the Dongle */ /*----------------------------------------------------*/ System.out.println("\nEncrypt/decrypt of Data over the Dongle"); System.out.println("--------------------------------------------------"); DataBlock[0] = 1234567890; /* Clear Data */ DataBlock[1] = 1234567890; /* Clear Data */ System.out.println(" Clear Data: (dec) " + DataBlock[0] + "\t" + DataBlock[1]); System.out.println(" (hex) " + Integer.toHexString(DataBlock[0]) + "\t" + Integer.toHexString(DataBlock[1]) + "\n"); /*--- Encrypt ---*/ RetCode = 0; try { RetCode = Matrix.Dongle_EncryptData(UserCode, DataBlock, DNG_Count, DNG_Port); } catch(Throwable excEncrypt) { excEncrypt.printStackTrace(); } if(RetCode < 0) { System.out.println(" Data Encryption-Error! " + RetCode); Matrix.Release_MatrixAPI(); return; } System.out.println(" Encrypted Data: (dec) " + DataBlock[0] + "\t" + DataBlock[1]); System.out.println(" (hex) " + Integer.toHexString(DataBlock[0]) + "\t" + Integer.toHexString(DataBlock[1]) + "\n"); /*--- Decrypt ---*/ RetCode = 0; try { RetCode = Matrix.Dongle_DecryptData(UserCode, DataBlock, DNG_Count, DNG_Port); } catch(Throwable excDecrypt) { excDecrypt.printStackTrace(); } if(RetCode < 0) { System.out.println(" Data Decryption-Error! " + RetCode); Matrix.Release_MatrixAPI(); return; } System.out.println(" Decrypted Data: (dec) " + DataBlock[0] + "\t" + DataBlock[1]); System.out.println(" (hex) " + Integer.toHexString(DataBlock[0]) + "\t" + Integer.toHexString(DataBlock[1])); /*----------------------------------------------------*/ /* Close Matrix-API */ /*----------------------------------------------------*/ Matrix.Release_MatrixAPI(); /*----------------------------------------------------*/ /* Encrypt/Decrypt a DataBlock in the Application */ /*----------------------------------------------------*/ System.out.println("\nEncrypt/decrypt of Data in the Application"); System.out.println("--------------------------------------------------"); KeyData[0] = 0x423A612E; //1111122222; /* Key Data */ KeyData[1] = 0x423A8C95; //1111133333; /* Key Data */ KeyData[2] = 0x8474C25C; //2222244444; /* Key Data */ KeyData[3] = 0x8474EDC3; //2222255555; /* Key Data */ DataBlock[0] = 1234567890; /* Clear Data */ DataBlock[1] = 1234567890; /* Clear Data */ System.out.println(" Key: (dec) " + KeyData[0] + "\t " + KeyData[1] + "\t" + KeyData[2] + "\t" + KeyData[3]); System.out.println(" (hex) " + Integer.toHexString(KeyData[0]) + "\t " + Integer.toHexString(KeyData[1]) + "\t" + Integer.toHexString(KeyData[2]) + "\t" + Integer.toHexString(KeyData[3]) + "\n"); System.out.println(" Clear Data: (dec) " + DataBlock[0] + "\t" + DataBlock[1]); System.out.println(" (hex) " + Integer.toHexString(DataBlock[0]) + "\t" + Integer.toHexString(DataBlock[1])); /*--- Encrypt ---*/ MxTea.MxApp_Encrypt(DataBlock, KeyData); System.out.println(" Encrypted Data: (dec) " + DataBlock[0] + "\t" + DataBlock[1]); System.out.println(" (hex) " + Integer.toHexString(DataBlock[0]) + "\t" + Integer.toHexString(DataBlock[1])); /*--- Decrypt ---*/ MxTea.MxApp_Decrypt(DataBlock, KeyData); System.out.println(" Decrypted Data: (dec) " + DataBlock[0] + "\t" + DataBlock[1]); System.out.println(" (hex) " + Integer.toHexString(DataBlock[0]) + "\t" + Integer.toHexString(DataBlock[1])); } /***************************************************************/ /* Demo for the Matrix Network functions */ /***************************************************************/ void Matrix_NET_Test() { System.out.println("\nNetwork functions "); System.out.println("--------------------------------------------------"); /*====================================================*/ /* Network */ /* Example: the dongle is prepared with the value 7 */ /* in Var0002, meaning AppSlot=2 and */ /* max. Users = 7 */ /*====================================================*/ /*----------------------------------------------------*/ /* Init Matrix-API */ /*----------------------------------------------------*/ RetCode = Matrix.Init_MatrixAPI(); if(RetCode < 0) { System.out.println("Init_MatrixAPI RetCode: " + RetCode + "\n"); } /*----------------------------------------------------*/ /* Max. Users stored in AppSlot 2 (Var0002 of the */ /* dongle) */ /*----------------------------------------------------*/ AppSlot = 2; /*----------------------------------------------------*/ /* Activate Network access into the Matrix-API */ /*----------------------------------------------------*/ RetCode = Matrix.SetConfig_MatrixNet((short) 1, "D:\\TEMP\\MXNET2.DAT"); if(RetCode == 1) { System.out.println("\nNetwork-Test activated\n"); } else { System.out.println("\nNetwork-Test cannot be activated!\n"); } /*----------------------------------------------------*/ /* Read the Dongle count from MxNetFile */ /* !! 'DNG_Port' is ignored in the Network mode !! */ /*----------------------------------------------------*/ DNG_Count = Matrix.Dongle_Count(DNG_Port); /*----------------------------------------------------*/ /* 'LogIn' will lock one User-Slot and the returned */ /* value is the remaining free User-Slots (for our */ /* Example RetCode=6) */ /*----------------------------------------------------*/ RetCode = Matrix.LogIn_MatrixNet(UserCode, AppSlot, DNG_Count); if(RetCode < 0) { if(RetCode == -31) { System.out.println(" All Users are active!"); System.out.println(" No more User-Slots free\n"); } else { System.out.println("LogIn failed " + RetCode); } } else { System.out.println("LogIn successfull ! Free User-Slots: " + RetCode + " \n"); System.out.println(" Now you can check the Active Users List in MxNet-Server."); System.out.println(" After pressing , the User will be Logged Out and"); System.out.println(" removed from the Active Users List in MxNet-Server."); System.out.print("\n Press to continue: "); getchar(); } /*----------------------------------------------------*/ /* 'LogOut' will free the User-Slot and the returned */ /* value is the remaining free User-Slots (for our */ /* Example RetCode=7) */ /*----------------------------------------------------*/ RetCode = Matrix.LogOut_MatrixNet(UserCode, AppSlot, DNG_Count); if(RetCode < 0) { System.out.println("\nLogOut failed " + RetCode); } else { System.out.println("\nLogOut successfull! Free User-Slots: " + RetCode); } /*----------------------------------------------------*/ /* Deactivate Network access into the Matrix-API */ /*----------------------------------------------------*/ RetCode = Matrix.SetConfig_MatrixNet((short) 0, ""); if(RetCode == 0) { System.out.println("\nNetwork-Test deactivated\n"); } else { System.out.println("\nNetwork-Test cannot be deactivated!\n"); } /*----------------------------------------------------*/ /* Close Matrix-API */ /*----------------------------------------------------*/ Matrix.Release_MatrixAPI(); } /** * Handling for Hi- / Lo-Word */ public short HIWORD(int var) { return (short)(var >>> 16); } public short LOWORD(int var) { return (short)(var & 0xffff); } /** * Stop the program until a key is pressed */ public static void getchar() { int myInt = 1; try { myInt = System.in.read(); Thread.sleep(200); while(System.in.available() > 0) { myInt = System.in.read(); Thread.sleep(200); } } catch(InterruptedException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } } /**************************************************************/ /* MATRIX.JAVA */ /* Matrix Class Implementation for Java */ /* */ /* Copyright (C) TDi GmbH */ /**************************************************************/ //------------------------------------------------------------- // If you need to use class packaging, uncomment the following // line, but do not change the package name. // Using class packaging, the Matrix.class have to be placed // in: CLASSPATH/de/matrixlock //------------------------------------------------------------- //package de.matrixlock; import java.io.IOException; public class Matrix // Do not change this Class name { private static String libName; static { libName = System.mapLibraryName("Matrix32"); try { System.loadLibrary("Matrix32"); } catch(UnsatisfiedLinkError e) { System.err.println("Unable to load library [" + libName + "]"); throw e; } } public static native short Init_MatrixAPI(); public static native short Release_MatrixAPI(); public static native int GetVersionAPI(); public static native int GetVersionDRV(); public static native int GetVersionDRV_USB(); public static native void SetW95Access(short modus); public static native short GetPortAdr(short p); public static native short PausePrinterActivity(); public static native short ResumePrinterActivity(); public static native short Dongle_Find(); public static native short Dongle_FindEx(short[] DNG_Info); public static native short Dongle_Count(short PortNr); public static native int Dongle_Version(short DongleNr, short PortNr); public static native int Dongle_Model(short DongleNr, short PortNr); public static native short Dongle_MemSize(short DongleNr, short PortNr); public static native short Dongle_ReadData(int UserCode, int[] pDataIn, short Count, short DongleNr, short PortNr); public static native short Dongle_ReadDataEx(int UserCode, int[] pDataIn, short Fpos, short Count, short DongleNr, short PortNr); public static native int Dongle_ReadSerNr(int UserCode, short DongleNr, short PortNr); public static native short Dongle_WriteData(int UserCode, int[] pDataOut, short Count, short DongleNr, short PortNr); public static native short Dongle_WriteDataEx(int UserCode, int[] DataOut, short Fpos, short Count, short DongleNr, short PortNr); public static native short Dongle_WriteKey(int UserCode, int[] pKeyData, short DongleNr, short PortNr); public static native short Dongle_GetKeyFlag(int UserCode, short DongleNr, short PortNr); public static native short Dongle_EncryptData(int UserCode, int[] pDataBlock, short DongleNr, short PortNr); public static native short Dongle_DecryptData(int UserCode, int[] pDataBlock, short DongleNr, short PortNr); public static native short SetConfig_MatrixNet(short nAccess, String nFile); public static native int GetConfig_MatrixNet(short Category); public static native short LogIn_MatrixNet(int UserCode, short AppSlot, short DongleNr); public static native short LogOut_MatrixNet(int UserCode, short AppSlot, short DongleNr); }