private void ProcessChangeCipherSpecRecord(Record record, AsyncHandshakeResult asyncHandshakeResult)
{
if (record.Fragment.Length != 1 || record.Fragment[0] != 0x01) {
throw new AlertException(AlertDescription.IllegalParameter,
"Received an invalid ChangeCipherSpec record");
}
// NOTE: keep this before recordHandler.ChangeLocalState since it may generate masterSecret
_handshakeSession.RemoteChangeCipherSpec();
// Change cipher suite in record handler and handle it in handshake session
_recordHandler.SetCipherSuite(_handshakeSession.CipherSuite, _handshakeSession.ConnectionState);
_recordHandler.ChangeRemoteState();
// Read the finished message after changing cipher spec
_recordStream.BeginReceive(new AsyncCallback(ReceiveHandshakeCallback), asyncHandshakeResult);
}