Merge branch 'master' of github.com:cyassl/cyassl

This commit is contained in:
John Safranek
2012-05-20 14:53:07 -07:00
2 changed files with 93 additions and 56 deletions

View File

@@ -1110,6 +1110,8 @@ static int ProcessServerHello(const byte* input, int* sslBytes,
XMEMCPY(session->sslServer->arrays.sessionID, input, ID_LEN); XMEMCPY(session->sslServer->arrays.sessionID, input, ID_LEN);
input += b; input += b;
*sslBytes -= b; *sslBytes -= b;
if (b)
session->sslServer->options.haveSessionId = 1;
(void)*input++; /* eat first byte, always 0 */ (void)*input++; /* eat first byte, always 0 */
b = *input++; b = *input++;
@@ -1117,7 +1119,8 @@ static int ProcessServerHello(const byte* input, int* sslBytes,
session->sslClient->options.cipherSuite = b; session->sslClient->options.cipherSuite = b;
*sslBytes -= SUITE_LEN; *sslBytes -= SUITE_LEN;
if (XMEMCMP(session->sslServer->arrays.sessionID, if (session->sslServer->options.haveSessionId &&
XMEMCMP(session->sslServer->arrays.sessionID,
session->sslClient->arrays.sessionID, ID_LEN) == 0) { session->sslClient->arrays.sessionID, ID_LEN) == 0) {
/* resuming */ /* resuming */
SSL_SESSION* resume = GetSession(session->sslServer, SSL_SESSION* resume = GetSession(session->sslServer,
@@ -1271,6 +1274,7 @@ static int DoHandShake(const byte* input, int* sslBytes,
ret = DoFinished(ssl, input, &inOutIdx, SNIFF); ret = DoFinished(ssl, input, &inOutIdx, SNIFF);
if (ret == 0 && session->flags.cached == 0) { if (ret == 0 && session->flags.cached == 0) {
session->sslServer->options.haveSessionId = 1;
AddSession(session->sslServer); AddSession(session->sslServer);
session->flags.cached = 1; session->flags.cached = 1;
} }

View File

@@ -128,6 +128,9 @@ int main(int argc, char** argv)
#endif #endif
ssl_Trace("./tracefile.txt", err); ssl_Trace("./tracefile.txt", err);
if (argc == 1) {
/* normal case, user chooses device and port */
if (pcap_findalldevs(&alldevs, err) == -1) if (pcap_findalldevs(&alldevs, err) == -1)
err_sys("Error in pcap_findalldevs"); err_sys("Error in pcap_findalldevs");
@@ -140,8 +143,8 @@ int main(int argc, char** argv)
} }
if (i == 0) if (i == 0)
err_sys("No interfaces found! Make sure pcap or WinPcap is installed " err_sys("No interfaces found! Make sure pcap or WinPcap is"
"correctly and you have sufficient permissions"); " installed correctly and you have sufficient permissions");
printf("Enter the interface number (1-%d): ", i); printf("Enter the interface number (1-%d): ", i);
scanf("%d", &inum); scanf("%d", &inum);
@@ -164,7 +167,8 @@ int main(int argc, char** argv)
switch(a->addr->sa_family) switch(a->addr->sa_family)
{ {
case AF_INET: case AF_INET:
server =iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr); server =
iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr);
printf("server = %s\n", server); printf("server = %s\n", server);
break; break;
} }
@@ -202,6 +206,35 @@ int main(int argc, char** argv)
ret = ssl_SetPrivateKey(server, port, "../../certs/server-key.pem", ret = ssl_SetPrivateKey(server, port, "../../certs/server-key.pem",
FILETYPE_PEM, NULL, err); FILETYPE_PEM, NULL, err);
}
else if (argc >= 3) {
pcap = pcap_open_offline(argv[1], err);
if (pcap == NULL) {
printf("pcap_open_offline failed %s\n", err);
ret = -1;
}
else {
/* defaults for server and port */
port = 443;
server = "127.0.0.1";
if (argc >= 4)
server = argv[3];
if (argc >= 5)
port = atoi(argv[4]);
ret = ssl_SetPrivateKey(server, port, argv[2],
FILETYPE_PEM, NULL, err);
}
}
else {
/* usage error */
printf(
"usage: ./snifftest or ./snifftest dump pemKey [server] [port]\n");
exit(EXIT_FAILURE);
}
if (ret != 0) if (ret != 0)
err_sys(err); err_sys(err);