UserDataTest loadedData = null; // stores the user data, this is just an example // Use this for initialization void Start() { // Set the file location to the Application.persistentDataPath, so we should write here: fileToEncrypt = Application.persistentDataPath + fileToEncrypt; encryptedFile = Application.persistentDataPath + encryptedFile; decryptedFile = Application.persistentDataPath + decryptedFile; //Create the secure store object: // dont forget the set the password insede the SecureStore.cs SecureStore store = new SecureStore(); //or alternativly use the other constructor //SecureStore store = new SecureStore( "YourSecretPassword" ); // Testing the string encrypter: Debug.Log("plainText string: " + plainTextString); encryptedTextString = store.encryptString(plainTextString); Debug.Log("encrypted string: " + encryptedTextString); decryptedTextString = store.decryptString(encryptedTextString); Debug.Log("decrypted string: " + decryptedTextString); // Testing the file encrypter: // Create a file to write to. using (StreamWriter sw = File.CreateText(fileToEncrypt)) { sw.WriteLine("Hello!"); sw.WriteLine("This is a plain text file."); sw.WriteLine("Encrypt me!"); } Debug.Log("Text file can be found here: " + fileToEncrypt); // Now encrypt it: store.encryptFile(fileToEncrypt, encryptedFile); Debug.Log("Encryped file can be found here: " + encryptedFile); // And also decrypt it: store.decryptFile(encryptedFile, decryptedFile); Debug.Log("Decryped file can be found here: " + decryptedFile); // Testing the stream encrypter by serializing an Object: UserDataTest data = new UserDataTest("test-user-7854", "this is test user", 100); // Test the saving: saveUserData(store, data); // Test the loading: loadedData = loadUserData(store); Debug.Log("Userdata.userGuid: " + loadedData.userGuid); Debug.Log("Userdata.userDescription: " + loadedData.userDescription); Debug.Log("Userdata.userPoints: " + loadedData.userPoints); }
// This method is for testing the encrypted serialization: public void saveUserData(SecureStore store, UserDataTest data) { string filename = Application.persistentDataPath + userDataFile; Debug.Log("Saving user data to: " + filename); BinaryFormatter bformatter = new BinaryFormatter(); bformatter.Binder = new VersionDeserializationBinder(); FileStream fsCrypt = new FileStream(filename, FileMode.Create); // Creating crypto stream via the store: CryptoStream cs = store.encryptStream(fsCrypt); bformatter.Serialize(cs, data); cs.Close(); fsCrypt.Close(); }
// This method is for testing the decrypted deserialization: public UserDataTest loadUserData(SecureStore store) { string filename = Application.persistentDataPath + userDataFile; Debug.Log("Loading user data from: " + filename); BinaryFormatter bformatter = new BinaryFormatter(); bformatter.Binder = new VersionDeserializationBinder(); FileStream fsCrypt = new FileStream(filename, FileMode.Open); // Creating crypto stream via the store: CryptoStream cs = store.decryptStream(fsCrypt); UserDataTest data = (UserDataTest)bformatter.Deserialize(cs); cs.Close(); fsCrypt.Close(); return(data); }
public void userdata() { var L = Melua.luaL_newstate(); Melua.melua_opensafelibs(L); var n1 = 0; // Ctor Melua.luaL_register(L, "Test", new[] { new MeluaLib.Melua.LuaLib("new", NL => { var test = new UserDataTest() { N1 = 1234 }; var size = Marshal.SizeOf(test); var ptr = Melua.lua_newuserdata(L, size); Melua.luaL_getmetatable(L, "Melua.Test"); Melua.lua_setmetatable(L, -2); Marshal.StructureToPtr(test, ptr, true); return(1); }) }); // Meta table for test userdata type Melua.luaL_newmetatable(L, "Melua.Test"); Melua.lua_pushstring(L, "__index"); Melua.lua_pushvalue(L, -2); Melua.lua_settable(L, -3); Melua.luaL_register(L, null, new[] { new MeluaLib.Melua.LuaLib("setN1", _ => { var ptr = Melua.luaL_checkudata(L, 1, "Melua.Test"); var val = Melua.luaL_checkinteger(L, 2); // Either marshal back and forth or use unsafe var test = (UserDataTest)Marshal.PtrToStructure(ptr, typeof(UserDataTest)); test.N1 = val; Marshal.StructureToPtr(test, ptr, true); //unsafe //{ // var test = (UserDataTest*)ptr; // test->N1 = val; //} return(0); }), new MeluaLib.Melua.LuaLib("getN1", _ => { var ptr = Melua.luaL_checkudata(L, 1, "Melua.Test"); var test = (UserDataTest)Marshal.PtrToStructure(ptr, typeof(UserDataTest)); Melua.lua_pushinteger(L, test.N1); return(1); }) }); // Test method Melua.melua_register(L, "testgetn1", _ => { n1 = Melua.lua_tointeger(L, -1); return(0); }); var result = Melua.luaL_dostring(L, @" local t = Test.new() t:setN1(5678) testgetn1(t:getN1()) "); if (result != 0) { throw new Exception(Melua.lua_tostring(L, -1)); } Assert.Equal(n1, 5678); }