| 
														
															@@ -329,7 +329,7 @@ test_link_handshake_recv_certs_ok_server(void *arg) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #define CERTS_FAIL(name, code)                          \ 
														 | 
														
														 | 
														
															 #define CERTS_FAIL(name, code)                          \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   static void                                                           \ 
														 | 
														
														 | 
														
															   static void                                                           \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  test_link_handshake_recv_certs_ ## name (void *arg)                   \ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  test_link_handshake_recv_certs_ ## name(void *arg)                    \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   {                                                                     \ 
														 | 
														
														 | 
														
															   {                                                                     \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_data_t *d = arg;                                              \ 
														 | 
														
														 | 
														
															     certs_data_t *d = arg;                                              \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     { code ; }                                                          \ 
														 | 
														
														 | 
														
															     { code ; }                                                          \ 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -349,44 +349,54 @@ CERTS_FAIL(already_authenticated, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 CERTS_FAIL(empty, d->cell->payload_len = 0) 
														 | 
														
														 | 
														
															 CERTS_FAIL(empty, d->cell->payload_len = 0) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 CERTS_FAIL(bad_circid, d->cell->circ_id = 1) 
														 | 
														
														 | 
														
															 CERTS_FAIL(bad_circid, d->cell->circ_id = 1) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 CERTS_FAIL(truncated_1, d->cell->payload[0] = 5) 
														 | 
														
														 | 
														
															 CERTS_FAIL(truncated_1, d->cell->payload[0] = 5) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(truncated_2, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-           d->cell->payload_len = 4; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-           memcpy(d->cell->payload, "\x01\x01\x00\x05", 4);}) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(truncated_3, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-           d->cell->payload_len = 7; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-           memcpy(d->cell->payload, "\x01\x01\x00\x05""abc", 7);}) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(truncated_2, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             d->cell->payload_len = 4; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             memcpy(d->cell->payload, "\x01\x01\x00\x05", 4); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(truncated_3, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             d->cell->payload_len = 7; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             memcpy(d->cell->payload, "\x01\x01\x00\x05""abc", 7); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #define REENCODE() do {                                                 \ 
														 | 
														
														 | 
														
															 #define REENCODE() do {                                                 \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     ssize_t n = certs_cell_encode(d->cell->payload, 4096, d->ccell);    \ 
														 | 
														
														 | 
														
															     ssize_t n = certs_cell_encode(d->cell->payload, 4096, d->ccell);    \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     tt_int_op(n, >, 0);                                                 \ 
														 | 
														
														 | 
														
															     tt_int_op(n, >, 0);                                                 \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     d->cell->payload_len = n;                                           \ 
														 | 
														
														 | 
														
															     d->cell->payload_len = n;                                           \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   } while (0) 
														 | 
														
														 | 
														
															   } while (0) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(not_x509, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(not_x509, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_cert_setlen_body(certs_cell_get_certs(d->ccell, 0), 3); 
														 | 
														
														 | 
														
															     certs_cell_cert_setlen_body(certs_cell_get_certs(d->ccell, 0), 3); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_len = 3; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_len = 3; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     REENCODE(); 
														 | 
														
														 | 
														
															     REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(both_link, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(both_link, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 1; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 1; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 1; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 1; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     REENCODE(); 
														 | 
														
														 | 
														
															     REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(both_id_rsa, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(both_id_rsa, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 2; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 2; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     REENCODE(); 
														 | 
														
														 | 
														
															     REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(both_auth, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(both_auth, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 3; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 3; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 3; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 3; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     REENCODE(); 
														 | 
														
														 | 
														
															     REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(wrong_labels_1, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(wrong_labels_1, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 1; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_type = 1; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     REENCODE(); 
														 | 
														
														 | 
														
															     REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(wrong_labels_2, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(wrong_labels_2, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     const tor_x509_cert_t *a; 
														 | 
														
														 | 
														
															     const tor_x509_cert_t *a; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     const tor_x509_cert_t *b; 
														 | 
														
														 | 
														
															     const tor_x509_cert_t *b; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     const uint8_t *enca; 
														 | 
														
														 | 
														
															     const uint8_t *enca; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -399,20 +409,23 @@ CERTS_FAIL(wrong_labels_2, { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_len = lena; 
														 | 
														
														 | 
														
															     certs_cell_get_certs(d->ccell, 1)->cert_len = lena; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     REENCODE(); 
														 | 
														
														 | 
														
															     REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   }) 
														 | 
														
														 | 
														
															   }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(wrong_labels_3, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    certs_cell_get_certs(d->ccell, 1)->cert_type = 3; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    REENCODE(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(server_missing_certs, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  d->c->handshake_state->started_here = 0; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-CERTS_FAIL(server_wrong_labels_1, { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  d->c->handshake_state->started_here = 0; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  certs_cell_get_certs(d->ccell, 1)->cert_type = 3; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  REENCODE(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(wrong_labels_3, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             certs_cell_get_certs(d->ccell, 1)->cert_type = 3; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(server_missing_certs, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             d->c->handshake_state->started_here = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+CERTS_FAIL(server_wrong_labels_1, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             d->c->handshake_state->started_here = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             certs_cell_get_certs(d->ccell, 0)->cert_type = 2; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             certs_cell_get_certs(d->ccell, 1)->cert_type = 3; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+             REENCODE(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+           }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 static void 
														 | 
														
														 | 
														
															 static void 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 test_link_handshake_send_authchallenge(void *arg) 
														 | 
														
														 | 
														
															 test_link_handshake_send_authchallenge(void *arg) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -563,7 +576,7 @@ test_link_handshake_recv_authchallenge_ok_unrecognized(void *arg) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #define AUTHCHALLENGE_FAIL(name, code)                          \ 
														 | 
														
														 | 
														
															 #define AUTHCHALLENGE_FAIL(name, code)                          \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   static void                                                           \ 
														 | 
														
														 | 
														
															   static void                                                           \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  test_link_handshake_recv_authchallenge_ ## name (void *arg)           \ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  test_link_handshake_recv_authchallenge_ ## name(void *arg)            \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   {                                                                     \ 
														 | 
														
														 | 
														
															   {                                                                     \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     authchallenge_data_t *d = arg;                                      \ 
														 | 
														
														 | 
														
															     authchallenge_data_t *d = arg;                                      \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     { code ; }                                                          \ 
														 | 
														
														 | 
														
															     { code ; }                                                          \ 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -782,7 +795,7 @@ test_link_handshake_auth_cell(void *arg) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 #define AUTHENTICATE_FAIL(name, code)                           \ 
														 | 
														
														 | 
														
															 #define AUTHENTICATE_FAIL(name, code)                           \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   static void                                                   \ 
														 | 
														
														 | 
														
															   static void                                                   \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  test_link_handshake_auth_ ## name (void *arg)                 \ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  test_link_handshake_auth_ ## name(void *arg)                  \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   {                                                             \ 
														 | 
														
														 | 
														
															   {                                                             \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     authenticate_data_t *d = arg;                               \ 
														 | 
														
														 | 
														
															     authenticate_data_t *d = arg;                               \ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     { code ; }                                                  \ 
														 | 
														
														 | 
														
															     { code ; }                                                  \ 
														 |