@@ -32,7 +32,6 @@ void ClientHelloParser::Parse(const uint8_t* data, size_t avail) {
3232 break ;
3333 // Fall through
3434 case kTLSHeader :
35- case kSSL2Header :
3635 ParseHeader (data, avail);
3736 break ;
3837 case kPaused :
@@ -59,20 +58,8 @@ bool ClientHelloParser::ParseRecordHeader(const uint8_t* data, size_t avail) {
5958 state_ = kTLSHeader ;
6059 body_offset_ = 5 ;
6160 } else {
62- #ifdef OPENSSL_NO_SSL2
63- frame_len_ = ((data[0 ] << 8 ) & kSSL2HeaderMask ) + data[1 ];
64- state_ = kSSL2Header ;
65- if (data[0 ] & kSSL2TwoByteHeaderBit ) {
66- // header without padding
67- body_offset_ = 2 ;
68- } else {
69- // header with padding
70- body_offset_ = 3 ;
71- }
72- #else
7361 End ();
7462 return false ;
75- #endif // OPENSSL_NO_SSL2
7663 }
7764
7865 // Sanity check (too big frame, or too small)
@@ -85,12 +72,6 @@ bool ClientHelloParser::ParseRecordHeader(const uint8_t* data, size_t avail) {
8572 return true ;
8673}
8774
88- #ifdef OPENSSL_NO_SSL2
89- # define NODE_SSL2_VER_CHECK (buf ) false
90- #else
91- # define NODE_SSL2_VER_CHECK (buf ) ((buf)[0 ] == 0x00 && (buf)[1 ] == 0x02 )
92- #endif // OPENSSL_NO_SSL2
93-
9475
9576void ClientHelloParser::ParseHeader (const uint8_t * data, size_t avail) {
9677 ClientHello hello;
@@ -99,24 +80,20 @@ void ClientHelloParser::ParseHeader(const uint8_t* data, size_t avail) {
9980 if (body_offset_ + frame_len_ > avail)
10081 return ;
10182
102- // Skip unsupported frames and gather some data from frame
103- // Check hello protocol version
104- if (!(data[body_offset_ + 4 ] == 0x03 && data[body_offset_ + 5 ] <= 0x03 ) &&
105- !NODE_SSL2_VER_CHECK (data + body_offset_ + 4 )) {
83+ // Check hello protocol version. Protocol tuples that we know about:
84+ //
85+ // (3,0) SSL v3.0
86+ // (3,1) TLS v1.0
87+ // (3,2) TLS v1.1
88+ // (3,3) TLS v1.2
89+ //
90+ if (data[body_offset_ + 4 ] != 0x03 || data[body_offset_ + 5 ] > 0x03 )
10691 goto fail;
107- }
10892
10993 if (data[body_offset_] == kClientHello ) {
11094 if (state_ == kTLSHeader ) {
11195 if (!ParseTLSClientHello (data, avail))
11296 goto fail;
113- } else if (state_ == kSSL2Header ) {
114- #ifdef OPENSSL_NO_SSL2
115- if (!ParseSSL2ClientHello (data, avail))
116- goto fail;
117- #else
118- abort (); // Unreachable
119- #endif // OPENSSL_NO_SSL2
12097 } else {
12198 // We couldn't get here, but whatever
12299 goto fail;
@@ -145,9 +122,6 @@ void ClientHelloParser::ParseHeader(const uint8_t* data, size_t avail) {
145122}
146123
147124
148- #undef NODE_SSL2_VER_CHECK
149-
150-
151125void ClientHelloParser::ParseExtension (ClientHelloParser::ExtensionType type,
152126 const uint8_t * data,
153127 size_t len) {
@@ -269,28 +243,4 @@ bool ClientHelloParser::ParseTLSClientHello(const uint8_t* data, size_t avail) {
269243 return true ;
270244}
271245
272-
273- #ifdef OPENSSL_NO_SSL2
274- bool ClientHelloParser::ParseSSL2ClientHello (const uint8_t * data,
275- size_t avail) {
276- const uint8_t * body;
277-
278- // Skip header, version
279- size_t session_offset = body_offset_ + 3 ;
280-
281- if (session_offset + 4 < avail) {
282- body = data + session_offset;
283-
284- uint16_t ciphers_size = (body[0 ] << 8 ) + body[1 ];
285-
286- if (body + 4 + ciphers_size < data + avail) {
287- session_size_ = (body[2 ] << 8 ) + body[3 ];
288- session_id_ = body + 4 + ciphers_size;
289- }
290- }
291-
292- return true ;
293- }
294- #endif // OPENSSL_NO_SSL2
295-
296246} // namespace node
0 commit comments