Negociación de SSH: Bad SSH2_MSG_KEX_DH_GEX_REPLY o algo más?

Estoy haciendo la emulación de ssh de unix para iOS. En el process de negociación, encontré muchos de los obstáculos y aún luchaba contra ellos. Una de las últimas es sobre los datos del package SSH2_MSG_KEX_DH_GEX_REPLY, donde recibo la longitud incorrecta del package (puede ser relleno externo). La descripción del package para el process general es la siguiente:

Client : connection with aix.polarhome.com with port 775 (changed port for ssh) using GCDAsyncSocket Server : SSH-2.0-OpenSSH_6.0 Client : send SSH-2.0-OpenSSH_6.0 (Rest packet will follow BPP protocol) Server : SSH2_MSG_KEXINIT with set of supported algorithms Client : SSH2_MSG_KEXINIT with set of common algorithms Client : SSH2_MSG_KEX_DH_GEX_REQUEST_OLD code: SignedByte sendByte[1920]; int writeIndex = 0; minGroupLength = 1024; prefGroupLength = 1024; maxGroupLength = 4096; sendByte[writeIndex++] = SSH2_MSG_KEX_DH_GEX_REQUEST_OLD; [self write32BitInteger:prefGroupLength toPacket:sendByte fromIndex:writeIndex]; writeIndex += 4; [self sendSSHBinaryPacketPayload:sendByte toLength:writeIndex]; writeIndex = 0; Server : SSH2_MSG_KEX_DH_GEX_GROUP client -> fetch values of p and g compute value of e (1 < e < (p-1)/2) Client : SSH2_MSG_KEX_DH_GEX_INIT Code SignedByte sendByte[1920]; int writeIndex = 0; NSInteger eByteCount = [[e description] stringByReplacingOccurrencesOfString:@" " withString:@""].length/2; sendByte[writeIndex++] = SSH2_MSG_KEX_DH_GEX_INIT; [self write32BitInteger:eByteCount toPacket:sendByte fromIndex:writeIndex]; writeIndex += 4; Byte eBytes[eByteCount]; NSInteger length = [self getBytes:eBytes fromBigInteger:e]; for (int i = 0; i < length; i++) { sendByte[writeIndex++] = eBytes[i]; } [self sendSSHBinaryPacketPayload:sendByte toLength:writeIndex]; writeIndex = 0; Server : SSH2_MSG_KEX_DH_GEX_REPLY Total length : 720 Packet length (4 bytes): 00 00 02 bc (700 which should be 720 - 4 = 716) Don't Know why this 700? client -> read host key and verify it read value of f read signature and verify it Client : SSH2_MSG_NEWKEYS 

Ahora, después de enviar el server de packages pasado se burla y no hay datos a cambio de SSH2_MSG_NEWKEYS.

Miré el código de otros emuladores ssh pero ninguno de ellos me ayudó. No tengo ni idea, lo que debo hacer, por favor ayuda, estoy muy frustrado.

Por @revinder en un comentario:

Resolví mi propio server enviando los dos packages combinados en uno, el SSH2_MSG_KEX_DH_GEX_REPLY y el SSH2_MSG_NEWKEYS.