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 }); } }
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 }); } }
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"); }
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() }); } }
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() }); } }