Beispiel #1
0
 internal void ProcessCryptState(CryptSetup cryptSetup)
 {
     if (cryptSetup.ShouldSerializeKey() && cryptSetup.ShouldSerializeClientNonce() && cryptSetup.ShouldSerializeServerNonce()) // Full key setup
     {
         _cryptState.SetKeys(cryptSetup.Key, cryptSetup.ClientNonce, cryptSetup.ServerNonce);
     }
     else if (cryptSetup.ServerNonce != null) // Server syncing its nonce to us.
     {
         _cryptState.ServerNonce = cryptSetup.ServerNonce;
     }
     else // Server wants our nonce.
     {
         SendControl <CryptSetup>(PacketType.CryptSetup, new CryptSetup {
             ClientNonce = _cryptState.ClientNonce
         });
     }
 }
Beispiel #2
0
 internal void ProcessCryptState(CryptSetup cryptSetup)
 {
     if (cryptSetup.keySpecified && cryptSetup.client_nonceSpecified && cryptSetup.client_nonceSpecified) // Full key setup
     {
         _cryptState.SetKeys(cryptSetup.key, cryptSetup.client_nonce, cryptSetup.server_nonce);
     }
     else if (cryptSetup.server_nonce != null) // Server syncing its nonce to us.
     {
         _cryptState.ServerNonce = cryptSetup.server_nonce;
     }
     else // Server wants our nonce.
     {
         SendControl <CryptSetup>(PacketType.CryptSetup, new CryptSetup {
             client_nonce = _cryptState.ClientNonce
         });
     }
 }
Beispiel #3
0
    public void TestCanEncryptAndDecrypt()
    {
        CryptState encoderState = new CryptState();
        CryptState decoderState = new CryptState();
        CryptSetup encoderSetup = new CryptSetup();
        CryptSetup decoderSetup = new CryptSetup();

        // Make the key and nonces random
        encoderSetup.Key         = GetRandomArray(16);
        encoderSetup.ClientNonce = GetRandomArray(16);
        encoderSetup.ServerNonce = GetRandomArray(16);

        // The decoder uses the same stuff, but with client/server nonce exchanged with one another
        decoderSetup.Key         = encoderSetup.Key;
        decoderSetup.ClientNonce = (byte[])encoderSetup.ServerNonce.Clone();
        decoderSetup.ServerNonce = (byte[])encoderSetup.ClientNonce.Clone();

        encoderState.CryptSetup = encoderSetup;
        decoderState.CryptSetup = decoderSetup;

        byte[] buffer = GetRandomArray(buffer_length);

        for (int trial = 0; trial < num_trials; trial++)
        {
            Randomize(buffer);
            byte[] encrypted = encoderState.Encrypt(buffer, buffer_length);
            byte[] decrypted = decoderState.Decrypt(encrypted, encrypted.Length);

            if (encrypted == null)
            {
                Debug.Log("Nothing decrypted?");
            }
            if (decrypted == null)
            {
                Debug.Log("Nothing decrypted?");
            }

            for (int i = 0; i < buffer_length; i++)
            {
                Assert.AreEqual(buffer[i], decrypted[i]);
            }
        }
        Debug.Log("Done");
    }
Beispiel #4
0
 private void ProcessCryptSetup(CryptSetup cryptSetup)
 {
     if (cryptSetup.Key != null && cryptSetup.ClientNonce != null && cryptSetup.ServerNonce != null)
     {
         // Apply the key and client/server nonce values provided
         _mumbleClient.CryptSetup = cryptSetup;
         _mumbleClient.ConnectUdp();
     }
     else if (cryptSetup.ServerNonce != null)
     {
         Debug.Log("Updating server nonce");
         _updateOcbServerNonce(cryptSetup.ServerNonce);
     }
     else
     {
         // This generally means that the server is requesting our nonce
         SendMessage(MessageType.CryptSetup, new CryptSetup {
             ClientNonce = _mumbleClient.GetLatestClientNonce()
         });
     }
 }
Beispiel #5
0
 private void ProcessCryptSetup(CryptSetup cryptSetup)
 {
     if (cryptSetup.key != null && cryptSetup.client_nonce != null && cryptSetup.server_nonce != null)
     {
         _mumbleClient.CryptSetup = cryptSetup;
         SendMessage(MessageType.CryptSetup, new CryptSetup {
             client_nonce = cryptSetup.client_nonce
         });
         _mumbleClient.ConnectUdp();
     }
     else if (cryptSetup.server_nonce != null)
     {
         _updateOcbServerNonce(cryptSetup.server_nonce);
     }
     else
     {
         SendMessage(MessageType.CryptSetup, new CryptSetup {
             client_nonce = _mumbleClient.GetLatestClientNonce()
         });
     }
 }