OpenSSL: Make serial number of peer certificate available in event_cb
Add serial number to the event_cb() information for the peer certificate chain. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
		
							parent
							
								
									ee598e431b
								
							
						
					
					
						commit
						2ff952a5dd
					
				
					 2 changed files with 17 additions and 0 deletions
				
			
		|  | @ -64,6 +64,7 @@ union tls_event_data { | ||||||
| 		size_t hash_len; | 		size_t hash_len; | ||||||
| 		const char *altsubject[TLS_MAX_ALT_SUBJECT]; | 		const char *altsubject[TLS_MAX_ALT_SUBJECT]; | ||||||
| 		int num_altsubject; | 		int num_altsubject; | ||||||
|  | 		const char *serial_num; | ||||||
| 	} peer_cert; | 	} peer_cert; | ||||||
| 
 | 
 | ||||||
| 	struct { | 	struct { | ||||||
|  |  | ||||||
|  | @ -111,6 +111,12 @@ static int RSA_bits(const RSA *r) | ||||||
| 	return BN_num_bits(r->n); | 	return BN_num_bits(r->n); | ||||||
| } | } | ||||||
| #endif /* CONFIG_SUITEB */ | #endif /* CONFIG_SUITEB */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | static const unsigned char * ASN1_STRING_get0_data(const ASN1_STRING *x) | ||||||
|  | { | ||||||
|  | 	return ASN1_STRING_data((ASN1_STRING *) x); | ||||||
|  | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef ANDROID | #ifdef ANDROID | ||||||
|  | @ -1824,6 +1830,8 @@ static void openssl_tls_cert_event(struct tls_connection *conn, | ||||||
| 	GENERAL_NAME *gen; | 	GENERAL_NAME *gen; | ||||||
| 	void *ext; | 	void *ext; | ||||||
| 	stack_index_t i; | 	stack_index_t i; | ||||||
|  | 	ASN1_INTEGER *ser; | ||||||
|  | 	char serial_num[128]; | ||||||
| #ifdef CONFIG_SHA256 | #ifdef CONFIG_SHA256 | ||||||
| 	u8 hash[32]; | 	u8 hash[32]; | ||||||
| #endif /* CONFIG_SHA256 */ | #endif /* CONFIG_SHA256 */ | ||||||
|  | @ -1852,6 +1860,14 @@ static void openssl_tls_cert_event(struct tls_connection *conn, | ||||||
| 	ev.peer_cert.depth = depth; | 	ev.peer_cert.depth = depth; | ||||||
| 	ev.peer_cert.subject = subject; | 	ev.peer_cert.subject = subject; | ||||||
| 
 | 
 | ||||||
|  | 	ser = X509_get_serialNumber(err_cert); | ||||||
|  | 	if (ser) { | ||||||
|  | 		wpa_snprintf_hex_uppercase(serial_num, sizeof(serial_num), | ||||||
|  | 					   ASN1_STRING_get0_data(ser), | ||||||
|  | 					   ASN1_STRING_length(ser)); | ||||||
|  | 		ev.peer_cert.serial_num = serial_num; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	ext = X509_get_ext_d2i(err_cert, NID_subject_alt_name, NULL, NULL); | 	ext = X509_get_ext_d2i(err_cert, NID_subject_alt_name, NULL, NULL); | ||||||
| 	for (i = 0; ext && i < sk_GENERAL_NAME_num(ext); i++) { | 	for (i = 0; ext && i < sk_GENERAL_NAME_num(ext); i++) { | ||||||
| 		char *pos; | 		char *pos; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Jouni Malinen
						Jouni Malinen