Core.Protocols.Rtmp.OutboundRTMPProtocol.PerformHandshakeStage1 C# (CSharp) Метод

PerformHandshakeStage1() приватный Метод

private PerformHandshakeStage1 ( bool encrypted ) : bool
encrypted bool
Результат bool
        private bool PerformHandshakeStage1(bool encrypted)
        {
            OutputBuffer.WriteByte((byte)(encrypted ? 6 : 3));
            _pOutputBuffer=new byte[1536];
            var rand = new Random();
            for (var i = 0; i < 1536; i++)
            {
                _pOutputBuffer[i] = (byte) (rand.Next()%256);
            }
            _pOutputBuffer[0] = _pOutputBuffer[1] = _pOutputBuffer[2] = _pOutputBuffer[3] = 0;
            // 5. Put the flash version. We impersonate with 9.0.124.2
            _pOutputBuffer[4] = 9;
            _pOutputBuffer[5] = 0;
            _pOutputBuffer[6] = 124;
            _pOutputBuffer[7] = 2;
            var clientDHOffset = GetDHOffset(_pOutputBuffer, _usedScheme);
            _pDHWrapper = new DHWrapper(1024);
            _pClientPublicKey = _pDHWrapper.PublicKey;
            Buffer.BlockCopy(_pClientPublicKey, 0, _pOutputBuffer, (int)clientDHOffset, 128);
            var clientDigestOffset = GetDigestOffset(_pOutputBuffer, _usedScheme);
            var pTempBuffer = new byte[1536 - 32];
            Buffer.BlockCopy(_pOutputBuffer, 0, pTempBuffer, 0, (int)clientDigestOffset);
            Buffer.BlockCopy(_pOutputBuffer, (int) (clientDigestOffset + 32), pTempBuffer, (int)clientDigestOffset, (int) (1536 - clientDigestOffset - 32));
            //var pTempHash = new byte[512];

            var pTempHash = HMACsha256(pTempBuffer,1536-32,GenuineFpKey,30 ); // Hmacsha256.ComputeHash(pTempBuffer, 0,1536 - 32);
            Buffer.BlockCopy(pTempHash, 0, _pOutputBuffer, (int) clientDigestOffset,32);
            _pClientDigest = new byte[32];
            Buffer.BlockCopy(pTempHash, 0, _pClientDigest, 0, 32);
            OutputBuffer.Write(_pOutputBuffer, 0, 1536);
            //_outputBuffer222.Write(_pOutputBuffer, 0, 1536);
            _pOutputBuffer = null;
            if (!EnqueueForOutbound(OutputBuffer))
            {
                Logger.FATAL("Unable to signal ouput data");
                return false;
            }
            _rtmpState = RTMPState.RTMP_STATE_CLIENT_REQUEST_SENT;

            return true;
        }