Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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));
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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;
    }
Exemplo n.º 5
0
    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;
    }