これは、応答ハッシュを作成するためのPythonコードです。
from hashlib import md5
import struct
....
hashed = md5(struct.pack('>II8s', num1, num2, key3)).digest()
この例では、num1とnum2はkey1とkey2の数値です。key3は、受信した実際のテキスト文字列(rawバイト)です。
struct.pack()呼び出しは、ビッグエンディアンモード(数値用)を使用しており、数値ごとに4バイトをパックし、その後に8バイトのkey3文字列(バイト)が続きます。
Python構造体モジュールのドキュメントを参照してください。
Cバージョンは次のようになります。
/* Pack it big-endian */
buf[0] = (num1 & 0xff000000) >> 24;
buf[1] = (num1 & 0xff0000) >> 16;
buf[2] = (num1 & 0xff00) >> 8;
buf[3] = num1 & 0xff;
buf[4] = (num2 & 0xff000000) >> 24;
buf[5] = (num2 & 0xff0000) >> 16;
buf[6] = (num2 & 0xff00) >> 8;
buf[7] = num2 & 0xff;
strncpy(buf+8, headers->key3, 8);
buf[16] = '\0';
md5_buffer(buf, 16, target);
target[16] = '\0';
md5_bufferはglibcにあります。
詳細については、websockify(免責事項:私はwebsockifyを作成しました)の実際の実装(上記のコードが由来する場所)を参照してください。