[Red5devs] Handshake

Chris Sperry biggyspender at gmail.com
Wed Jul 9 15:03:04 PDT 2008


Hi Red5Devs,

My first post here. I've been trying to implement my own media server 
for the purposes of delivering radio streams, but having got the point 
where the media server receives the "play" invoke, find myself staring 
down the side of a very high precipice!

For what it's worth, here's my c# interpretation of RubyIZUMI's 
handshake. It's a straight port from the Ruby code. I have no idea how 
to verify if this really works or not, as I've not got past sending 
invoke messages but Flash has never failed to connect...

cheers,

/chris

using System;
using System.Security.Cryptography;

namespace RTMP
{
    class RtmpHandshake
    {
        public static byte[] handshakeServer =
            {
                
0x01,0x86,0x4f,0x7f,0x00,0x00,0x00,0x00,0x6b,0x04,0x67,0x52,0xa2,0x70,0x5b,0x51,
                
0xa2,0x89,0xca,0xcc,0x8e,0x70,0xf0,0x06,0x70,0x0e,0xd7,0xb3,0x73,0x7f,0x07,0xc1,
                
0x72,0xd6,0xcb,0x4c,0xc0,0x45,0x0f,0xf5,0x4f,0xec,0xd0,0x2f,0x46,0x2b,0x76,0x10,
                
0x92,0x1b,0x0e,0xb6,0xed,0x71,0x73,0x45,0xc1,0xc6,0x26,0x0c,0x69,0x59,0x7b,0xbb,
                
0x53,0xb9,0x10,0x4d,0xea,0xc1,0xe7,0x7b,0x70,0xde,0xdc,0xf8,0x84,0x90,0xbf,0x80,
                
0xe8,0x85,0xb2,0x46,0x2c,0x78,0xa1,0x85,0x01,0x8f,0x8b,0x05,0x3f,0xa1,0x0c,0x1a,
                
0x78,0x70,0x8c,0x8e,0x77,0x67,0xbc,0x19,0x2f,0xab,0x26,0xa1,0x7e,0x88,0xd8,0xce,
                
0x24,0x63,0x21,0x75,0x3a,0x5a,0x6f,0xc2,0xa1,0x2d,0x4f,0x64,0xb7,0x7b,0xf7,0xef,
                
0xda,0x45,0xb2,0x51,0xfd,0xcb,0x74,0x49,0xfd,0x63,0x8b,0x88,0xfb,0xde,0x5a,0x3b,
                
0xab,0x7f,0x75,0x25,0xbb,0x35,0x51,0x03,0x81,0x12,0xff,0x66,0x02,0x3d,0x88,0xdc,
                
0x66,0xa2,0xfb,0x09,0x24,0x9d,0x86,0xfd,0xc4,0x00,0xc2,0x8b,0x6f,0xb7,0xb2,0x15,
                
0x10,0xc0,0x1b,0x71,0xa8,0x3e,0x88,0xeb,0x7e,0xf3,0xb2,0xe3,0xe8,0x3c,0x00,0x9b,
                
0x26,0xba,0xb4,0x5f,0x2c,0x36,0xf3,0x4a,0x59,0x09,0x1b,0xe5,0x00,0x9d,0xe4,0x66,
                
0x4d,0x05,0x66,0xd0,0xd1,0xd6,0x94,0x4f,0x64,0xa1,0x2e,0x8d,0x2f,0xb0,0x06,0x01,
                
0xb3,0x00,0x3d,0x77,0xcd,0x1b,0xdd,0xcc,0xbf,0xe9,0xcd,0x1a,0x6b,0x68,0xdd,0x1c,
                
0x7b,0xfd,0x2e,0xb1,0x8b,0x45,0xfd,0x5b,0x48,0x52,0x03,0x01,0xe8,0xf1,0x0f,0xe7,
                
0x27,0xfc,0x2a,0x52,0x7c,0x14,0x22,0x8b,0x74,0xbd,0xd9,0x97,0x63,0xef,0xfa,0xa3,
                
0xd9,0x21,0x12,0x0b,0x04,0x62,0x02,0x98,0x41,0xf2,0xb4,0xc3,0xe3,0xe2,0x2b,0x2a,
                
0xff,0xca,0xb4,0x48,0x1e,0x82,0x50,0x90,0x94,0x37,0x24,0x7e,0xa1,0x03,0x1a,0xf0,
                
0x9f,0x2b,0xbe,0x64,0xe5,0x53,0xb9,0xb6,0x43,0x8e,0x26,0x6c,0x63,0x72,0x8d,0xb7,
                
0x7c,0xb8,0x21,0x8f,0xbb,0x1c,0x2a,0x4e,0xc7,0xec,0xa7,0xa9,0xbc,0x15,0x10,0xe9,
                
0x4c,0x46,0xa5,0x60,0xa9,0x71,0x41,0xdd,0x25,0xf5,0xc1,0xf6,0xbd,0x75,0x1f,0xb0,
                
0x15,0xe0,0xed,0xc2,0x4b,0xac,0xf1,0xc8,0xef,0xa3,0x44,0xbe,0x90,0xab,0x77,0x28,
                
0xbf,0xc0,0xe0,0x63,0xaf,0xd9,0x07,0x9d,0x93,0x16,0x90,0x7a,0xe2,0xb4,0xe8,0xe2,
                
0x3e,0x4b,0x18,0x5f,0x3e,0x87,0x09,0xbe,0x36,0xd0,0x8f,0x7c,0x22,0x13,0x9f,0xc5,
                
0x78,0xe0,0x54,0x4c,0xa7,0x77,0x3f,0xdf,0x87,0x4a,0x28,0x7b,0x47,0x80,0x6a,0xf0,
                
0x50,0xcc,0xde,0x4c,0x44,0x41,0x74,0x3d,0x03,0x37,0x8b,0xbf,0x79,0x5b,0x8c,0xb0,
                
0x2f,0x6e,0x9c,0x98,0x29,0x22,0x49,0x2f,0xc9,0x6d,0xf1,0x08,0xc4,0x4f,0xb1,0x91,
                
0xb3,0xee,0x57,0xc1,0x17,0x5d,0xd0,0xe8,0x19,0xfb,0x9b,0xd6,0xa8,0x56,0x92,0x04,
                
0x4c,0x0e,0xe0,0x52,0x93,0x9a,0xec,0xed,0xf3,0xf7,0xef,0xd7,0x33,0xe3,0xcd,0xc7,
                
0x4b,0xac,0xb7,0xa9,0xa5,0x13,0x09,0x6c,0x94,0x49,0x72,0x03,0xf3,0xcf,0x15,0x31,
                
0xbc,0xb5,0x68,0xc2,0x49,0xe1,0x6e,0x7d,0xcb,0x4e,0xec,0xfc,0xa7,0xb7,0xed,0x1c,
                
0x02,0x49,0x0e,0x7f,0x25,0xeb,0xd1,0x81,0x81,0xc0,0xa7,0x49,0x32,0x16,0x11,0x31,
                
0x59,0x12,0x43,0xd3,0xa6,0x95,0x4a,0xc5,0xfe,0xdf,0x14,0xda,0xa6,0x5a,0xc0,0xd5,
                
0x6a,0xaf,0xb3,0xde,0x32,0x2a,0x13,0x03,0xd3,0x10,0x71,0x0b,0xc0,0x1e,0xcf,0xdb,
                
0xaa,0xcc,0xa6,0xb5,0x65,0x2e,0xc4,0x0b,0x5c,0xa7,0x1c,0x8b,0x2d,0x7f,0xc0,0x4c,
                
0x4a,0xa4,0x0b,0xa0,0x60,0xc4,0xcf,0xb1,0xbe,0xe4,0xe4,0x50,0xc9,0xcc,0xa0,0xe8,
                
0x79,0x12,0xc4,0xb4,0x70,0xf5,0x84,0x98,0x83,0xe2,0xa9,0x8f,0xba,0xff,0x88,0xa2,
                
0x21,0xba,0x00,0x3d,0xc4,0x57,0xe6,0x6a,0xf4,0xdc,0x01,0x1e,0xac,0x0a,0xcc,0x49,
                
0xaf,0x9c,0xc7,0xcd,0xc1,0x14,0x6e,0x12,0x87,0xf8,0x22,0xeb,0xdf,0x48,0xda,0x9f,
                
0xf2,0x8b,0xc1,0xd2,0x44,0x94,0xe4,0x3e,0xd0,0x85,0x56,0xe4,0x9a,0xfd,0xb9,0xb3,
                
0x35,0x38,0x1d,0x15,0x4d,0x28,0xab,0xb0,0x17,0xc0,0x5b,0x09,0x86,0x07,0xfa,0x69,
                
0xda,0x65,0xb8,0xd9,0x8f,0xe6,0xa1,0x83,0xab,0x07,0x98,0x3c,0x79,0xf4,0x59,0x08,
                
0x8f,0x83,0x77,0xbd,0xa1,0xa1,0x76,0x28,0x9c,0x0f,0xcc,0xdc,0xce,0x1f,0x16,0x02,
                
0x47,0x98,0x37,0x96,0x87,0xb1,0x70,0x3a,0xea,0xa4,0x65,0x77,0x98,0x12,0x27,0x23,
                
0x47,0xa8,0x1b,0x79,0xc0,0xec,0x53,0x32,0xe6,0xc1,0x61,0x7b,0xa0,0x98,0x9f,0xfc,
                
0x8d,0xe8,0x5c,0xaf,0xc6,0xbf,0x1f,0xd1,0x40,0xdc,0x28,0x81,0x34,0x68,0xb7,0xda,
                
0x10,0xf2,0x63,0x52,0xcb,0xe7,0x18,0x85,0xd5,0x99,0x33,0xee,0x9a,0x28,0xfa,0xdf,
                
0x6d,0xcb,0xc2,0xce,0x9d,0xed,0x9d,0xbd,0xfd,0xd7,0x0a,0xe4,0x89,0xd3,0x10,0x9b,
                
0xdb,0x6f,0xd9,0x37,0x8b,0x79,0x9c,0x94,0xc2,0x44,0x31,0x9f,0x24,0xef,0x21,0x1d,
                
0x5f,0xd6,0xf9,0x99,0x7b,0xef,0x59,0xe6,0xd6,0xdd,0x6a,0x74,0x82,0xb8,0xc5,0xfb,
                
0x1d,0xe8,0xfc,0x67,0x4f,0x4d,0xb5,0xcf,0xa9,0x52,0x94,0xc5,0xb7,0x32,0xa0,0x45,
                
0x0a,0x35,0x44,0x59,0x1e,0x1c,0x64,0x89,0x51,0x80,0x7b,0x1f,0x02,0x77,0x81,0xfa,
                
0xe9,0x26,0x4c,0x5f,0xe2,0x0d,0x05,0x55,0xee,0x71,0x71,0xfc,0x35,0x33,0x22,0x63,
                
0xf5,0x36,0x45,0xf6,0x2f,0xd0,0x13,0xb7,0x58,0x4f,0x35,0x19,0x59,0x0a,0xe5,0xf8,
                
0x8a,0x4c,0x59,0x32,0xbf,0xca,0xb0,0x06,0xc2,0x6c,0xa9,0x48,0x5b,0x4c,0x76,0x24,
                
0xae,0x9d,0x5b,0x7b,0x79,0x38,0x4e,0x9e,0x47,0x12,0x8a,0xc6,0xe0,0x04,0x37,0x72,
                
0xdd,0xaf,0x3d,0x0d,0x68,0x7e,0xd8,0x80,0x7b,0x07,0x23,0xce,0x40,0x4a,0xed,0x83,
                
0x55,0x56,0xfd,0xdb,0x95,0xb3,0x1c,0x33,0xf1,0x43,0xa8,0x0e,0x5e,0x67,0xd6,0x3a,
                
0xd0,0x89,0x5e,0x72,0x77,0x7f,0x10,0x3c,0xc4,0x7c,0x9a,0xa3,0x55,0xc5,0xd3,0x5b,
                
0x3a,0xae,0x12,0x0c,0x71,0x73,0xa0,0x58,0x90,0x54,0xa8,0x1c,0x31,0x20,0xdb,0xde,
                
0xdd,0x35,0xb1,0x09,0xa2,0xd0,0x6e,0x39,0x39,0xa5,0x0a,0x3d,0x8a,0x00,0x4b,0x95,
                
0x6f,0x8c,0x12,0x41,0xc6,0x46,0x10,0x5e,0x9d,0x50,0x85,0x0e,0x6b,0x81,0xa7,0x3b,
                
0x35,0xa6,0x38,0xf5,0xc2,0xba,0x6c,0x02,0xda,0x27,0x29,0x6e,0xe9,0x54,0x41,0xa4,
                
0x94,0x75,0xe8,0x55,0xc0,0xe3,0xc2,0x91,0x8a,0x1d,0xfb,0x2b,0xba,0x43,0xe7,0x45,
                
0x85,0xe8,0x13,0x07,0x1d,0x9c,0x37,0xa8,0xf3,0xca,0xf4,0x19,0x77,0xc4,0x65,0xd6,
                
0x18,0x3e,0x60,0x08,0x74,0x49,0xba,0xc8,0x86,0x37,0x8a,0x0f,0x79,0x91,0x53,0x20,
                
0x23,0x00,0xb9,0xc5,0x1b,0x01,0xdd,0x10,0x34,0x05,0x42,0xa0,0x64,0xab,0x4d,0x51,
                
0xf4,0x53,0x35,0x18,0xde,0x20,0x1f,0xaa,0xe2,0x40,0x0d,0x6d,0x77,0x36,0x1f,0xee,
                
0x3a,0x93,0xdb,0x1d,0xd6,0xa0,0x23,0xcc,0xe6,0xa8,0x44,0x8e,0xae,0x9c,0xd7,0x97,
                
0x6a,0x99,0xee,0x40,0x15,0xd5,0x5a,0x6d,0xf6,0x9c,0x2c,0x52,0xcd,0xfa,0xf4,0xc8,
                
0x02,0xee,0xf2,0x76,0x8b,0x49,0x6d,0x66,0x83,0x5f,0xbe,0x05,0x8e,0xf2,0x27,0x73,
                
0xdb,0x00,0xeb,0x9a,0xb4,0xbf,0x47,0x9a,0xbd,0xf1,0x4f,0x70,0xed,0x33,0xce,0x31,
                
0x9d,0x9f,0x95,0x80,0x9e,0x73,0x11,0x6c,0x03,0x7b,0x6e,0x62,0x9c,0xd0,0xaa,0xf6,
                
0x5d,0xe0,0xd8,0x96,0x94,0x46,0xd1,0x10,0x3c,0x1b,0x9d,0x40,0xdd,0xab,0xec,0x8a,
                
0x5b,0x1a,0xb6,0x19,0x57,0x99,0x09,0xe8,0xec,0x82,0xdc,0x06,0x39,0x86,0x25,0x3b,
                
0x67,0xb5,0x17,0xc5,0x6e,0x6e,0x1c,0x6c,0xea,0xbe,0xb8,0xdd,0x68,0xf8,0xf3,0x18,
                
0xf2,0x3c,0x99,0xdc,0xa9,0xd3,0xb2,0x7a,0x40,0x70,0x4b,0xc2,0xd2,0xa7,0xb3,0x42,
                
0x19,0xff,0x0b,0xdf,0x07,0x0e,0x6b,0x8e,0xef,0x63,0x92,0xd6,0x15,0x57,0x62,0x12,
                
0x99,0x96,0x96,0xa5,0x34,0x5a,0x2c,0x7c,0xf6,0xbc,0x16,0xb2,0x90,0xc3,0x11,0x5e,
                
0xba,0x0e,0xe4,0x22,0x84,0x32,0x50,0xda,0x1e,0x37,0x06,0x5b,0xef,0x69,0xb7,0x6f,
                
0x10,0xcb,0xdc,0x4d,0xfd,0xdb,0xa3,0xef,0x54,0xea,0xda,0x55,0xba,0x32,0xf4,0x86,
                
0x6b,0xb1,0xc8,0xfc,0x12,0x9a,0xfc,0xda,0xfd,0x2a,0xc2,0x7f,0x70,0xce,0x34,0x38,
                
0xe6,0x6a,0x7d,0x33,0xa0,0x16,0xfb,0xfd,0xa7,0xdf,0x2e,0xe3,0x5f,0x93,0x39,0xaa,
                
0x00,0xc7,0x38,0x2e,0x9c,0xf3,0xc4,0x12,0x46,0xcf,0x06,0xfe,0x0f,0x82,0x82,0x74,
                
0x00,0x71,0xf8,0x28,0x2f,0x9b,0x3f,0x9a,0x42,0x1b,0x3e,0xa6,0x0e,0x90,0xa7,0x45,
                
0xa6,0xcd,0x6e,0x88,0x94,0x08,0x3a,0xe5,0x56,0x36,0x77,0x68,0x2e,0x39,0xd3,0x45,
                
0xee,0x89,0xf0,0x71,0x42,0x2d,0xe2,0x1b,0xf5,0x11,0xf0,0xff,0x05,0x0c,0x78,0xa1,
                
0x65,0xcf,0x3c,0x9e,0xe3,0x37,0x72,0x3a,0x32,0xcb,0x1f,0xfd,0x9d,0x4a,0x0e,0xf7,
                
0x0b,0x2b,0xaa,0x57,0x2c,0x27,0xb3,0xa0,0x2a,0x0f,0x85,0x16,0x6c,0xe2,0xe0,0xa1,
                
0x48,0x8e,0x00,0x8d,0x6d,0xc8,0x10,0xfd,0x43,0x96,0x50,0x07,0x07,0x9a,0xbf,0x50,
                
0x62,0x76,0x3e,0xe1,0xf7,0x70,0xc1,0xb0,0x79,0x8e,0x61,0xe3,0xfb,0x05,0x5f,0xbb,
                
0x2d,0x76,0x69,0x89,0xf3,0x1e,0x62,0xf6,0x27,0x3d,0x3e,0x41,0x0f,0xf5,0x0f,0xc7,
                
0xf3,0x0e,0x3b,0xd5,0xed,0xcf,0xef,0x58,0xfa,0x39,0xdf,0x75,0x85,0x2b,0x8b,0xaa,
                
0x08,0x72,0x52,0xa7,0x98,0x42,0x95,0x7b,0xb7,0xe7,0x10,0xfe,0xdb,0x54,0x34,0xfb,
                
0x91,0x24,0x1c,0x07,0xfb,0x9c,0xce,0xd0,0x46,0xcf,0xc4,0x9d,0x09,0x49,0x24,0xec
            };
        private static byte[] keyServer =
            {
                
0x47,0x65,0x6e,0x75,0x69,0x6e,0x65,0x20,0x41,0x64,0x6f,0x62,0x65,0x20,0x46,0x6c,
                
0x61,0x73,0x68,0x20,0x4d,0x65,0x64,0x69,0x61,0x20,0x53,0x65,0x72,0x76,0x65,0x72,
                
0x20,0x30,0x30,0x31,0xf0,0xee,0xc2,0x4a,0x80,0x68,0xbe,0xe8,0x2e,0x00,0xd0,0xd1,
                
0x02,0x9e,0x7e,0x57,0x6e,0xec,0x5d,0x2d,0x29,0x80,0x6f,0xab,0x93,0xb8,0xe6,0x36,
                0xcf,0xeb,0x31,0xae
            };
        public static byte[] GetHandshake(byte[] clientData)
        {
            if (clientData[4] == 0)
            {
                return clientData;
            }
            int startPos = (clientData[8] + clientData[9] + 
clientData[10] + clientData[11]) % 728 + 12;
            int len = 32;
            byte[] part = new byte[len];
            for (int i = 0; i < len; ++i)
            {
                part[i] = clientData[startPos + i];
            }
            HMACSHA256 hmacSha256 = new HMACSHA256();
            hmacSha256.Key = keyServer;
            byte[] digestA=hmacSha256.ComputeHash(part);
            Random rand = new Random();
            byte[] server = new byte[1504];
            for (int i = 0; i < 1504; ++i)
            {
                server[i] = (byte)rand.Next(256);
            }
            hmacSha256.Key = digestA;
            byte[] digestB = hmacSha256.ComputeHash(server);
            byte[] output = new byte[digestB.Length + server.Length];
            server.CopyTo(output, 0);
            digestB.CopyTo(output, server.Length);
            return output;
        }
    }
}




Mondain wrote:
> Good catch, I'm glad you found it... I haven't integrated it into the 
> core yet, since something like "connecting" has to be 100% before we 
> commit it :)
>
> Paul
>
> On Wed, Jul 9, 2008 at 7:53 AM, Steven Zimmer <stevenlzimmer at gmail.com 
> <mailto:stevenlzimmer at gmail.com>> wrote:
>
>     Hello,
>
>      
>
>     There seems to be a bug with my handshake. Sometimes when it tries
>     to connect it fails every 4^th time or so. Over the weekend I'm
>     going to fix this up. I plan to still be active in helping out
>     with red5, except I won't be spending office hours working on it now.
>
>
>     _______________________________________________
>     Red5devs mailing list
>     Red5devs at osflash.org <mailto:Red5devs at osflash.org>
>     http://osflash.org/mailman/listinfo/red5devs_osflash.org
>
>
>
>
> -- 
> http://gregoire.org/
> http://osflash.org/red5
> ------------------------------------------------------------------------
>
> _______________________________________________
> Red5devs mailing list
> Red5devs at osflash.org
> http://osflash.org/mailman/listinfo/red5devs_osflash.org
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://osflash.org/pipermail/red5devs_osflash.org/attachments/20080709/f29f2e0d/attachment-0001.html 


More information about the Red5devs mailing list