string Decrypt(ChunkedEncryptedData ciphertext) { string decrypted; switch (encryptionMethod) { case "RSA": return(RSADecrypt(ciphertext, clientRSA)); break; case "AES": decrypted = AESDecryptStringFromBytes(ciphertext.datas[0].data, incomingPrivateKeys.key, incomingPrivateKeys.iv); break; case "DES": decrypted = DESDecryptStringFromBytes(ciphertext.datas[0].data, incomingPrivateKeys.key, incomingPrivateKeys.iv); break; case "DES3": decrypted = DES3DecryptStringFromBytes(ciphertext.datas[0].data, incomingPrivateKeys.key, incomingPrivateKeys.iv); break; default: decrypted = Encoding.UTF8.GetString(ciphertext.datas[0].data); break; } //incomingPrivateKeys.iv = ciphertext.datas[0].data; return(decrypted); }
string RSADecrypt(ChunkedEncryptedData chunkedData, RSACryptoServiceProvider rsa) { string[] chunked = new string[chunkedData.datas.Count]; for (int i = 0; i < chunked.Length; i++) { chunked[i] = Encoding.UTF8.GetString(rsa.Decrypt(chunkedData.datas[i].data, true)); } return(UnChunk(chunked)); }
ChunkedEncryptedData RSAEncrypt(string plaintext, RSACryptoServiceProvider rsa) { string[] chunked = Chunk(plaintext, RSAChunkSize); ChunkedEncryptedData c = new ChunkedEncryptedData(); c.datas = new List <EncryptedData>(); for (int i = 0; i < chunked.Length; i++) { EncryptedData d = new EncryptedData(); d.data = rsa.Encrypt(Encoding.UTF8.GetBytes(chunked[i]), true); c.datas.Add(d); } return(c); }
IEnumerator Exchange() { float startTime = Time.time; ObjectInfoSet toSend = new ObjectInfoSet(); toSend.data = new List <ObjectInfo>(); for (int i = 0; i < parents.Length; i++) { toSend.data.Add(new ObjectInfo(parents[i])); } WWWForm form = new WWWForm(); form.AddField("data", JsonUtility.ToJson(Encrypt(JsonUtility.ToJson(toSend)))); using (UnityWebRequest webRequest = UnityWebRequest.Post(sendParentsURL, form)) { yield return(webRequest.SendWebRequest()); if (webRequest.isNetworkError) { Debug.Log("Connection failed"); } else { ChunkedEncryptedData d = JsonUtility.FromJson <ChunkedEncryptedData>(webRequest.downloadHandler.text); ObjectInfoSet received = JsonUtility.FromJson <ObjectInfoSet>(Decrypt(d)); foreach (ObjectInfo o in received.data) { foreach (GameObject g in children) { if (g.name == o.name) { Debug.Log("Set " + g.name); g.transform.position = o.position; g.transform.rotation = UnityEngine.Quaternion.Euler(o.rotation); } } } } } float timePassed = (Time.time - startTime); avgLatency = ((avgLatency * clicks) + timePassed) / (clicks + 1); clicks += 1; latency.text = "Avg. Latency: " + avgLatency; }
IEnumerator EstablishConnectionToHost() { opening = false; // Get the server public keys using (UnityWebRequest webRequest = UnityWebRequest.Get(getPublicKeyURL)) { yield return(webRequest.SendWebRequest()); if (webRequest.isNetworkError) { Debug.Log("Connection failed"); } else { serverRSA = ImportPublicKey(JsonUtility.FromJson <RSAKeySet>(webRequest.downloadHandler.text)); } } //Encrypt my public keys and send them to server WWWForm form1 = new WWWForm(); Handshake d = new Handshake(); d.n = clientPublicKeys.n; d.e = clientPublicKeys.e; d.playerNum = playerNum; d.method = encryptionMethod; string handshakeJson = JsonUtility.ToJson(d); ChunkedEncryptedData e = RSAEncrypt(handshakeJson, serverRSA); form1.AddField("data", JsonUtility.ToJson(e)); using (UnityWebRequest webRequest = UnityWebRequest.Post(getKeysURL, form1)) { yield return(webRequest.SendWebRequest()); if (webRequest.isNetworkError) { Debug.Log("Connection failed"); } else { string decryptedString = RSADecrypt(JsonUtility.FromJson <ChunkedEncryptedData>(webRequest.downloadHandler.text), clientRSA); incomingPrivateKeys = JsonUtility.FromJson <PrivateKey>(decryptedString); outgoingPrivateKeys = incomingPrivateKeys; } } //StartCoroutine(Exchange()); //Wait for all players to connect WWWForm form = new WWWForm(); form.AddField("PlayerID", playerNum); while (!started) { using (UnityWebRequest webRequest = UnityWebRequest.Post(establishConnectionURL, form)) { yield return(webRequest.SendWebRequest()); if (webRequest.isNetworkError) { Debug.Log("Connection failed"); } else { if (webRequest.downloadHandler.text == "go") { started = true; } } } } //started = false; }